我使用的芯片型号是msp430f2132
今天在调试UART串口,我使用串口接收中断函数来实现数据接收,当我收到不再接收的数据信号时中断函数便不在接收数据,我使用if语句不再接收数据,但发送方还在发送数据,这时候问题出现了,PC一直在接收中断函数执行,无法跳到main函数的while(1)里面执行。
我换了种方法,让接收数据信号一直有效,便可以进入while(1)函数了。
接下来有还是用第一种方法,但在后面加了一句话uartTest = UCA0RXBUF;这句话本身没有任何含义,但可以执行while(1)函数了。
程序代码如下:
#pragma vector = USCIAB0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
/* 接收到片选信号为高,即选中 */
//if (0x01 == ((P2IN >> 2) & 0x01))
if (0x01 == ((P2IN & BIT2) >> 2)) //现象很奇怪,不能跳出接收中断
//if (1)
{
EBUS_UART1.recvXWaveBuf[EBUS_UART1.recvXWaveBufX] = UCA0RXBUF;
EBUS_UART1.recvXWaveBufX++;
dataRecvHandle.writeAWROrFlashFlag = 1;
}
//uartTest = UCA0RXBUF;
}
这个实验能不能说明我只要不对接收寄存器UCA0RXBUF进行操作,函数就会一直在接收中断函数运行?
我觉得这样是不对的,即使我不对UCA0RXBUF进行任何操作函数也应该能跳出中断,又或者我串口设置错误,下面是我串口初始化
void UART_Init(void)
{
UCA0CTL1 |= UCSWRST; //复位SWRST
UCA0CTL1 |= UCSSEL1; //SMCLK为串口时钟
UCA0BR1 = baud_h; //BRCLK=1.05MHZ,Baud=BRCLK/N
UCA0BR0 = baud_l; //N=UBR+(UxMCTL)/8
UCA0MCTL = 0x00; //微调寄存器为0,波特率9600bps
UCA0CTL1 &=~ UCSWRST;
IE2 |= UCA0RXIE; //接收中断使能位
P3SEL |= BIT5; //设置IO口为特殊I/O模式 接收
}
找了一天了也没发现问题出在哪边,能不能帮我看一下