Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

IARMSP + MSP430 - не могу выдернуть проц из SLEEP MODE 3 по нажатию кнопки.

Отправлено Oldmanoff 01 ноября 2007 г. 13:46


Коллеги, приветствую !
Имеем: MSP430F1232, который совершенно нормально переводится в слип и находится там постоянно.
Есть надобность при этом из слипа его выдергивать через прерывание по изменению состояния в одной из ног порта 1 (это кнопка с активным НИЗКИМ уровнем). Не получается. Кнопка сидит на линии TCK, поэтому в JTAG-отладчике отследить попадание в подпрограмму прерывания не получается, т.к. он ругается на неожиданное изменение уровня в линии ТСК.
Буду признателен за сооображения.


АППАРАТНО: Линия ТСК имеет внешнюю подтяжку резистором 100 кОм.

ПРОГРАММНО :
Как все описано в программе:
************* описание ноги процессора Р1.4, на которой висит кнопка
P1DIR &= ~0x10; P1OUT |= 0x10; // настраиваем вход клавиатуры

****************** так уходим в слип из основной программы
prepare_to_sleep:
// *********** готовимся к режиму минимального потребления
ADC10CTL0 = 0;// выключить АЦП
ADC10CTL0 = 0;// выключить АЦП
ADC10AE = 0; // выключить АЦП
word_595_low = 0; // гасим все регистры с выходом наружу
word_595_medium = 0; // гасим все регистры с выходом наружу
word_595_high = 0; // гасим все регистры с выходом наружу
Set_595(); //зафиксировать изменения в регистрах наружу
clr_595_SI ; // гасим линии управления НС595
clr_595_SCK ; // гасим линии управления НС595
clr_595_LTCH ;// гасим линии управления НС595
P1DIR = 0xef; P1OUT = 0; // port 1 - на выход, уровень - низкий, кроме Р1.4 - это кнопка
P2DIR = 0xff; P2OUT = 0; // port 2 - на выход, уровень - низкий
P3DIR = 0xff; P3OUT = 0; // port 3 - на выход, уровень - низкий
// *********** готовы к режиму минимального потребления


IE1 &= ~WDTIE; // Disable WDT interrupt
// **********8 конфигурируем прерывание по низкому уровню в порту Р1.4

P1IES |= 0x10 ; /// отрицательный фронт для прерываний
P1IE |= 0x10 ; // разрешить прерывание от кнопки
// *********** пошли спать
_BIS_SR(LPM3_bits+GIE); //(LowPowerMode 3, interrupt on) уснули - реагируем на прерывания только от PORT1.4

// *********** а здесь - проснулись

timeout = 0 ;

goto start; // и отправились в самое начало программы для инициализации всего устройства


************************** так описана подпрограмма прерывания
#pragma vector=PORT1_VECTOR
__interrupt void port1_change(void)
{
set_VCC_LCD; // оживляем внешние линии питания LCD
Set_595 () ; // выводим их наружу
_BIC_SR_IRQ(CPUOFF); // просыпаемся
P1IE &= ~0x10 ; // запрещаем прерывания от разбудившего нас порта
// и выходим отсюдова
}



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 654:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru