MSP430F5529 UART 中断程序详解
#include <msp430.h>
#define RXD BIT1 #define TXD BIT2
volatile unsigned int rx_data = 0;
void main(void) { WDTCTL = WDTPW + WDTHOLD; // 停用看门狗定时器
P3SEL |= RXD + TXD; // 将 UART 端口与 P3.1 和 P3.2 引脚连接
UCA0CTL1 |= UCSWRST; // 将 UART 控制寄存器 1 的软件复位位设为 1
UCA0CTL1 |= UCSSEL_2; // 选择 SMCLK 作为 UART 时钟源
UCA0BR0 = 104; // 设置波特率为 9600
UCA0BR1 = 0; // 设置波特率为 9600
UCA0MCTL = UCBRS_1 + UCBRF_0; // 微调波特率
UCA0CTL1 &= ~UCSWRST; // 将 UART 控制寄存器 1 的软件复位位设为 0
UCA0IE |= UCRXIE; // 使能 UART 接收中断
__bis_SR_register(LPM0_bits + GIE); // 进入低功耗模式 0,并使能全局中断
}
#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: // UART 接收中断 rx_data = UCA0RXBUF; // 读取接收到的数据 break; case USCI_UART_UCTXIFG: break; // UART 发送中断 case USCI_UART_UCSTTIFG: break; // UART 起始位中断 case USCI_UART_UCTXCPTIFG: break; // UART 发送完成中断 } }
本程序首先定义了 RXD 和 TXD 引脚的宏定义。然后在 main 函数中,配置了 UART 的波特率、时钟源、微调等参数,并使能了 UART 接收中断。最后进入低功耗模式 0,并使能全局中断。
在中断服务程序中,通过 switch 语句判断中断类型,如果是 UART 接收中断,则读取接收到的数据并存储在 rx_data 变量中。其他中断类型暂时不做处理。
原文地址: https://www.cveoy.top/t/topic/jkj2 著作权归作者所有。请勿转载和采集!