Очень редкие проекты у меня на MSP. А с режимами сна вообще дел не имел. Немного повозился - понял, что там вообще свой подход к написанию проектов нужен. А он у меня не выработан. (( Короче проект маленький. ОС не нужна не разу. Потребление - основное. Периферии много задействовано. 3 ноги (прерывания), RTC, LCD, 2 таймера, ADC, USART и I2C. На постоянку только ноги, LCD и RTC. То есть LPM3.5. Остальная периферия запускается разово. По даташиту на МК нашёл табл. 6-1 "Operating Modes (continued)", где указано что I2C и UART работают только в LPM0 (собственно эти узлы тактируются только SMCLK). Остальная периферия может спать в LPM3. Я сейчас в ячейке храню битовый список запущенных узлов. Чтобы знать в какой именно режим сна я имею возможность войти. Но у мне не совсем понятно с выходом из сна. Приведу пример. Я работаю с усартом. То есть нахожусь в LPM0. Тут приходит прерывание от ножки (геркон) я просыпаюсь выполняю работу запускаю таймер для задержки на дребезг и надо выйти в голову. То есть выйти из LPM0. Но если я не работаю с UART, то мне надо выходить из прерывания по LPM3. И я что-то недогоняю. Достаточно ли мне сделать __bic_SR_register_on_exit(LPM3_bits) и это решит проблему в обоих случаях. Или мне требуется анализировать из какого режима я попал в прерывание?
|