请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430F5529 工具/软件:Code Composer Studio
我花了一整天的时间试图让UART0 RX触发中断,但没有运气。 我能够使UART1 RX触发,并且我能够在UART0和UART1上进行TX。 我尝试换用RX线路(WFP 3.4 和4.5),结果相同(例如,在UART 1上触发,而不是在UART 0上触发),所以似乎不是我的串行硬件或终端是问题所在。
是否有人可以查看我的代码是否明显有问题? 这是已清除的最新迭代。
#include <MSP430-h>
int main (void){
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
//设置UART0
P3SEL || BIT3 + BIT4; // WFP 3.3 ,4 = USI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; //**将状态机置于复位**
UCA0CTL1 || UCSSEL_1; // CLK = ACLK
UCA0BR0 = 0x03; // 32kHz/9600= 3.41 (请参阅用户指南)
UCA0BR1 = 0x00; //
UCA0MCTL || UCBRS_3+UCBRF_0; //调制UCBRSx=3,UCBRFx=0
UCA0CTL1 &=~UCSWRST; //**初始化USCI状态机**
UCA0IE |= UCRXIE; //启用USI_A0 RX中断
//设置UART1
P4SEL || BIT5 + BIT4; // USI_A1 TXD/RXD
UCA1CTL1 |= UCSWRST; //**将状态机置于复位**
UCA1CTL1 || UCSSEL_1; // CLK = ACLK
UCA1BR0 = 0x03; // 32kHz/9600= 3.41 (请参阅用户指南)
UCA1BR1 = 0x00; //
UCA1MCTL = UCBRS_3+UCBRF_0; //调制UCBRSx=3,UCBRFx=0
UCA1CTL1 &=~UCSWRST; //初始化USCI状态机
UCA1IE |= UCRXIE; //启用USI_A1 RX中断
//按钮
P1DIR || BIT0; //将WFP 1.0 设置为输出方向
P1OUT &=~BIT0;
P1REN |= BIT1; //启用WFP 1.1 内部电阻
P1OUT || BIT1; //将WFP 1.1 设置为防拉力
P1IES &=~BIT1; // WFP 1.1 LO/Hi EDGE
P1IFG &=~BIT1; //已清除WFP 1.1 IFG
P1IE |= BIT1; //已启用WFP 1.1 中断
__bis_sr_register (LPM3_bits + GIE); //输入LPM0,启用中断
__no_operation(); //对于调试器
}//Echo
back RXed字符,首先确认TX缓冲区已就绪
// app UART
#pragma vector=USI_A0_vector
__interrupt void USI_A0_ISR(void){
//从不输入此中断
开关(__均匀_in_range (UCA0IV,4)){
案例0: 中断;
案例2:
while (!(UCA0IFG和UCTXIFG));
UCA0TXBUF = UCA0RXBUF;
中断;
案例4: 中断;
默认值:break;
}
}
//回显RXed字符,先确认TX缓冲区已就绪
// app
UART #pragma vector=USI_A1_Vector
__interrupt void USI_A1_ISR(void){
//这将触发UART 1
开关(__均匀_in_range (UCA1IV,4)){
案例0: 中断;
案例2:
while (!(UCA1IFG和UCTXIFG));
UCA1TXBUF = UCA1RXBUF;
中断;
案例4: 中断;
默认值:break;
}
}//
端口1中断服务例程
#pragma vector=Port1_vector
__interrupt void Port_1(void){
Switch(__均匀_in_range( P1IV, P1IV_P1IFG7 )){
案例P1IV_P1IFG1: //引脚1 (按钮2)
P1OUT^= BIT0;
UCA0TXBUF = 0x22; //这将在UART0上生成输出
UCA1TXBUF = 0x33; //这将在UART1上生成输出
中断;
默认值:_Never执行();
}
}