请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2110 我使用的是 MSP430FR2110。
我希望 MSP430FR2110在触发 RTC 中断时退出 LPM3/LPM0、否则进入 LPM3/LPM0。 然而、RTC 时钟中断在短时间后停止。 我是否未正确使用 ENTER 和 EXIT LPM (代码的突出显示部分)?
有关我的应用(以下代码)的详细信息、MSP430FR2110会在触发 RTC 中断时通过 SPI 发送数据。 MSP430FR2110应该进入 LPM3/LPM0直到下一个 RTC 中断事件。
#include volatile static uint16_t PIR_DATA[number_of 通道]; int main (void) { WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 //将 MCLK (CPU 时钟)设置为3MHz // DCOFTRIM = 3、DCO 范围= 8MHz CSCTL1 = DCORSEL_3; //使用默认设置:数字控制器振荡器(DCO)作为 MCLK 和 SMCLK 时钟源 //将默认 REFO (~32768Hz)设置为 ACLK 源 CSCTL4 = SELMS_DCOCLKDIV | SELA_REFOCLK; PM5CTL0 &=~LOCKLPM5; //禁用 GPIO 上电默认高阻抗模式 //激活先前配置的端口设置 // RTC 计数 RTCMOD = 320-1; //初始化 RTC //源= ACLK = REFO SYSCFG2 |= RTCCKSEL; //选择 ACLK 作为 RTC 时钟 RTCCTL = RTCSS_1 | RTCSR | RTCPS__1 | RTCIE; while (1); } // RTC 中断服务例程 #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__) #pragma vector=RTC_vector __interrupt void RTC_ISR (void) #Elif defined (__GNU__) void 编译器_attribute__(interrupt (RTC_vector)#rTC_ISR (void)#else!错误! #endif { 开关(__evo_in_range (RTCIV、RTCIV_RTCIF)) { 案例 RTCIV_NONE:中断; //无中断 案例 RTCIV_RTCIF: // RTC 溢出 _BIC_SR_REGISTER_ON_EXIT (LPM3_BITS); _bis_SR_register (GIE); serial_interface_send_PIR_data (PIR_DATA); _bis_SR_register (LPM3_bits); 中断; 默认值:break; } }