您好!
我尝试生成 LMP4.5退出、但器件从未在 PCB 上检测到中断。
我让 MCU 进入深度睡眠模式(LMP4.5)、一旦按下引脚2.4上的开关以退出该模式。
我的代码如下:
int main () { WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器 P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;P5DIR = 0xFF; P6DIR = 0xFF; P1REN = 0xFF;P2REN = 0xFF;P3REN = 0xFF;P4REN = 0xFF; P5REN = 0xFF;P6REN = 0xFF; P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00; P4OUT = 0x00;P5OUT = 0x00;P6OUT = 0x00; //禁用 GPIO 上电默认高阻抗模式 //激活先前配置的端口设置 PM5CTL0 &=~LOCKLPM5; //配置16MHz XTAL //根据器件数据表的要求配置一个 FRAM 等待状态以实现 MCLK //在8MHz 之前的操作配置时钟系统。 FRCTL0 = FRCTLPW | NWAITS_1; CSCTL6 |= XTS + XT1HFFREQ_2; //选择 XT1 HF 模式 //为晶振@16MHz CSCTL4 = SELMS_XT1CLK | SELA_REFOCLK 设置适当的高频率; //设置 MCLK = XT1CLK = 4MHz // XT1CLK = MCLK 和 SMCLK 源 P2SEL1 |= BIT6 | BIT7; // P2.6~P2.7:晶体引脚 执行 { CSCTL7 &=~(XT1OFFG | DCOFFG); //清除 XT1和 DCO 故障标志 SFRIFG1 &=~OFIFG; }while (SFRIFG1和 OFIFG); //测试振荡器故障标志 CSCTL5 |= DIVM_0 | DIVS_1; // MCLK = XT1CLK = 16MHz、 // SMCLK = MCLK/2 = 8MHz //确定我们是从 LPMx.5还是常规复位中退出。 IF (SYSRSTIV = SYSRSTIV_LPM5WU) // MSP430刚刚从 LPMx.5中唤醒 { //不执行任何操作,让 FW 运行 } 其他 { //器件从冷启动加电。 //它配置器件并将器件置于 LPM4.5中 P2DIR &=~(BIT4); //将 P2.4配置为输入方向引脚 P2OUT &=~(BIT4); //将 P2.4配置为下拉 P2REN |= BIT4; // P2.4上拉寄存器使能 P2IES &=~(BIT4); // P2.4低边沿/高边沿 P2IFG = 0; //清除所有 P2中断标志 P2IE |= BIT4; // P2.4中断被启用 //显式清除 RTC 控制寄存器以禁用它 //以防之前启用 RTC disable_rtc(); PMMCTL0_H = PMMPW_H; //打开 PMM 寄存器进行写入 PMMCTL0_L |= PMMREGOFF; //并设置 PMMREGOFF PMMCTL0_H = 0; //锁定 PMM 寄存器 //输入 LPM4请注意,此操作不会返回。 LPM4.5 //将通过复位事件退出,从而重新启动 代码的//。 _bis_SR_register (LPM4_bits | GIE); } //主程序 while (1) { }
上述内容进入 LMP4.5、在调试和在 RESET 引脚上应用复位时、它会检测但不检测引脚2.4中断。 我出了什么问题?
谢谢、
Vlad