MSP430F149中中断优先级问题

1、MSP430F149中UART0的接收中断高于定时器TimerA的中断优先级。但是在程序的调试过程中确发现了不合适的现象。

2、程序调试场景是这样的:定时器计时到1S后,通过UART0向触摸屏写入数据;点击触摸屏后,向单片机上传该处的坐标。设置断点在定时器的某一处,单步运行到该处后,点击触摸屏上的某一点,单击调试的下一步,之后发现程序没有跳转到串口的接收中断程序,而是运行定时器中断程序内的下一行命令。

问题:按照用户手册中断优先级的高低,程序应该跳转到中断接收服务子程序中,事实却不是这样的,求解释?还是哪一做错了?


以下是配置MSP430F5529中断优先级的示例代码: ```c #include <msp430.h> int main(void) { // 关闭看门狗定时器 WDTCTL = WDTPW | WDTHOLD; // 配置P1.1为输入,用作断触发引脚 P1DIR &= ~BIT1; P1IE |= BIT1; // 允许P1.1断 P1IES |= BIT1; // 设置P1.1为下降沿触发 P1IFG &= ~BIT1; // 清除P1.1断标志 // 配置中断优先级 __bis_SR_register(GIE); // 全局断使能 __bis_SR_register(LPM4_bits); // 进入低功耗模式4 return 0; } #pragma vector=PORT1_VECTOR __interrupt void Port1_ISR(void) { switch (__even_in_range(P1IV, P1IV_P1IFG7)) { case P1IV_P1IFG0: // P1.0断 // 处理P1.0断 break; case P1IV_P1IFG1: // P1.1断 // 处理P1.1断 break; case P1IV_P1IFG2: // P1.2断 // 处理P1.2断 break; // 更多断处理... default: break; } } ``` 在上述代码,我们首先关闭看门狗定时器,并将P1.1设置为输入引脚,并允许其产生断。然后,我们设置P1.1断的触发方式为下降沿触发,并清除P1.1的断标志位。 接下来,使用`__bis_SR_register(GIE)`打开全局断使能,并使用`__bis_SR_register(LPM4_bits)`进入低功耗模式4,以等待断事件的发生。 最后,我们使用`#pragma vector=PORT1_VECTOR`定义了一个名为`Port1_ISR`的断服务函数,用于处理P1端口的断事件。在该函数,我们使用`switch`语句根据断向量号来判断是哪一个引脚触发了断,并根据需要进行相应的处理。 请注意,上述代码只是一个示例,实际应用可能需要根据具体的需求进行适当的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值