8.2.2. Режим останова Stop2

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

Режим работы Stop2 — новый энергосберегающий режим МК семейства HCS08. Ток потребления МК в этом режиме становится еще меньше, чем при работе в режиме Stop3, поскольку отключается питание всех периферийных модулей и регистров. Для выбора режима Stop2 в микроконтроллерах серий GB, GT, LC, QG, RC, RD, RE и RG нужно установить биты PDC и PPDC, а в МК серий AC, AW и QD режим Stop2 выбирается путем записи 1 в бит PPDC.

На самом деле, получается, что все внутренние модули, питающиеся от внутреннего стабилизатора напряжения, выключаются. В рабочем состоянии остаются только: память данных ОЗУ, порты ввода/вывода, модуль внешнего прерывания IRQ, а также модуль меток реального времени RTI или модуль часов реального времени RTC.

Необходимо иметь в виду, что в режиме Stop2 содержимое всех регистров специальных функций периферийных модулей «теряется». Однако в МК встроена специальная схема защелки регистров портов ввода/вывода, что позволяет сохранить ранее установленное состояние линий портов. Значения регистров-защелок будут сохраняться до тех пор, пока бит PPDACK в регистре SPMSC2 не будет сброшен в 0.

Признаком хорошего программирования считается сохранение содержимого важных для прикладной программы регистров периферийных функций в ОЗУ МК перед переходом в режим Stop2 (включая регистры портов), а затем восстановление этих значений под управлением программы после выхода из режима Stop2.

В Табл.8.3 показаны уровни тока потребления для МК разных серий при работе в режиме Stop2, а также токи, необходимые модулям RTI или RTC для поддержания своей работоспособности в режиме Stop2 (показания даны производителем для температуры кристалла 25°C).

Таблица8.4. Токи потребления в режиме останова Stop2

Серия
МК
Напряжение питания
[В]
Ток потребления в режиме Stop2
([нА]
Ток модуля RTI/RTC
[нA]
AW5900300
3720300
GB/GTxxA3550300
2400300
LC3650350
2600350
QD5800400
3800350
QE3350200
2250200
QG3600300
2550300
Rx3500300
2500300

Если при работе МК в активном режиме разрешена работа модуля LVD, то при вызове команды STOP МК перейдет в режим Stop3, независимо от состояния битов PDC и PPDC!
Помните, что при выходе из режима Stop2 автоматически активируется модуль LVD!

Выход из режима Stop2 осуществляется по одному из следующих событий:

  • по внешнему сбросу — НИЗКИЙ уровень на входе RESET;
  • по внешнему прерыванию — сигнал по входу IRQ;
  • по прерыванию от модуля RTI/RTC, если он был включен до входа в режим Stop2.

При входе МК в любой из режимов останова модуль IRQ включается автоматически! Для МК, в которых функции IRQ и Reset мультиплексированы на одной линии, выход из режима останова по сбросу невозможен. Автоматически при поступлении сигнала на эту линию происходит выход по прерыванию. Для такого типа линий при входе в режим останова отключается внутренний подтягивающий резистор. Поэтому вход должен быть снабжен внешним резистором или на него должен поступать сигнал с ВЫСОКИМ логическим уровнем.

Если выход из режима останова Stop2 был осуществлен по сбросу, то выполнение программы перезапускается, т.е. прикладная программа начинает выполняться с вектора сброса, а состояние регистров устанавливается в начальное. Выход из режима останова, вызванный любым другим из перечисленных выше событий, по действию на внутренние ресурсы аналогичен выходу после сброса по событию модуля POR, кроме следующих пунктов:

  1. Бит PPDF регистра SPMSC2 устанавливается в 1. С его помощью можно различить выход из режима останова Stop2 (PPDF = 1) и выход по иному сбросу системы (PPDF = 0).
  2. Состояние линий портов ввода/вывода остается таким, каким оно было до входа в режим Stop2. Это работают регистры-защелки. Однако регистры специальных функций портов, а также регистры других периферийных модулей устанавливаются в значения по умолчанию.

Процедура инициализации МК должна быть написана таким образом, чтобы можно было отличить переход к ее выполнению после события модуля POR или после возврата МК из режима останова Stop2:

  • После события модуля POR (PPDF = 0) функция инициализации присваивает регистрам периферийных устройств и глобальным переменным те значения, которые необходимы для начала программы.
  • При возврате из режима останова Stop2 (PPDF = 1) функция инициализации должна восстанавливать текущее содержимое регистров из сохраненных в ОЗУ значений. Следует сначала восстановить значения регистров управления портами, а затем установить бит PPDACK, который восстанавливает возможность контроля состояния портов регистрами специальных функций.

Для приложений, использующих режим Stop2, предпочтительно использовать режим начальной генерации кода (minimal startup code). При выборе этой опции генерируется упрощенный код загрузки: не инициализируются глобальные и статические переменные (см. раздел 3.1). Можно также использовать сегмент NO_INIT в конфигурационном файле компоновщика. Более подробно использование сегмента показано в Примерах 9.1 и 9.2 главы 9.

Пример 8.2 иллюстрирует особенности программного кода для режима Stop2. Когда МК находится в активном режиме, светодиод LED1 мигает. При нажатии на кнопку SW2 светодиод LED2 меняет свое состояние, а при нажатии на кнопку SW1 МК переходит в режим Stop2.

При переходе содержимое всех регистров и ОЗУ сотрется (кроме состояния линий портов ввода/вывода). При нажатии на кнопку RESET микроконтроллер выйдет из режима по событию модуля POR.

В начале программы проверяется состояние бита SPMSC2:PPDF. Если он установлен, устанавливается бит подтверждения выхода из режима Stop2 (записывается 1 в бит PPDACK регистра SPMSC2). Если не выполнить эту операцию, то после выхода из режима Stop2 не получится изменить состояние портов ввода/вывода, и линии останутся в состоянии, которое было перед входом в режим останова. Светодиод LED1 показывает, что произошел успешный выход из режима Stop2.

Эта программа может быть проверена только с выключенным отладчиком. Если сессия отладки еще не закончена, то МК перейдет в режим Stop3, а не Stop2.

Пример 8.2. Использование режима останова Stop2

//ПримериспользованиярежимаостановаStop2наотладочнойплатеDEMO9S08QG8
//КатодсветодиодаLED1подключенклинииPTB6
//КатодсветодиодаLED2подключенклинииPTB7
//КнопкаSW1подключенаклинииPTA2,кнопкаSW2подключенаклинииPTA3
//КнопкаRESETподключенаквходуPTA5/IRQ/RESET
#include/*forEnableInterruptsmacro*/
#include"derivative.h"/*includeperipheraldeclarations*/
#include"hcs08.h"/*Этонашфайлсобъявлениями*/
#defineLED1PTBD_PTBD6
#defineLED2PTBD_PTBD7
#defineSW1PTAD_PTAD2
#defineSW2PTAD_PTAD3
//Простаяпрограммнаявременнаязадержка
voiddelay(unsignedintvalue)
{
for(;value;value--);
}
//ПодпрограммаобслуживанияпрерываниямодуляKBI
voidinterruptVectorNumber_VkeyboardKBI_isr()
{
KBISC_KBACK=1;//БитподтвержденияпрерыванияKBI(сбросKBF)
if(!SW2)LED2=!LED2;//ЕслинажатакнопкаSW2,тоизменяемсостояниеLED2
if(!SW1)STOP;//НслинажатаSW1,топереходимврежимStop2
}

// Находясь в режиме Stop2, можно выполнять команду STOP в подпрограмме прерывания. После выхода из режима указатель стека все равно будет установлен в исходное состояние!!!

voidmain(void)
{
//КонфигурациярегистраSOPT1,
//включаетсявозможностьиспользованиякомандыSTOPилинииBKGD
SOPT1=bSTOPE|bBKGDPE;
SPMSC1=0;//ОтключениемодуляLVD

// Не забудьте запретить работу модуля LVD, иначе МК перейдет в Stop3, а не в Stop2!!!

SPMSC2=bPDC|bPPDC;//ВыборрежимаостановаStop2
PTBDD=0xFF;//НастройкалинийпортаPTBнавывод
PTAPE=BIT_2|BIT_3;//Подключениевнутреннихподтягивающихрезисторов
//клиниямPTA2иPTA3
KBISC=bKBIE;//ВключениепрерываниймодуляKBI
KBIPE=BIT_2|BIT_3;//ПодключениелинийPTA2иPTA3кмодулюKBI,
if(SPMSC2_PPDF)//еслиустановленбитPPDF
{
SPMSC2_PPDACK=1;//БитподтвержденияPPDF

// Это подтверждение выхода из режима Stop2. Если забыть установить данный бит, то порты не перейдут на управление от своих регистров специальных функций!!!

LED2=0;//ВключениесветодиодаLED2
}
EnableInterrupts;//Включениеглобальноймаскипрерываний(CCR:I=0)
while(1)
{
LED1=0;//ВключениеLED1
delay(30000);//Задержка
LED1=1;//ОтключениеLED1
delay(30000);//Задержка
}
}

На демонстрационной плате DEMO9S08QG8 есть внешний подтягивающий резистор по линии PTAD2. При проектировании схемы устройства необходимо предусмотреть внешний подтягивающий резистор для линии, по сигналу на которой происходит выход из режима останова.

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