gpt4 book ai didi

serial-port - UART 3 将不接受第 5 个字节

转载 作者:行者123 更新时间:2023-12-01 01:12:06 24 4
gpt4 key购买 nike

有问题的芯片是PIC24FJ256GB210

它是 100 引脚 TQFP 外形尺寸

我们有一个带有两个微处理器的嵌入式系统。

这两个微处理器使用 UART 进行通信(据我所知)映射到 PIC24 上的 UART #3。

我将 4 个字节放入 UART #3。一切顺利。第 5 个字节不会进去。

我说先进先出备份。

我本地的硬件专家说,如果我关闭流量控制,无论如何字节都会消失。

这是真的 ?我以前从未听说过那个。我以为是另一边的硬件信号;即,在 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?

如果你能确定这里发生了什么,非常感谢。

最佳答案

这是我发现错误的地方和问题的答案

查看特殊功能寄存器U3STA
找位UTXEN
必须设置。

如果没有,您将填充 FIFO 并在第 4 个字节之后将其堵塞。
UTXEN位#10。汇编器和编译器可能会在下一个更高编号的字节中将其更改为 #2。

关于serial-port - UART 3 将不接受第 5 个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14823674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com