Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выход из LPM3 по прерываниям
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
1921
Корифеи! Помогите - подскажите! Ухожу в LPM3, предварительно разрешив прерывания по порту 1. Тактирование от VLOCLK, РАБОТАЕТ, т.к. тикает WDT.
P1SEL=0
P1IE=FF
глобальные разрешены. Так вот, по WDT из LPM3 выходит, дёрганье за ноги P1 не приводит ни к чему. Если в LPM не загонять - прерывания работают. Заметил, что при выходе из LPM по WDT глобальные прерывания в SR почему-то запрещены. Это непонятно, т.к. при входе в LPM я их разрешал. Второе: как я понимаю, флаги всё равно должны выскакивать, так вот их там нет (P1IFG).
Подскажите, что почитать, за что подёргать, куда потыкать?
bigal
Есть ли разрешение прерываний при входе в LPM3?
P1IE |= 0x10; // P1.4 interrupt enabled
P1IES |= 0x10; // P1.4 Hi/lo edge
P1IFG &= ~0x10; // P1.4 IFG cleared

_BIS_SR(LPM3_bits + GIE);

Описан ли обработчик прерывания?
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
P1IFG = 0x00;
LPM3_EXIT;
}

Приведите более полно ваши коды
1921
Спасибо, разобрался. Просто эта штука не работает в пошаговом режиме, без отладчика всё пошло. С удивлением узнал, что после обработки прерывания в LPM3 контроллер уходит "досыпать", если не дать директиву __low_power_mode_off_on_exit();
В этом случае после обработки прерывания пробуждается и выскакивает на следующий за слипом шаг. Кстати, может, кто скажет, есть ли программный reset, который выводит программу на начало? В принципе, можно и без него, но с ним было бы лучше...
P.S. Кстати, откуда эта команда LPM3_EXIT;
Где она описана? Я проверил - работает, но в руководстве на С её не нашёл. Тогда где?
rezident
Цитата(1921 @ Mar 24 2011, 20:09) *
Просто эта штука не работает в пошаговом режиме, без отладчика всё пошло.
Режимы энергосбережения в дебаггере отладить не получится. Ведь ядро-то при этом "засыпает", а для отладки оно должно выполнять команды транслируемые ему через JTAG.
Цитата(1921 @ Mar 24 2011, 20:09) *
С удивлением узнал, что после обработки прерывания в LPM3 контроллер уходит "досыпать", если не дать директиву __low_power_mode_off_on_exit();
Это вы просто недочитали или невнимательно прочитали раздел System Resets, Interrupts, and Operating Modes в User's Guide.
Цитата(1921 @ Mar 24 2011, 20:09) *
Кстати, может, кто скажет, есть ли программный reset, который выводит программу на начало? В принципе, можно и без него, но с ним было бы лучше...
Опять же следует почитать вышеупомянутый раздел (System Reset and Initialization) в User's Guide. Вызвать сброс можно, например, записью в регистр WDTCTL значения, которое не содержит правильного security key.
Цитата(1921 @ Mar 24 2011, 20:09) *
P.S. Кстати, откуда эта команда LPM3_EXIT;
Где она описана? Я проверил - работает, но в руководстве на С её не нашёл. Тогда где?
Это Intrinsic-функция. Специфична для данного конкретного компилятора (IAR EW430 видимо). Поэтому описание ее нужно читать в руководстве на компилятор. Эта функция, точно также как и другие подобные ей, предназначенные для управления энергосбережением, оперирует с битами в регистре SR. См. рисунок Operating Modes For Basic Clock System и табличку под ним. Источник - опять же User's Guide. Или вот частичный перевод его.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.