5.2.5. Регистры модуля LVD

(Руководство разработчика по микроконтроллерам семейства HCS08)

Для настройки модуля LVD используются 3 регистра:

  • SPMSC1 (System Power Management Status and Control 1) — регистр управления системой питания 1;
  • SPMSC2 — регистр управления системой питания 2;
  • SPMSC3 — регистр управления системой питания 3.

5.2.5.1. Регистр SPMSC1

Для МК серий Ax, Dx, Ex, JM, LC, Qx, Sx
РегистрРежимD7D6D5D4D3D2D1D0
SPMSC1ЧтениеLVDF0LVDIELVDRE*LVDSELVDE*0BGBE
ЗаписьLVDACK
Сброс00011100

Для МК серий GB/GT
РегистрРежимD7D6D5D4D3D2D1D0
SPMSC1ЧтениеLVDF0LVDIELVDRE*LVDSELVDE*00
ЗаписьLVDACK
Сброс00011100

Для МК серий RC,RD, RE и RG
РегистрРежимD7D6D5D4D3D2D1D0
SPMSC1ЧтениеLVDF0LVDIESAFELVDRE*000
ЗаписьLVDACK
Сброс00001000

*Эти биты могут быть изменены один раз после сброса системы. Все остальные попытки записать в них данные будут проигнорированы.

Описание битов:
Имя битаОписаниеСимвол в языке С
LVDFФлаг события обнаружения низкого напряжения питания. Значение этого флага действительно, только если работа модуля LVD разрешена, т.е. бит LVDE = 1. Бит доступен только для чтения.bLVDF
LVDACKЗапись 1 в данный бит сбрасывает бит LVDF в 0.bLVDACK
LVDIEБит разрешения прерывания по событию LVD — событию обнаружения низкого напряжения питания:
0 — прерывание запрещено;
1 — прерывание разрешено.
bLVDIE
LVDREБит выбора реакции на событие LVD — событие обнаружения низкого напряжения питания:
0 — событие вызывает прерывание;
1 — событие вызывает сброс системы.
bLVDRE
LVDSEБит разрешения работы модуля LVD в режиме STOP:
0 — модуль LVD отключен в режиме STOP;
1 — модуль LVD работает в режиме STOP.
bLVDSE
LVDEБит разрешения работы модуля LVD:
0 — модуль отключен;
1 — модуль включен.
bLVDE
SAFEЭтот бит управляет режимом SAFE в МК моделей Rx.
Бит запрета пробуждения МК из режима STOP по событию в модуле LVD:
0 — события внутреннего сброса или прерывания от модуля LVD в режиме STOP с последующим переходом МК в активный режим работы разрешены, но при условии, что напряжение питания МК выше уровня уставки VREARM.
1 — события внутреннего сброса или прерывания от модуля LVD в режиме STOP или когда напряжение питания МК выше уровня уставки VREARM запрещены.
bSAFE

5.2.5.2. Регистр SPMSC2

Для МК серий AC, AW, QD
РегистрРежимD7D6D5D4D3D2D1D0
SPMSC2ЧтениеLVWF0LVDVLVWVPPDF0PPDC*
ЗаписьLVWACKPPDACK
Сброс00000000

Для МК серий DN, DV, DZ, EL, EN, SG, SH, SL
РегистрРежимD7D6D5D4D3D2D1D0
SPMSC2Чтение00LVDVLVWVPPDF00PPDC*
ЗаписьPPDACK
Сброс00000000

Для МК серии QE
РегистрРежимD7D6D5D4D3D2D1D0
SPMSC2ЧтениеLPRLPRSLPWUI0PPDFPPDE*PPDC
ЗаписьPPDACK
Сброс00000000

Для МК серий LC, QA, QG
РегистрРежимD7D6D5D4D3D2D1D0
SPMSC2Чтение000PDFPPDF0PDC*PPDC*
ЗаписьPPDACK
Сброс00000000

Для МК серий GB, GT
РегистрРежимD7D6D5D4D3D2D1D0
SPMSC2ЧтениеLVWF0LVDVLVWVPPDF0PDC*PPDC*
ЗаписьLVWACKPPDACK
Сброс00000000

Для МК серий RC, RD, RE, RG
РегистрРежимD7D6D5D4D3D2D1D0
SPMSC2ЧтениеLVWF000PPDF0PDC*PPDC*
ЗаписьLVWACKPPDACK
Сброс00000000

*Эти биты могут быть изменены один раз после сброса системы. Все остальные попытки записать в них данные будут проигнорированы.

Описание битов:
Имя битаОписаниеСимвол в языке С
LVWFФлаг события предупреждения о низком напряжении питания LVW. Флаг доступен только для чтения и устанавливается, когда напряжение питания становится ниже уровня VLVW.bLVWF
LVWACKБит подтверждения для события LVW. Запись 1 вызывает сброс бита LVWF. Если напряжение все еще низкое, то бит LVWF не перейдет в нулевое состояние.bLVWACK
LVDVБит выбора напряжения сравнения для события LVD (см. Табл.5.2):
0 — выбирается нижний диапазон;
1 — выбирается верхний диапазон.
bLVDV
LVWVБит выбора напряжения сравнения для события LVW (см. Табл.5.2):
0 — выбирается нижний диапазон;
1 — выбирается верхний диапазон.
bLVWV

Остальные биты (PDC, PPDC, LPR, LPRS и PPDE) относятся к режимам низкого энергопотребления и будут рассмотрены далее в главе 8.

5.2.5.3. Регистр SPMSC3

Для МК серий QG, QA и LC
РегистрРежимD7D6D5D4D3D2D1D0
SPMSC2ЧтениеLVWF0LVDVLVWV0000
ЗаписьLVWACK
Сброс00000000

Регистр SPMSC3 присутствует только в устройствах серии QG, QA и LC!

Описание битов:
Имя битаОписаниеСимвол в языке С
LVWFФлаг события предупреждения о низком напряжении питания LVW. Флаг доступен только для чтения и устанавливается, когда напряжение питания становится ниже уровня VLVW.bLVWF
LVWACKБит подтверждения для события LVW. Запись 1 вызывает сброс бита LVWF. Если напряжение все еще низкое, то бит LVWF не перейдет в нулевое состояние.bLVWACK
LVDVБит выбора напряжения сравнения для события LVD (см. Табл.5.2):
0 — выбирается нижний диапазон;
1 — выбирается верхний диапазон.
bLVDV
LVWVБит выбора напряжения сравнения для события LVW (см. Табл.5.2):
0 — выбирается нижний диапазон;
1 — выбирается верхний диапазон.
bLVWV

5.3. Сторожевой таймер COP

В МК компании Freescale Semiconductor модуль сторожевого таймера носит название COP (Computer Operating Properly). Модуль COP предназначен для восстановления работоспособности прикладной программы при возникновении сбоев в ее работе. Поэтому можно сказать, что сторожевой таймер «следит» за правильным исполнением программы.

Механизм наблюдения за ходом выполнения программы прост. Сторожевой таймер — это счетчик. Если он запустился и досчитал до переполнения, то генерируется сигнал внутреннего сброса. Прикладное ПО должно не допускать переполнения счетчика, т.е. периодически сбрасывать сторожевой таймер.

Хорошо продуманное программное обеспечение должно сбрасывать сторожевой таймер как можно меньшее число раз. В идеале, операция сброса должна встречаться в программе 1 раз. Частый сброс сторожевого таймера по ходу программы уменьшает эффективность контроля ее исполнения.

В МК семейства HCS08 сторожевой таймер выполнен на основе двоичного счетчика с коэффициентом счета 8192 (213) или 262144 (218). Сторожевой таймер включается битом COPE и тактируется частотой BUSCLK. Выбор коэффициента счета таймера производится битом COPT в регистре SOPT или SOPT1. Форматы этих регистров приведены в разделе 5.5.

Сброс счетчика сторожевого таймера осуществляется посредством записи в регистр SRS любого числа. Записываемое значение не играет роли, важен сам факт записи:

SRS=0;//Сброссторожевоготаймера

МК серий QD, QE, QG и LC имеют дополнительный источник тактирования для сторожевого таймера: независимый генератор частотой 1кГц. По умолчанию выбрано тактирование COP именно этим генератором. Чтобы выбрать в качестве тактирования сигнал частотой BUSCLK, необходимо записать 1 в бит COPCLKS регистра SOPT2. Обратите внимание, что при выборе в качестве источника тактирования генератора 1кГц автоматически изменяется коэффициент счета счетчика COP (Табл.5.3).

Таблица5.3. Выбор периода работы сторожевого таймера COP

COPCLKSCOPTИсточник тактированияКоэффициент счета
00Внутренний генератор 1кГц.32 (32мс)
01Внутренний генератор 1кГц256 (256мс)
10BUSCLK8192
11BUSCLK262144

Помните! После сброса МК сторожевой таймер включен, коэффициент счета равен 261144, счетчик тактируется с частотой системной шины BUSCLK.
В МК семейств QA, QD, QE, QG и LC источник тактирования — внутренний счетчик с частотой 1кГц, коэффициент счета равен 256, поэтому период COP составляет примерно 256мс.
Для отключения сторожевого таймера необходимо записать 0 в бит COPE:
SOPT=0; // Отключение сторожевого таймера и вывода отладки BKGD
Будьте осторожны: регистр SOPT можно изменить 1 раз. При выходе МК из режима останова, код счетчика сторожевого таймера автоматически сбрасывается.

В следующем примере показана программа «мигающий светодиод» с защитой с помощью сторожевого таймера. Когда программа запускается первый раз, светодиод 2 выключен, а первый светодиод мигает. Сторожевой таймер включен, период его счета равен 256мс. Если он не будет сбрасываться каждые 256мс, то МК будет переходить в режим сброса.

В приведенной программе сторожевой таймер обслуживается в цикле for. Если, по каким-то причинам, программа «потеряется» и перестанет сбрасывать сторожевой таймер, то система перейдет в режим сброса.

Для учебных целей в данной программе обнуление сторожевого таймера можно остановить, если нажать и удерживать кнопку SWI. Тогда примерно через 256мс произойдет сброс.

Процедура проверки в начале программы осуществляет включение светодиода LED2, если сброс был вызван сторожевым таймером, а не модулем POR. Так можно отличить сброс по сторожевому таймеру от сброса по включению питания.

Пример 5.3. Мигающий светодиод и проверка источника прерывания

//Мигающийсветодиодипроверкаисточникапрерывания
#include/*Файл,позволяющийвключитьпрерывания*/
#include"derivative.h"/*Файлсобъявлениямирегистровпериферии*/
#include"hcs08.h"//Этонашфайлсобъявлениями!
#defineLED1PTBD_PTBD6//Светодиод1подключенкPTB6
#defineLED2PTBD_PTBD7//Светодиод2подключенкPTB7
#defineSW1PTAD_PTAD2//КнопкаSW1подключенакPTA2
#defineCLRCOP{SRS=0;}//Макроопределениесбросасторожевоготаймера
voidmain(void)
{
unsignedinttemp;
//НастройкарегистраSOPT1,включениесторожевоготаймераCOP
//(BKGDотключен)
SOPT1=bCOPT|bCOPE;
PTBDD=BIT_7|BIT_6;//НастройкаPTB6иPTB7навывод
PTAPE=BIT_2;//ПодключениеподтягивающихрезисторовдляPTA2
//Проверкаисточникапоследнегосброса
//ЕслиSRS_COP=1,товключаетсявторойсветодиодLED2
//ЕслиCOP_COP=0,товторойсветодиодотключается
if(SRS_COP)LED2=0;elseLED2=1;
while(1)
{
PTBD_PTBD6=1;//Отключитьсветодиод
for(temp=30000;temp;temp--)CLRCOP;//Ожидание
PTBD_PTBD6=0;//Включитьсветодиод
for(temp=3000;temp;temp--)CLRCOP;//Ожидание
while(!SW1);//ЕслинажатакнопкаSWI,то
//прерываемвыполнениепрограммы
}
}

Избегайте сброса сторожевого таймера в функциях обработки прерываний, поскольку основная программа может работать неправильно, а прерывания «извне» могут генерироваться корректно.
Лучше использовать как можно меньше процедур сброса сторожевого таймера (в идеале — одна команда на все приложение).

Электронные компоненты Freescale >>>
Подробнее о компании Freescale >>>