5.1.3. Регистр сброса модуля системной интеграции SRS
(Руководство разработчика по микроконтроллерам семейства HCS08)Биты регистра SRC показывают источник последнего сброса системы.
Регистр | Режим | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|---|
SRC | Чтение | POR | PIN | COP | ILOP | ILAD | ICG/ LOC | LVD | 0 |
Запись | Попытка записи сбрасывает счетчик сторожевого таймера | ||||||||
Сброс | x | x | x | x | x | x | x | x |
Описание битов:
Имя бита | Описание | Символ в языке С |
---|---|---|
POR | Флаг сброса по включению питания (Power On Reset). Устанавливается в 1 при включении напряжения питания МК (событие POR). Дополнительно устанавливается в 1 по сигналу внутреннего сброса при снижении напряжения питания (событие модуля LVD). | bPOR |
PIN | Флаг сброса по сигналу извне. Устанавливается в 1, если сброс произошел по внешнему сигналу на входе RST/RESET. | bPIN |
COP | Флаг сброса по переполнению сторожевого таймера. Устанавливается в 1, если сброс произошел по переполнению сторожевого таймера. | bCOP |
ILOP | Устанавливается в 1, если сброс произошел по причине считывания из памяти несуществующего кода команды (событие ILOP). | bILOP |
ILAD | Устанавливается в 1, если сброс произошел по причине формирования несуществующего адреса (событие ILAD). | bILAD |
ICG/LOC | Устанавливается в 1, если сброс произошел по причине выхода частоты тактирования за установленные пределы (событие потери опорной частоты в модуле внутреннего тактирования). | bICG bLOC |
LVD | Устанавливается, если сброс произошел по причине снижения напряжения питания. Также устанавливается при сбросе по включению питания (событие модуля POR). | bLVD |
Процедура вычисления источника последнего сброса очень проста (лучше всего проводить ее в начале программы). Ниже рассмотрен набор условных операторов, которые вызывают необходимые функции в зависимости от источника сброса системы:
if(SRS_COP)cop_timeout();
if(SRS_ILAD)illegal_address_reset();
if(SRS_ILOP)illegal_opcode_reset();
if(SRS_ICG)clock_failure();
if(SRS_LVD)low__voltage_reset()
Внутренний сброс типа ILAD или ILOP часто вызывается переполнением стека и ошибками возврата данных из стека. Проверка этих флагов в начале программы и в процессе отладки программного обеспечения позволит разработать устойчивое к критическим ситуациям ПО!
Следующий пример — это еще одна программа из цикла «мигающий светодиод». В данной программе происходит программный сброс каждый раз, когда переменная counter1 достигает значения 25. В начале программы написана простая проверка источника сброса, которая включает светодиод LED2 на демонстрационной плате DEMO9S08QG8, если сброс был вызван считыванием из памяти несуществующего кода команды (событие ILOP).
Пример 5.2. Выявление источника сброса
#include
#include"derivative.h"/*Файлсобъявлениямирегистровпериферии*/
#include"hcs08.h"//Этонашфайлсобъявлениями!
#defineLED1PTB0_PTBD6//1-йсветодиодподключенкPTB6
#defineLED2PTB0_PTBD7//2-йсветодиодподключенкPTB7
voiddelay(unsignedintvalue){
for{;value;value--);
}
voidreset(void){
unsignedinttemp=0x9E00;
#asm
LDHX@temp//ЗаписьадресапеременнойtempврегистрH:X
JMP,X//ПереходпоуказателюH:X
#endasm
}
voidmain(void){
unsignedcharcounterl=0;
SOPT1=bBKGDPE;//НастройкарегистраSOPT1,включениевыводаBKGDдляBDM
PTBDD=BIT_7|BIT_6;//Настройка6-гои7-гобитапортаBнавывод
//ТеперьпроверимсостояниерегистраSRS,установленлибитILOPв1
//ЕслиILOP=1,товключаемсветодиод2,еслиILOP=0,товыключаемсветодиод2
if(SRS_ILOP)LED2=0;elseLED2=1;
while(1)
{
PTBD_PTBD6=1;//Отключитьсветодиод
delay(30000);//Ожидание
PTBD_PTBD6=0;//Включитьсветодиод
delay(3000);//Ожидание
counter1++;
if(counter1≥25)reset();
}
}
5.2. Модуль контроля за снижением напряжения питания LVD
Аппаратные средства модуля LVD позволяют предотвратить переход МК в неработоспособное состояние при кратковременных отключениях напряжения питания или при его провалах, когда величина напряжения питания колеблется в диапазоне от 0 до минимального рабочего значения.
Модуль LVD обеспечивает два уровня защиты: обнаружение низкого напряжения питания (событие LVD) и предупреждение о низком питании (событие LVW). Модуль распознает событие LVD, если напряжение питания становится меньше порогового значения VLVD на время, превышающее 10мкс. При наступлении события LVD может быть сгенерирован как запрос на прерывание, так и сигнал внутреннего сброса МК.
Событие LVW не может генерировать запрос на прерывание или сигнал сброса. Поэтому бит события должен время от времени считываться программой для определения состояния системы питания МК.
Основным элементом модуля является аналоговый компаратор с передаточной характеристикой, имеющей вид гистерезиса с шириной петли примерно 100мВ при напряжении питания 5.0В. Гистерезис определяется разностью значений срабатывания при нарастании и при спаде напряжения питания (см. Табл.5.2).
На Рис.5.2 приведен график изменения напряжения питания во времени. Если для предупреждения о низком напряжении питания выбрано напряжение VLVW, то бит LVWF будет установлен, когда напряжение питания станет меньше значения нижней границы петли гистерезиса для уровня VLVW, и будет удерживаться в таком состоянии, пока напряжение не увеличится до верхней границы петли гистерезиса для уровня VLVW. Бит события LVDF устанавливается по тем же правилам, но относительно уровня VLVD. Учтите, что флаги LVWF и LVDF автоматически не сбрасываются. Необходимо сбрасывать их программно.
Рис.5.2. Уровни напряжения VLVD и VLVW.
Модуль LVD позволяет выбрать разные уровни напряжения срабатывания для детектирования события предупреждения LVW или события LVD. В Табл.5.2 приведены возможные значения для некоторых моделей семейства HCS08.
Таблица5.2. Уровни напряжений VLVD и VLVW
Модель МК | VLVD | VLVW | ||||||
---|---|---|---|---|---|---|---|---|
Низкое напряжение (VLVDL) | Высокое напряжение (VLVDH) | Низкое напряжение (VLVWL) | Высокое напряжение (VLVWH) | |||||
нижний порог | верхний порог | нижний порог | верхний порог | нижний порог | верхний порог | нижний порог | верхний порог | |
AW | 2.56 | 2.62 | 4.30 | 4.40 | 2.56 | 2.62 | 4.30 | 4.40 |
GB GT | 1.82 | 1.90 | 2.10 | 2.19 | 2.10 | 2.19 | 2.40 | 2.40 |
LC | 1.88 | 1.93 | 2.15 | 2.23 | 2.15 | 2.21 | 2.45 | 2.48 |
QD | 2.56 | 2.62 | 4.30 | 4.40 | 2.56 | 2.62 | 4.30 | 4.40 |
QE | 1.82 | 1.90 | 2.10 | 2.19 | 2.10 | 2.19 | 2.46 | 2.46 |
QG | 1.82 | 1.90 | 2.10 | 2.19 | 2.10 | 2.19 | 2.40 | 2.40 |
RC RD RE RG | 1.88 | 1.96 | — | — | 2.13 | 2.21 | — | — |
Модуль LVD после сброса МК отключен. Для разрешения его работы необходимо бит LVDE регистра SPMSC1 установить в 1. Этот бит может быть записан под управлением программы только один раз за сеанс работы МК, сразу после сброса системы. Все остальные попытки изменить содержимое бита будут проигнорированы.
Электронные компоненты Freescale >>>
Подробнее о компании Freescale >>>