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.

[参考译文] CCS/MSP430F5529:CAN't获取UART0中断以触发

Guru**** 2582405 points
Other Parts Discussed in Thread: MSP430F5529

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/614876/ccs-msp430f5529-can-t-get-uart0-interrupt-to-trigger

部件号: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执行();

}

}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Daniel:

    您是否正在使用MSP430F5529 Launchpad进行此评估? 如果是这样,其中一个UART将通过仿真器连接到反向通道UART路径。 这意味着由于仿真硬件对线路产生争用,您将无法获得正确的通信。 要解决此问题,只需卸下启动板顶部的TX/RX跳线。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,JH:

    感谢您的反馈。 是的,我正在使用启动板,但根据原理图,UART1连接到EZFET,这是实际按预期工作的接口。 我遇到问题的PIN 3.3 和3.4 直接转到标题。 不管怎样,我尝试断开两个跳线,但正如预期的那样,没有任何区别。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们碰巧有另一个电路板,我刚刚尝试将我的图像加载到那个电路板上,一切都按预期工作。 我通过Mouser收到的第一个似乎是错误的。 是否有办法将此主板替换为TI?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Daniel:

    听说问题已解决,这很好。 至于主板更换,您必须在更换/退回Launchpad时与Mouser合作。