所以我使用dsPIC 33 EP 256 MC 506和它的一个UART进行通信(9600,8,N,2)。我需要在Tx移位寄存器为空(TRMT = 1)时获得中断。通过将UTXSEL位设置为:
USTAbits.UTXISEL0 = 1;
USTAbits.UTXISEL1 = 0;
根据数据手册UxSTA位15,13 UTXISEL[1:0]:= 01
11 = Reserved; do not use
10 = Interrupt when a character is transferred to the Transmit Shift Register (TSR) and as a result,
the transmit buffer becomes empty.
01 = Interrupt when the last character is shifted out of the Transmit Shift Register; all transmit
operations are completed.
00 = Interrupt when a character is transferred to the Transmit Shift Register (this implies there
is at least one character open in the transmit buffer).
我知道它说“……当最后一个字符被移出时……”这意味着移位寄存器不是空的。另一方面,它还说“...所有传输操作已完成。”这意味着移位寄存器应该为空。
然而,当中断触发时,FIFO为空且TRMT = 0。因此,仍有一个轮班操作正在进行中。
TRMT: Transmit Shift Register Empty bit (read-only)
1 = Transmit Shift Register is empty and transmit buffer is empty (the last transmission has completed)
0 = Transmit Shift Register is not empty, a transmission is in progress or queued
在我的示波器上,中断似乎是在停止位之间的某个位置触发的。
我看不出模式10和01之间的实际区别,两者都在移位寄存器中有数据时给出中断。有人能解释/确认这是否是另一个Microchip错误,或者模式10和01之间的实际区别是什么吗?
我真正需要的是知道最后一个停止位何时离开移位寄存器。
谜团解开
这是一个硅缺陷,在勘误表中提到了。
当使用UTXISEL <1:0>= 01(当最后一个字符移出发送移位寄存器时中断)并且最后一个字符通过发送移位寄存器(TSR)移出时,发送(TX)中断可能在最后一位移出之前发生。
2条答案
按热度按时间mcvgt66p1#
我想你可以把它看作是一个两字节的缓冲区。
第一个字节是“传输缓冲区”,软件可以直接写入(当它为空时)。第二个字节是移位寄存器,它从“传输缓冲器”中读取字节并将其移位到线路上。
10
模式告诉你传输缓冲器现在是空的(你可以写其他东西进去),因为一个字节刚刚被移动到移位寄存器。01
模式告诉您移位寄存器何时被清空,即现在整个字节都在线路上。当停止位在线路上被驱动时,您可能会得到一个中断,因为停止位不是移位寄存器中数据的一部分。所有的数据都被移走了。就MCU而言,停止位是“元数据”。
感觉就像我只是用不同的话重复了你说的话。但这对我来说是有意义的,所以不确定哪部分让你困惑了。
s8vozzvw2#
我知道它说“……当最后一个字符被移出时……”这意味着移位寄存器不是空的。另一方面,它还说“...所有传输操作都完成了。”这意味着移位寄存器应该是空的。
这似乎是一个理解的问题。是什么让你认为 “当最后一个字符被移出” 意味着寄存器不是空的?这意味着 * 确切 *-你甚至注意到你的示波器。
然而,当中断触发时,FIFO为空且TRMT = 0。因此,仍有一个轮班操作正在进行中。
这只适用于模式10。
我看不出模式10和01之间的实际区别,两者都在移位寄存器中有数据时给出中断。在模式01中,当移位寄存器为空时,中断发生。在模式10中,FIFO为空
您可以使用使用模式10 b来指示FIFO为空,并允许您加载缓冲区以流式传输数据,而不会出现字符间间隙。
例如,您可以使用模式01 b来指示在禁用UART或进入低功耗模式或发出软件复位之前已传输所有数据。或者,如果您需要在字符输出和其他I/O事件之间进行精确的定时/同步-例如,您可能正在与一些具有芯片选择控件的设备进行通信,该控件需要保持直到完成。
在大多数情况下,您希望使用模式10 b,加载FIFO直到
UTXBF
,然后重复模式10 b中断。