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] |
---|---|---|---|---|---|---|
AW | 5 | 975 | 300 | 110 | — | 5 |
3 | 825 | 300 | 90 | — | 5 | |
GB/GTxxA | 3 | 675 | 300 | 70 | — | 5 |
2 | 500 | 300 | 60 | — | 5 | |
LC | 3 | 840 | 350 | 75 | — | 4 |
2 | 660 | 350 | 70 | — | 3.5 | |
QD | 5 | 900 | 400 | 110 | 75 | — |
3 | 900 | 350 | 90 | 65 | — | |
QE | 3 | 450 | 200 | 100 | 70 | 0.5 |
2 | 350 | ??? | ??? | ??? | ??? | |
QG | 3 | 750 | 300 | 70 | ??? | 5 |
2 | 680 | 300 | 60 | ??? | 4 | |
Rx | 3 | 600 | 300 | 70 | — | — |
2 | 500 | 300 | 60 | — | — |
Режим Stop3 характеризуется следующим состоянием внутренних ресурсов МК:
- Сигнал BUSCLK отключается, работа ЦП и всей цифровой периферии останавливается в момент вызова команды STOP.
- Память и регистры МК сохраняют информацию и хранят ее до тех пор, пока МК находится под напряжением питания.
- В режиме 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
//КатодсветодиодаLED1подключенклинииPTB6
//КатодсветодиодаLED2подключенклинииPTB7
//КнопкаSW1подключенаклинииPTA2
//КнопкаSW2подключенаклинииPTA3
#include
#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 вызовет сброс МК по несуществующему коду команды!!! */
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:
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 >>>