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.
您好,
我正在从正在工作的UART TX示例中添加中断功能。
我尝试在中断例程中中断开关壳体,但它从未触发。
代码与以下示例基本相同: dev.ti.com/.../node
有人能给我建议吗?
这是代码。
int main(void) { WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer P1DIR = 0x01; P1OUT = 0x00; P1REN = 0x00; P2DIR &= ~BIT3; // Set P2.3 as in P2REN |= BIT3; // enable pull-up/down resistor P2OUT |= BIT3; // pull-up resistor P2IES |= BIT3; // enable interrupt P1SEL1 &= ~(BIT4 | BIT5); // USCI_A0 UART operation P1SEL0 |= BIT4 | BIT5; UCA0CTLW0 |= UCSWRST; // Put USCI_A0 to software reset UCA0CTLW0 |= UCSSEL__SMCLK; // Use SMCLK(1048576Hz) for baud rate calculation UCA0BRW = 9; // N = f/BR = 1048576/115200 = 9 UCA0MCTLW = 8; UCA0CTLW0 &= ~UCSWRST; // Release USCI_A0 software reset UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt __bis_SR_register(GIE); //__bis_SR_register(LPM3_bits|GIE); //LPM3 not work when using SMCLK PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode to activate previously configured port settings while(1); } #pragma vector=USCI_A0_VECTOR __interrupt void USCI_A0_ISR(void) { switch(__even_in_range(UCA0IV,USCI_UART_UCTXCPTIFG)) { case USCI_NONE: break; case USCI_UART_UCRXIFG: P1OUT ^= 0x01; UCA0TXBUF = UCA0RXBUF; break; case USCI_UART_UCTXIFG: break; case USCI_UART_UCSTTIFG: break; case USCI_UART_UCTXCPTIFG: break; default: break; } }
您好,
在此示例代码说明中,"设备将在LPM0/LPM3 (基于时钟源)中等待,直到收到UART字符。" 您是否向MCU发送任何数据以触发UART接收中断?
如果您没有其它设备通过UART将数据发送到您的设备,则可以尝试此示例代码 。https://dev.ti.com/tirex/explore/node?node=AC4fkny7IVqnhUvmZEUGSg__IOGqZri__LATEST
它只需要将TX引脚连接到RX引脚。
此致,
现金Hao
您好,Cash,
感谢您的回复。 我的主板是MSP-EXP430FR2433, 我已使用Putty和sscom向USSCI_A0 RX发送了一些字符。 这是触发中断的正确方式吗?
或者我应该将另一个UART设备连接到WFP 1.4 和WFP 1.5 ?
您好,
我不熟悉这个“Putty and sscom”。 但是,如果您无法获得接收中断,我认为这不是触发设备的正确方式。 您可以尝试我在以前的论坛上建议的示例代码。 它不需要另一个设备来触发中断。
此致,
现金Hao
您好,Cash,
我已经尝试了您上面提到的示例,它在串行监视器(sscom)中显示01。 即使打印了一些内容,Code Composer Studio也不能在__interrupt内的交换器壳上中断。
这是否为预期结果?
(编辑打字错误)
我刚刚在FR2433 Launchpad上尝试了你的(原始)代码,它按预期工作--我得到了(正确的)回声,LED切换。 [编辑:我忘了提及--我也达到了断点。]
查看您的连接可能很有用。 所有跳线是否都安装在J101 (桥接器)上? BoosterPack收割台(J1/J2)上是否连接了任何部件?
另外,请记住,使用运行调试器时,反向通道UART会运行缓慢/突发。 但这不会影响断点行为。
感谢你的帮助。
下面是我的主板图片。 所有跳线都安装在J101上。
另外,我想问一下您使用的是哪种版本的CCS? 我想尝试一下。
您好,
您需要使用我建议的示例代码将WFP 1.4 连接到WFP 1.5。 我在 你的照片中没有看到它。
此致,
现金Hao
我使用的是9.3。 (这是否会产生影响并不明显,但谁知道?)
我通过PuTTY (11.52万-8-N-1)和虚拟COM (8.1)连接到反向通道UART。
在您的while (1) in main中,定期将某些内容输出到UCA0TXBUF ('U'在范围上看起来很好)可能很有用。 它对您的Rx没有任何帮助,但它可以确保您的操作系统不会对端口执行有趣的操作。
我已经尝试了你的建议,将WFP 1.4 和WFP 1.4 (UART0 TX和RX)缩短了。
但串行监视器上没有显示任何内容,也没有触发断点
非常感谢您提供的信息。
使用CCS v 9.3 时的结果相同。
如果我将while循环更改为主循环中的类似内容。 'U'打印在串行监视器上。 但RX端仍然不工作。
而(1){
UCA0TXBUF ='U';
P1OUT ^= 0x01;
__DELAY周期(104.8576万);
}
也许我应该借用示波器,看看RX引脚会发生什么。
如果有更新,将在此处更新。
您好,
当然。 使用示波器将帮助我们了解RX引脚上发生的情况。
此致,
现金Hao
很抱歉回复太晚。 我有 示波器 ,并将其探到 电路板的RX UART引脚。 但当我向串行终端发送一个字节时,不会触发任何操作。
我已经使用不同型号的MSP430 (MMSP430FR5869)进行了自定义,并使用相同的代码触发UART中断。 结果将 按预期操作。 我可以中断中断例程并接收发送到设备的回声。
感谢大家的支持和耐心。