的芯片問題是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
畢竟是說,做,有或沒有RTS
或CTS
啓用,在UART的另一側的PIC顯然並沒有看到,我把在這一側的第一個字節。
有誰看到什麼,我把錯誤的位錯了地方
在這個時刻,我不能自信地回答是或不是這個問題:是否正確連接到物理的UART#3 TX功能100引腳TQFP配置的PIC24FJ256GB210引腳23?
非常感謝,如果你能確定這裏發生了什麼。
你的標題提到「第5字節」,但顯然你不能得到*任何*字節傳輸?你確定該端口是否設置了外設時鐘和波特率發生器? – sawdust 2013-02-12 01:53:09
@sawdust好眼睛! +1給你。下一項檢查。早在30分鐘後,謝謝! – 2013-02-12 16:43:09
@sawdust如果我這邊的波特率不符合他的話?他有一個PIC32,並且我假設(很可能使我失望),這是兩根電線和他自己的UART。 – 2013-02-12 16:51:56