msp430f6779芯片,因为有不同的外部设备,所以我开启了两个串口中断用于接收数据,现在的问题是当我同时定义了两个中断服务函数时,不能响应,当注释掉其中一个时,另外一个可以响应,代码如下,还请麻烦指点一下!多谢~
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
msp430f6779芯片,因为有不同的外部设备,所以我开启了两个串口中断用于接收数据,现在的问题是当我同时定义了两个中断服务函数时,不能响应,当注释掉其中一个时,另外一个可以响应,代码如下,还请麻烦指点一下!多谢~
您好!中断的代码已经给出了,也没有在串口中断中执行耗时较多的任务吧,就是接受的数据进行储存。
#pragma vector=USCI_A3_VECTOR
__interrupt void USCI_A3_ISR(void)
{
switch(__even_in_range(UCA3IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2:
*pRXBuffer++ = UCA3RXBUF; //串口3接受数据
break;
case 4:
break; // Vector 4 - TXIFG
default: break;
}
}
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
switch(__even_in_range(UCA1IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2:
P5OUT ^= BIT0; //接受闪烁灯
*pRXBuffer++ = UCA1RXBUF; //串口1接受数据
break;
case 4:
break; // Vector 4 - TXIFG
default: break;
}
}
谢谢您的反馈!我指的是完整的代码(包含配置代码)。单纯看您现在的中断代码是没有问题的
您可以私信给我,我拿板子实际调一下,谢谢
您在程序中定义了
// Setup P3.0 UCA0RXD, P3.1 UCA0TXD
P3SEL0 |= BIT0 + BIT1; // Set P3.0, P3.1 to non-IO
P3DIR |= BIT0 + BIT1; // Enable UCA0RXD, UCA0TXD
所以您现在使用了3个串口?USCI_A0,USCI_A1,USCI_A3?
另外main函数内的while(1)可以尝试先不要做这么多操作
USCI_A1,USCI_A3的配置的话,我暂时没有发现问题
您需要使用
while (!(UCA0IFG&UCTXIFG));
UCA0TXBUF = UCA1RXBUF;
while (!(UCA1IFG&UCTXIFG));
UCA1TXBUF = UCA0RXBUF;
来判断TXbuffer是否为空。请您尝试添加上面的代码