Я написал пустой хук, показанный здесь
void vApplicationIdleHook( void )
{
asm("nop");
P1OUT &= ~0x01;//go to sleep lights off!
LPM3;// LPM Mode - remove to make debug a little easier...
asm("nop");
}
Это должно привести к выключению светодиода, и MSP430 переходит в спящий режим, когда нечего делать. Я включаю светодиод во время некоторых задач.
Я также удостоверился, что изменил бит режима ожидания в SR при выходе из любого прерывания, которое могло бы разбудить MCU (за исключением тикера планировщика isr в portext.s43. Макрос в iar -
__bic_SR_register_on_exit(LPM3_bits); // Exit Interrupt as active CPU
Однако, похоже, что перевод MCU в режим сна вызывает нерегулярное поведение. Светодиод остается включенным всегда, хотя, когда я включаю его, он отключается на пару циклов команд, когда я пробуждаю mcu через одно из прерываний (UART), а затем снова включаю.
Если я закомментирую инструкцию LPM3, все пойдет по плану. Индикатор не светится большую часть времени и включается только при выполнении задачи.
Я использую MSP4f305438
Есть идеи?