Перейти к содержанию
    

HALT в STM8L и некорректная обработка выхода из него.

При подаче питания STM8L151K4T6 по HALT переходит в powed down. Дальше проц ожидается выхода из него по нажатию кнопки. Нажали, проц проснулся и перешёл на следующую команду после HALT. Здесь всё хорошо работает. В дальнейшем, через некоторое время, проц либо сам засыпает по таймеру, либо принудительно по кнопке переходе в powed down. Далее начинаются "глюки". Программа после обработки прерывания по нажатию клавиши переходит не на следующую команду после HALT, а несколькими командами раньше. Понятно, что это приводит к бесконечному сну программы. В отладчике, если всё делать пошагово, до HALT, просыпание будет корректным. Но, стоит точку останова поставить на HALT или при выходе из обработчика кнопки, в стеке виден неправильный адрес возврата. Полез в erratu. Оказывается, при частоте выше 8 МГц при выходе из HALT программа может некорректно читать таблице векторов прерываний. Рекомендация:

CLK_CKDIVR = 0x01;
_asm(“HALT”);
CLK_CKDIVR = 0x00;

Не помогает. Делитель также больше делал. Возникают вопросы. Почему же тогда при подаче питания первый HALT нормально обрабатывается? При медленном пошаговом выполнении также всё нормально.

Приходит простая мысль :blush:,может перед выходом из прерывания обработки кнопки в стеке адрес возврата менять на правильный принудительно? А то пока не вижу, как можно ещё устранить эту проблему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сейчас повозился в отладке. Перед HALT настраиваю прерывание по кнопке, чтобы выходить из сна.

GPIOA->DDR = 0xFF & ~PIN_KEY;  // кнопка

GPIOA->CR2 = PIN_KEY;

В прерывание попадает спутся пару команд после команды GPIOA->CR2 = PIN_KEY

Почему-то возникает прерывание от кнопки, хотя она уже обработана и времени между её отпусканием и командой проходит несколько секунд. В общем, больше вопросов :dash2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...