Jump to content
    

режим LPM0

Использую режим засыпания LPM0 ->

В главном цикле есть процедуры, которые работают не по прерыванию:

Как разбудить проц, выйти из LPM0, выполнить процедуры главного цикла и опять уйти в спячку - Как это лучше сделать?

Прерывания есть по таймеру - 10мс тик, но перегружен процедурами, требующих точных временных отсчетов.

Share this post


Link to post
Share on other sites

Выходить из LPMx можно только по прерыванию. Значит используем какое-либо из незадействованных на данный момент (список векторов прерываний и их источников в даташите на конкретный контроллер).

Прерывание должно перед своим завершением извлечь из стека сохранённый там регистр статуса SR, изменить флаг CPUOFF, и "положить" модифицированный SR на место. При завершении прерывания, по команде RETI, из стека считается изменённое состояние SR, и в основном цикле будет либо Active Mode, либо LPMx.

 

Например:

1. Если WDT не занят, то использовать его прерывание в режиме таймера. Можно настроить 4 скорости срабатывания.

 

2. Прерывание таймера A или B - добавить в конце уже имеющегося обработчика такие действия:

Перед выходом из прерывания, программа проверяет какой-то бит (или байт) в ОЗУ, и в зависимости от его значения модифицирует сохранённый в стеке регистр статуса SR.

Если к примеру в ОЗУ был 0, это значит что основной цикл должен "бодрствовать", и программа прерывания сбросит CPUOFF в 0.

Если в ОЗУ было <> 0, значит CPUOFF нужно установить в 1. И тогда после завершения прерывания, основной цикл будет "спать".

А в основном цикле нужно только менять ячейку ОЗУ, чтоб сообщать обработчику прерывания о своей "занятости работой", или наоборот - об отсутствии дел.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...