大家好、
在 C 语言中对微控制 器进行编程是一项相当新的工作、我在优化低功耗模式的同时使中断保持较短的时间、就像在这篇博文中一样。 想知道是否有人可以给我一些关于如何进行的建议。
基本上,我要做的就是在 main()中设置我的器件,然后在执行相应的代码之前等待低功耗模式下的中断。 目前、我进行了如下设置、ISR 中包含大量代码:
(笑声)
_bis_SR_register (CPUOFF + GIE); //输入 LPM0并在 (1)时启用中断 //循环永久 {}
}
//端口1中断服务例程
#pragma vector=Port1_vector
__interrupt void Port_1 (void)
{
WDTCTL = WDTPW + WDTCNTCL;
P1IFG &=~BIT3;// P1.3 IFG (中断标志)清零
TRIG += 1;//通过'TRIG'值循环以按顺序激活不同的 LED
if (trig==4){
TRIG = 0x000;
}
IF (TRIG = 1){
LED = BIT1;
}否则(TRIG =2){
LED = BIT3;
}否则(TRIG =3){
LED = BIT5;
}否则(TRIG =0){
LED = 0x000;
}
}
由于这只是一个简短的示例,而且这种方法最终会导致很大的 ISR,我想尽量避免这种情况,我想在低功耗模式下使用中断进行轮询,然后处理 main()中的触发操作。 我在线找到的下图似乎表明这是可能的、但我不知道如何在 CPU 关闭的情况下检查情况。
我尝试运行以下脚本、但由于无法在 LPM0中评估条件、因此继续返回错误。 有人知道另一种处理方式吗? 也许与 MSP432的等待中断(WFI)函数类似、我认为该函数会暂停代码执行、直到生成中断?
{...
_bis_SR_register (CPUOFF + GIE); //输入 LPM0并启用中断
while (1){ //永久循环
if (trig==4){ TRIG = 0x000; } IF (TRIG = 1){ LED = BIT1; }否则(TRIG =2){ LED = BIT3; }否则(TRIG =3){ LED = BIT5; }否则(TRIG =0){ LED = 0x000; }
_bis_SR_register (CPUOFF + GIE);//
}
}
//端口1中断服务例程
#pragma vector=Port1_vector
__interrupt void Port_1 (void)
{
WDTCTL = WDTPW + WDTCNTCL;
P1IFG &=~BIT3;// P1.3 IFG (中断标志)清零
TRIG += 1;//循环通过'TRIG'值来按顺序激活不同的 LED
__BIC_SR_REGISTER_ON_EXIT (LPM0_Bits + GIE); //在退出中断时退出 LMP0,禁用中断,直至主函数中的任务完成
}