我在调试S12G128单片机的低功耗fullstop mode时遇到这个情况: - 单片机执行__asm("STOP"); 指令进入stopmode,单片机加外设消耗电流有10mA; ps:我尝试过将其他驱动芯片都从线路板上拿掉,只留下单片机,单片机不用的IO口我置为输出0,关闭所有外设模块,电流还是10mA. - 单片机执行__asm("ANDCC #0x7F"); __asm("STOP");进入stop mode,单片机加外设消耗电流1mA. 此部分代码如下(可以通过CAN总线或IRQ引脚唤醒): { HW_Watchdog_Disable(); asm SEI; ......(关闭外设模块) CANCTL0_SLPRQ = 1;
while(!CANCTL1_SLPAK);
CANCTL0_WUPE = 1;
CANRIER_WUPIE = 1;
CANCTL1_WUPM = 1;
while(!CANCTL1_SLPAK);
IRQCR_IRQEN = 1;
CPMUCLKS_PSTP = 0;
asm CLI;
Cpu_SetStopMode(); /* __asm("ANDCC #0x7F"); __asm("STOP"); */ _Startup(); } 1. 此时ANDCC #0x7F对条件代码寄存器CCR操作会影响什么? 为什么消耗电流差别这么大? 2. 执行__asm("ANDCC #0x7F"); __asm("STOP");进入了stop mode,通过IRQ引脚或者CAN总线唤醒后,单片机程序从哪里开始执行?我现在是执行的启动代码,从启动代码里跳到main函数执行。 3. 执行__asm("ANDCC #0x7F"); __asm("STOP");进入了stop mode,重新上电(不触发唤醒信号),单片机上电复位程序从哪里开始执行?目前情况是单片机重新上电后保持睡眠状态,唤醒单片机后可正常工作。
|