大家好、
我使用 UART 将大量数据从1 MSP 发送到另一 MSP。 我运行的是4MHz 时钟、波特率为115200。 但是、在发送第一个字节后、当我检查 Txbuf 是否就绪时、UART 会卡住。 I、e、
TXBUF0 = 0x00;//随机数据 while (!(IFG1 & UTXIFG0));//代码卡在此处
这是因为 UTXIFG0在数据传输后永远不会置位、或者它被空的 UART0 ISR 置位并立即清零。
#pragma vector=USART0TX_Vector __interrupt void usart0_TX (void) { __no_operation (); }
MSP430强制我提供此 ISR、即使它不包含指令。 如果未提供 ISR、则会发出 NMI。
作为权变措施、 我改用了__delay_cycles (1200)。 在这里、任何小于1200的值都会导致丢失位、并且无论波特率如何、这些周期数都保持恒定(对于较低的波特率、我希望周期数更少)。 由于我要发送大量数据、这对我来说已成为瓶颈。
下面是配置 UART 的方法:
UCTL0 |= char; UTCTL0 |= SSEL1; UBR00 = 0x22; // 115200波特率 UBR10 = 0x00; UMCTL0 = 0xDD; ME1 |= URXE0+UTXE0; //启用 USART0 TXD/RXD P3SEL |= 0x30; P3DIR |= BIT4; P3DIR &=~BIT5; UCTL0 &=~SWRST; //初始化 USART 状态机 IE1 |= UTXIE0 + URXIE0; //启用 USART0 RX 中断
为什么会发生这样的情况、如何克服这种情况?
此致、