реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> режим LPM0, засыпать и просыпаться без прерываний в главном цикле
Make_Pic
сообщение Aug 19 2018, 10:46
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Использую режим засыпания LPM0 ->
В главном цикле есть процедуры, которые работают не по прерыванию:
Как разбудить проц, выйти из LPM0, выполнить процедуры главного цикла и опять уйти в спячку - Как это лучше сделать?
Прерывания есть по таймеру - 10мс тик, но перегружен процедурами, требующих точных временных отсчетов.
Go to the top of the page
 
+Quote Post
controller_m30
сообщение Aug 19 2018, 15:09
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309



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

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

2. Прерывание таймера A или B - добавить в конце уже имеющегося обработчика такие действия:
Перед выходом из прерывания, программа проверяет какой-то бит (или байт) в ОЗУ, и в зависимости от его значения модифицирует сохранённый в стеке регистр статуса SR.
Если к примеру в ОЗУ был 0, это значит что основной цикл должен "бодрствовать", и программа прерывания сбросит CPUOFF в 0.
Если в ОЗУ было <> 0, значит CPUOFF нужно установить в 1. И тогда после завершения прерывания, основной цикл будет "спать".
А в основном цикле нужно только менять ячейку ОЗУ, чтоб сообщать обработчику прерывания о своей "занятости работой", или наоборот - об отсутствии дел.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd September 2018 - 08:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01004 секунд с 7
ELECTRONIX ©2004-2016