Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

MSP430F2132不能跳出中断的问题

$
0
0

我使用的芯片型号是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模式 接收
}

找了一天了也没发现问题出在哪边,能不能帮我看一下


Viewing all articles
Browse latest Browse all 3634

Trending Articles