工具/软件:Code Composer Studio
我正在处理一个小代码、该代码将我的控制器(MSP430F6435)设置为睡眠模式、并通过警报中断返回激活模式。 我提到了这些源、但我仍然缺少一些东西、代码永远不会从 LPM3中输出。 我随附了我的代码以供参考
#include #include /*用于测试 MSP430F6435睡眠模式(低功耗模式)的示例代码*/ void Init_GPIO (void) { //端口配置 P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;P5OUT = 0x00;P6OUT = 0x00; P7OUT = 0x00;P8OUT = 0x00;PJP8FF = 0x00;PJP8OUT = 0x00;PJP8OUT = 0x00 P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;P5DIR = 0xFF;P6DIR = 0xFF; P7DIR = 0xFF;P8DIR = 0xFF;P9DIR = 0xFF;PJDIR = 0xFF; } void INIT_RTC_B (void) //未使用预分频器 { UCSCTL6 &=~(XT1OFF); //用于 MCLK、SMCLK、ACLK 的32kHz 电容器 UCSCTL6 |= XCAP_3; //内部负载电容12pF 配置 while (BAKCTL 和 LOCKBAK) //解锁 XT1引脚以进行操作 BAKCTL &=~(LOCKBAK); 操作 { UCSCTL7 &=~(XT1LFOFFG + DCOFFG); //如果可能的故障会将这些寄存器设置为高电平、则清除 XT1、DCO 故障标志 SFRIFG1 &=~OFIFG; //清除振荡器故障标志 } while (SFRIFG1&OFIFG); //直到振荡器故障标志不被清除 RTCCTL0 = RTCAIE; //用于从低功耗模式唤醒的报警中断 RTCAMIN = 0x81; //持续1分钟中断 RTCCTL1 = RTCHOLD; //禁用日历模式 RTCHOUR = 0x5; //小时= 0x5 RTCMIN = 0x6; //分钟= 0x15 RTCSEC = 0x7; //秒= 0x25 } void EnterLPM3 (void) { PMMCTL0_H = PMMPW_H; //打开 PMM 寄存器以写入 PMMCTL0_L |= PMMREGOFF; //并设置 PMMREGOFF _bis_SR_register (LPM3_bits+ GIE); //使用中断进入 LPM3.5模式// 3.5,因为备份 RTC 的最低功耗__NO_OPERATION (); //启用 } #pragma vector=RTC_vector __interrupt void RTCISR (void) { PMMCTL0_H = PMMPW_H; //打开 PMM PM5CTL0 &=~LOCKLPM5; //清除 LOCKBAK 并启用端口 PMMCTL0_H = 0x00; //关闭 PMM RTCCTL0 &=~RTCAIE; __BIC_SR_REGISTER_ON_EXIT (LPM3_BITM+ GIE); //退出 LPM3 __NO_OPERATION (); } int main (void){ WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器 P5DIR |= BIT5; int i、sec; init_gpio(); init_rtc_b(); EnterLPM3(); P5OUT |= 0X0020; while (1); }
我是这里的新手、任何帮助都是值得称道的。 谢谢你。
此致
-Onkar