2013-02-12 18 views
4

的芯片問題是PIC24FJ256GB210UART 3將不接受第5個字節

這是一個100引腳TQFP外形

我們有兩個微處理器的嵌入式系統。

兩個微處理器使用UART進行通信,這是(根據我)映射到PIC24上的UART#3。

我在UART#3中放置了4個字節。一切順利。第5個字節不會進入。

我說FIFO備份。

我的本地硬件專家說,如果我關閉流量控制,字節無論如何都會熄滅。

這是真的嗎?我從來沒有聽說過。我認爲這是另一方面的硬件信號;即在FIFO緩衝器允許在這邊留出空間之前,讀取信號必須發生在另一側。

他對「關閉流量控制」的定義是,我不使用PPS(外設引腳選擇)將RTS(請求發送)或CTS(清除發送)引腳映射到其對應的物理引腳板。

我做到了。結果:沒有變化; FIFO緩衝區仍然填滿。在第四個字節進入後,「#UTXBF」位永遠不會清除。

我有物理引腳編號和標記的原理圖。

我有源代碼和MpLab在寄存器級顯示可執行文件,正好在彙編語言指令本身。

我正在映射UART#3的引腳與我映射UART#2和UART#1的方式完全相同,而其他兩個都完美工作。

雖然數字不同,但指令序列是相同的。這些數字與引腳匹配。

我調試這第三次,看着每個寄存器每一位,並比較它們對手冊,以確保我在正確的特殊功能寄存器正確的位位置正確的對應數字。

這是從MpLab的反彙編窗口中操作碼顯示確切哪些位被設置和清除。

206CC1  mov.w #0x6cc,0x0002   Mov  #Uart_3_Tx_PPS_Output_Register, W1    ;This is the register we want 
21C002  mov.w #0x1c00,0x0004   Mov  #Uart_3_Tx_Or_In_Bit_Pattern, W2    ;These are the bits we want on 
2C0FF3  mov.w #0xc0ff,0x0006   Mov  #Uart_3_Tx_And_Off_Bit_Pattern, W3    ;These are the bits we want off 

780211  mov.w [0x0002],0x0008   Mov  [W1], W4          ;The existing pattern 
618204  and.w 0x0006,0x0008,0x0008  And  W3, W4, W4          ;Turn existing bits off 
710204  ior.w 0x0004,0x0008,0x0008  Ior  W2, W4, W4          ;Turn Desired bits on 
780884  mov.w 0x0008,[0x0002]   Mov  W4, [W1]          ;And that's all there is to it 

執行之後,RPOR6(這是Uart_3_Tx_PPS_Output_Register)包含0x1C06

這是與用於創建掩模和圖案INC文件。 (我會盡量避免在有實際的指令的源文件硬編碼的數字。)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;                       ;; 
;;                       ;; 
;; Map UART # 3 Tx Pin                 ;; 
;;                       ;; 
;; Docs for this are: Manual DS39975A             ;; 
;;                       ;; 
;; Find "TABLE 2: COMPLETE PIN FUNCTION DESCRIPTIONS FOR 100-PIN DEVICES"    ;; 
;; in Manual DS39975A, Page 8, where We find the secret PIC Pin Names for    ;; 
;; the actual physical pin numbers              ;; 
;;                       ;; 
;; TABLE 10-4: SELECTABLE OUTPUT SOURCES (MAPS FUNCTION TO OUTPUT)      ;; 
;; Page 160, We find the output function numbers          ;; 
;;                       ;; 
;;                       ;; 
;;                       ;; 
;;         PIC  Associated    Output     ;; 
;; Circuit   Physical  PIN  Control  Actual Func.     ;; 
;; Function   Pin   NAME Reg   Bits  Number     ;; 
;; ------------  ------  ----- -------  ----  -----     ;; 
;;                       ;; 
;; UART #3, TX  Pin 23  RP13 RPOR6   3F00  28   Output  ;; 
;;                       ;; 
;;                       ;; 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

我加之來自家庭的數據表,這些筆記,知識創造有意義的名稱的常量。

.Equiv Uart_3_Tx_PPS_Output_Register, RPOR6   ;Register 10-35, Page 177 
    .Equiv Uart_3_Tx_Reg_Control_Bits,  0x3F00   ;Look for "RP13R" in the big include file    ;;;DEBUG DEBUG Date: 2013-02-05 Time: 20:47:02 
    .Equiv Uart_3_Tx_Output_Func_Number, 28    ;From Table 10-4, P. 160 

    .Equiv Uart_3_Tx_And_Off_Bit_Pattern,     ~(Uart_3_Tx_Reg_Control_Bits) 
    .Equiv Uart_3_Tx_Or_In_Bit_Pattern,     (Uart_3_Tx_Output_Func_Number << RP13R0) 

來自文件:「p24FJ256GB210。INC」(不含引號)

;----- RPOR6 Bits ----------------------------------------------------- 
     .equiv RP12R0, 0x0000 
     .equiv RP12R1, 0x0001 
     .equiv RP12R2, 0x0002 
     .equiv RP12R3, 0x0003 
     .equiv RP12R4, 0x0004 
     .equiv RP12R5, 0x0005 
     .equiv RP13R0, 0x0008 ;;; <<<<<----- RP13 is in the right place 
     .equiv RP13R1, 0x0009 
     .equiv RP13R2, 0x000A 
     .equiv RP13R3, 0x000B 
     .equiv RP13R4, 0x000C 
     .equiv RP13R5, 0x000D 

畢竟是說,做,有或沒有RTSCTS啓用,在UART的另一側的PIC顯然並沒有看到,我把在這一側的第一個字節。

有誰看到什麼,我把錯誤的位錯了地方

在這個時刻,我不能自信地回答是或不是這個問題:是否正確連接到物理的UART#3 TX功能100引腳TQFP配置的PIC24FJ256GB210引腳23?

非常感謝,如果你能確定這裏發生了什麼。

+1

你的標題提到「第5字節」,但顯然你不能得到*任何*字節傳輸?你確定該端口是否設置了外設時鐘和波特率發生器? – sawdust 2013-02-12 01:53:09

+0

@sawdust好眼睛! +1給你。下一項檢查。早在30分鐘後,謝謝! – 2013-02-12 16:43:09

+0

@sawdust如果我這邊的波特率不符合他的話?他有一個PIC32,並且我假設(很可能使我失望),這是兩根電線和他自己的UART。 – 2013-02-12 16:51:56

回答

2

這裏是我發現的錯誤和問題答案

看特殊功能寄存器U3STA

查找位UTXEN

必須設置。

如果不是,您將填充FIFO並在第4個字節後堵塞它。

UTXEN是位#10。彙編器和編譯器可能會將其更改爲下一個更高編號字節中的#2。

1

MicroChip發佈了關於PIC24單片機上這種行爲的勘誤表。 指:http://ww1.microchip.com/downloads/en/DeviceDoc/80522c.pdf

第4頁的文件表明:

Module: UART (TX Buffer) 
If the transmit buffer is filled sequentially with 
four characters, the characters may not be 
transmitted in the correct order. 
Work around 
Do not completely fill the buffer before transmit- 
ting data; send three characters or less at a 
time. 

另一個角落找尋工作是由開發者使用TRMT標誌,而不是建議,請參閱:http://www.microchip.com/forums/m622420-print.aspx

希望它能幫助。

1

我的本地硬件專家說,如果我關掉流量控制,無論如何字節都會熄滅。

是的,的確如此。但是這需要時間,串口很慢。從fifo傳輸一個字節需要永恆,在9600波特大約一毫秒。這就是爲什麼UART通常由中斷處理程序從更大的緩衝區提供的原因。

+0

謝謝,盡我所知,我們目前正在做115,200 bps。現在;哦,男孩,我剛剛在另一邊看到了十億美元的FFFFFF指令(即該東西未編程)。 EL-Stupe-O再次騎車。 – 2013-02-12 19:39:30

+0

不確定您希望我如何使用該評論來改進答案。 – 2013-02-12 20:00:04

+0

當您發現硬件出現故障時,您會做什麼?我現在要做的是正確的事情?NewBee NoClue想要做正確的事情,不知道什麼是對的和錯的。 – 2013-02-12 20:04:22