我有一个应用程序要引导到 LPM3中,P1.1作为开关启用....按下此开关后,我希望 PWM 运行,并每秒启用一次 RTC。 我退出 P1中断仍处于睡眠状态。 希望在100秒后 RTC 中的计数器能够识别这一情况并将器件置于 LPM3.5模式。 从3.5开始时、我尝试清除 PMMREGOFF 并强制掉电、这会使我回到"正常"模式。 这似乎没有正确发生……按下按钮后,下面的代码启动 PWM,然后在 LED 闪烁大约2秒钟后,代码将保持亮起状态。 我发现使用这个 LPM3.5/RTC 非常困难。 我一直在尝试暂停调试器以重新启动、但 CCS 将不会这样做、并且往往会锁定。 有人能给我一些建议吗?我在代码中做错了什么?为什么 CCS 一直想锁定? BTW。 此部分下的 RTC #2程序与 Resource Explorer 下的程序类似。 我只需将 IO 更改为 IO 即可剪切和粘贴、CCS 仍会停止运行。 我已经将 RTC #1程序载入到电路板上、并且工作正常(每秒钟它只会切换 RTC 中的 IO)。
我最终想在 PWM 结束后进入 LPM3 (我的理解是、PWM 在 LPM3下无法工作)、然后重新启动到仅具有极低功耗的状态、即3.5、直到有人再次按下按钮。
谢谢
按下暂停时、CCS 会以以下方式响应:
MSP430:停止目标 CPU 时出现问题:内部错误
#include #include "funct.h" volatile unsigned int count; volatile unsigned int flag = 0; int main (void) { WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器 //闪存 LED 的小宏显示复位已发生。 configGPIO(); PM5CTL0 &=~LOCKLPM5; _delay_cycles (80000); P1OUT &=~BIT4; CONFIGACLK (); IF (SYSRSTIV = SYSRSTIV_LPM5WU){//从 LPM3.5唤醒? 标志= 0; configGPIO(); PMMCTL0 = PMMPW; PMMCTL0 &=~PMMREGOFF;//清除 LPM3.5位 PMMCTL0 |= PMMSWBOR;//强制重新启动至正常 状态} 否则{//no? _bis_SR_register (LPM3_bits + GIE);//LPM3.5入口点 } 返回0; } #pragma vector = RTC_vector __interrupt void 第三个计数器(void) { switch (__evo_in_range (RTCIV、RTCIV_RTCIF)) { 案例 RTCIV_NONE:break; //无中断挂起 案例 RTCIV_RTCIF: // RTC 溢出 count++; 如果(计数>= 100) { 计数= 0; PMMCTL0 = PMMPW;//打开 PMM 寄存器进行写入 PMMCTL0_L |= PMMREGOFF;//设置 LPM3.5 } 中断; 默认值: 中断; } } #pragma vector = Port1_vector __interrupt void ifNonLPM3_5 (void) { 开关(__evo_in_range (P1IV、4)) { 案例4://P1.1 CONFIGTA0_PWM (16384、4);//3276 CONFIGRTC (33);//1800 中断; 默认值: 中断; } }