8.2. Режимы останова

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

Режим Stop3 похож на режим Stop микроконтроллеров семейства HC08. Энергопотребление МК существенно понижается по сравнению с режимом ожидания Wait. Следовательно, это хороший режим работы для устройств, питающихся от батареи. Для перехода в режим Stop3 необходимо сбросить состояние бита PDC регистра SPMSC2 и вызвать команду STOP.

В Табл.8.3 показано потребление тока микроконтроллерами разных серий при работе в режиме Stop3. Представленные данные измерены производителем при температуре кристалла 25°C. Приведена также информация о токах, которые потребляют модули RTI, LVD и генератор системы тактирования, которые остаются активными в режиме работы Stop3.

Таблица8.3. Ток, потребляемый контроллером и модулями, в режиме Stop3

Серия
МК
Напряжение питания
[В]
Ток потребления в режиме Stop3 [нА]Ток модуля RTI/RTC
[нA]
Ток модуля LVD
[мкA]
Ток встроенного генератора
[мкA]
Ток цепи внешнего генератора
[мкA]
AW59753001105
3825300905
GB/GTxxA3675300705
2500300605
LC3840350754
2660350703.5
QD590040011075
39003509065
QE3450200100700.5
2350????????????
QG375030070???5
268030060???4
Rx360030070
250030060

Режим Stop3 характеризуется следующим состоянием внутренних ресурсов МК:

  1. Сигнал BUSCLK отключается, работа ЦП и всей цифровой периферии останавливается в момент вызова команды STOP.
  2. Память и регистры МК сохраняют информацию и хранят ее до тех пор, пока МК находится под напряжением питания.
  3. В режиме Stop3 по желанию программиста могут работать система тактирования, модуль АЦП, модули подсистемы реального времени RTI/RTC и внутренний стабилизатор напряжения:
    • внутренний стабилизатор напряжения МК продолжает работать в режиме Stop3, если перед переходом в данный режим были установлены биты SPMSC:LVDE и SPMSC1:LVDSE;
    • модуль RTI/RTC продолжает работать, если он тактируется от внутреннего генератора с частотой 1кГц или от внешнего генератора;
    • АЦП продолжает работу в режиме Stop3, если он настроен на тактирование от собственного встроенного генератора и если включен модуль LVD.

Выход из режима Stop3 может быть произведен по сбросу системы или по прерыванию от следующих периферийных модулей МК:

  • внешнее прерывание IRQ;
  • прерывание от модуля сканирования клавиатуры KBI;
  • при снижении напряжения питания — прерывание от модуля LVD;
  • прерывание от часов реального времени RTC или от модуля RTI;
  • прерывание от модуля аналого-цифрового преобразователя ADC (только для МК с версией модуля ADC10 или ADC12).

Модуль источника прерывания перед переходом в режим Stop3 должен быть включен!

Если выход их режима Stop3 организуется по сбросу системы, то ЦП сбрасывается и начинает работу, как при первом запуске, т.е. считывается вектор сброса, а все регистры периферии сбрасываются в начальное состояние. Если же выход из режима Stop3 происходит по прерыванию, то запускается на исполнение подпрограмма прерывания (ISR), а после ее выполнения ЦП продолжает выполнять основную программу, начиная с команды, следующей сразу за командой STOP.

Использование режима Stop3 рассмотрено в Примере 8.1. Программа заставляет мигать светодиод LED1, подключенный к линии PTB6 на демонстрационной плате DEMO9S08QG8. Если нажать на кнопку SW2, светодиод LED2 изменит свое состояние, а если нажать на кнопку SW1, то МК перейдет в режим останова Stop3, выйти из которого можно, нажав на любую из кнопок SW1/SW2.

Пример 8.1. Пример использования режима Stop3

//ДемонстрационнаяплатаDEMO9S08QG8,режимработыStop3
//КатодсветодиодаLED1подключенклинииPTB6
//КатодсветодиодаLED2подключенклинииPTB7
//КнопкаSW1подключенаклинииPTA2
//КнопкаSW2подключенаклинииPTA3
#include/*forEnableInterruptsmacro*/
#include"derivative.h"/*includeperipheraldeclarations*/
#include"hcs08.h"/*Этонашфайлсобъявлениями!*/
#defineLED1PTBD_PTBD6
#defineLED2PTBD_PTBD7
#defineSW1PTAD_PTAD2
#defineSW2PTAD_PTAD3
unsignedcharmode;//Текущийрежим
//Простейшаяпрограммнаязадержка
voiddelay(unsignedintvalue)
{
for(;value;value--);
}
//Подпрограммапрерываниямодулясканированияклавиатуры
voidinterruptVectorNumber_VkeyboardKBI_isr()
{
KBISC_KBACK=1;//Установкабитаподтвержденияпрерывания(сбрасывается
//флагKBF)
if(!SW2)LED2=!LED2;//ЕслиSW2нажата,тоизменяетсясостояниесветодиодаLED2
if(!SW1)mode=!mode;//ЕслинажатаSW1,тоизменяетсярежим
}
voidmain(void)
{
//НастройкарегистраSOPT1,включениевозможностииспользованиякомандыSTOPи
//линииBKGD
SOPT1=bSTOPE|bBKGDPE;

/* Не забудьте разрешить исполнение микроконтроллером команды STOP (бит STOPE = 1 в регистре SOPT1). В противном случае исполнение команды STOP вызовет сброс МК по несуществующему коду команды!!! */

SPMSC2=0;//ВключениережимаStop3
PTBDD=0xFF;//ВселинииPTB–навывод
PTAPE=BIT_2|BIT_3;//ВключениеподтягивающихрезисторовналинияхPTA2и
//PTA3
KBISC=bKBIE;//ВключениепрерываниймодуляKBI
KBIPE=BIT_2|BIT_3;//ИспользованиелинийPTA2иPTA3модулемKBI
mode=0;
EnableInterrupts;//Сбросглобальноймаскипрерываний(CCR:I=0)
while(1)
{
LED1=0;//ВключениеLED1
delay(30000);//Временнаязадержка
LED1=1;//ВыключениеLED1
delay(30000);//Временнаязадержка
//Еслипеременнаяmodeнеравна0,топереходимврежимStop3
if(mode)
{
STOP;//ПереходврежимStop3
mode=0;//ПослевыходаизрежимаStop3отключаемвозможность
//повторногоперехода(mode=0)
}
}
}

Изменив подпрограмму прерывания модуля KBI, можно сделать так, чтобы для выхода из режима Stop3 достаточно было использовать только кнопку SW1:

//ФункцияобработкипрерыванияпоKBI
voidinterruptVectorNumber..VkeyboardKBI_isr(){
KBISC_KBACK=1;//Установкабитаподтвержденияпрерывания(сбрасывается
//флагKBF)
if(!SW2)LED2=!LED2;//ЕсликнопкаSW2нажата,тоизменяетсясостояние
//светодиодаLED2
if(!SW1)mode=!mode;//ЕслинажатакнопкаSW1,тоизменяемрежимработы
//Еслиmode(0,топереходимврежимStop3
If(!mode)
{
KBIPE=BIT_2;
STOP;
mode=0;
KBIPE=BIT_2IBIT_3;
}
}

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