TI中文支持网
TI专业的中文技术问题搜集分享网站

使用MSP430F5529的UART中断接收例程时无法进入中断

1.开发板是MSP430F5529的开发板,使用IAR环境

2.使用了RS232转TTL模块,输入信号是RFID读取的24位十六进制数,RFID为9600HZ,数据能够传输给电脑

3.基础程序是例程(代码1),修改后想实现的功能是在LCD上显示读取的信息

4.问题:无法进入中断,数据输入输出采用P4.4 4.5

代码1:

#include <msp430f5529.h>

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3SEL = BIT3+BIT4; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 6; // 1MHz 9600 (see User's Guide)
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS_0 + UCBRF_13 + UCOS16; // Modln UCBRSx=0, UCBRFx=0,
// over sampling
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt

__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
__no_operation(); // For debugger
}

// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV,4))
{
case 0:break; // Vector 0 – no interrupt
case 2: // Vector 2 – RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
break;
case 4:break; // Vector 4 – TXIFG
default: break;
}
}

修改后代码见附件,在中断中插入的显示是为了验证是否进入中断。在板子上的运行结果是,只显示number:\n c,不显示中断中的字符。

希望予以解答

灰小子:

看你的代码使用的是USCI_A1,没看到你使能USCI_A1的中断。

建议先单独调试USCI_A1相关代码,没问题了再和其他程序整合

P.H Zhang:

和我第一次玩一样,例程是A0的设置,你看你的中断服务程序里都是A0。

但是,LP上的TXT和RXT是对应A1的,所以你应该把引脚和下面的所有A0换成A1.

#include <msp430.h>

void main(void){ WDTCTL = WDTPW + WDTHOLD; // Stop WDT

P4SEL |= BIT4+BIT5; // P3.3,4 = USCI_A0 TXD/RXD UCA1CTL1 |= UCSWRST; // **Put state machine in reset** UCA1CTL1 |= UCSSEL_2; // SMCLK UCA1BR0 = 0x6D; // 1MHz 9600 (see User's Guide) UCA1BR1 = 0; // 1MHz 115200 UCA1MCTL |= UCBRS_2 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0 UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine** UCA1IE |= UCRXIE;

__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled __no_operation(); // For debugger}

#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: // Vector 2 – RXIFG while (!(UCA1IFG&UCTXIFG)); // USCI_A0 TX buffer ready? UCA1TXBUF = UCA1RXBUF; // TX -> RXed character break; case 4:break; // Vector 4 – TXIFG default: break; }}

赞(0)
未经允许不得转载:TI中文支持网 » 使用MSP430F5529的UART中断接收例程时无法进入中断
分享到: 更多 (0)