串口IFG2值什么情况下会变成这样子?
我做无线串口实验时。通过复制TI的代码串口那部分。在进行串口发送时,不能发送。通过仿真能看到IFG2值由0xA0→0xCA→0x08之后再也不变化了,程序因此卡在了判断TX是否空闲的那时候。
赴部分程序:
void init_uart0(void)
{
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2= BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK
UCA0BR0 = 0x03; // 32kHz/9600 = 3.41
UCA0BR1 = 0x00; //
UCA0MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
// IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
}
void R_S_Byte(char R_Byte)
{
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready? 等待TX buffer为空
UCA0TXBUF =R_Byte;;
}
这是啥情况呢?
建议软件相关的问题发到MCU版本去,那边的同事更熟悉。
可能是因为你把中断使能注释掉了:
// IE2 |= UCA0RXIE;
打开应该就可以了。
建议将串口发送程序放入中断程序中进行发送及判断是否完成发送,采用查询方式不太好。但是也应该能完成发送的。发送第一个字节时可以直接发送,不用判断发送缓冲器是否为空。也可先清空发送缓冲器再装载开始发送