Режимы работы: различия между версиями
Андрей (обсуждение | вклад) (Новая страница: «Тест {| class="wikitable" |+Потребление в различных режимах !Режим работы !Условия !Источник тактирования системы !Частота ядра !Потребление !Единицы |- !Активный |Тактирование периферий по умолчанию; Делитель AHB = 0; Делитель APB_M = 0; Делитель APB_P = 0; Загрузка из RAM. |OSC32...») |
Андрей (обсуждение | вклад) Нет описания правки |
||
(не показаны 22 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
== Описание режимов == | |||
=== Активный === | |||
{| class="wikitable" | |||
|+ | |||
!Состояние процессора | |||
!Состояние памяти | |||
!Состояние периферии | |||
!Состояние системного и батарейного домена | |||
!Тактирование | |||
!Вход в режим | |||
!Выход из режима | |||
|- | |||
|Процессор работает в нормальном режиме. | |||
|ОЗУ, EEPROM, SPIFI работают в нормальном режиме. | |||
|Периферия работает в нормальном режиме. | |||
|Системный домен включен, батарейный домен включен. | |||
|От внешнего осциллятора с частотой до 32 МГц OSC32M; | |||
От встроенного осциллятора с частотой до 32 МГц HSI32M. | |||
|Режим после сброса/подачи питания. | |||
| - | |||
|} | |||
Режим «Активный» подразумевает режим с максимальной производительностью: максимальная системная частота, минимальные делители, тактирование всех задействованных устройств включено. | |||
=== Пониженного энергопотребления === | |||
{| class="wikitable" | |||
!Состояние процессора | |||
!Состояние памяти | |||
!Состояние периферии | |||
!Состояние системного и батарейного домена | |||
!Тактирование | |||
!Вход в режим | |||
!Выход из режима | |||
|- | |||
|Процессор работает в нормальном режиме. | |||
|ОЗУ, EEPROM, SPIFI работают в нормальном режиме. | |||
Рекомендуется отключать тактирование неиспользуемых модулей памяти записью в регистры: | |||
PM.CLK_AHB_CLEAR | |||
|Рекомендуется отключать тактирование неиспользуемых периферийных модулей программно (пользователем) записью в регистры: | |||
PM.CLK_AHB_CLEAR; | |||
PM.CLK_APB_M_CLEAR; | |||
PM.CLK_APB_P_CLEAR. | |||
|Системный домен включен, батарейный домен включен. | |||
|От внешнего часового осциллятора; | |||
от встроенного часового осциллятора; | |||
от внешнего осциллятора с частотой до 32 МГц с делителем системной шины. | |||
|Программно, переключившись на нужный источник тактирования или выставив необходимый делитель. | |||
| Программно, переключившись на нужный источник тактирования или выставив необходимый делитель. | |||
|} | |||
Режим «Пониженного потребления» предполагает уменьшение производительности и потребления за счет снижения рабочей частоты, временное отключение тактирования устройств, которые временно не используются. Режим «Активный» и режим «Пониженного потребления» достаточно условны, так как отличаются выбранными источником тактирования, установленными делителями частот, отключенным тактированием тех или иных устройств, что определяется конкретной задачей. | |||
{{#spoiler:show=Показать пример входа в режим пониженного энергопотребления|hide=Скрыть пример входа в режим пониженного энергопотребления| | |||
<syntaxhighlight lang="c++" line="1"> | |||
void lowEnergyMode() | |||
{ | |||
// Шина APB_P (периферия) | |||
uint32_t clk_apb_p_mask = 0; | |||
// Шина APB_M (модули) | |||
uint32_t clk_apb_m_mask = 0 | |||
| PM_CLOCK_APB_M_PAD_CONFIG_M // контроллер выводов (вкл по умолч) | |||
| PM_CLOCK_APB_M_WU_M // блок батар. домена WakeUp (вкл по умолч) | |||
| PM_CLOCK_APB_M_PM_M // блок упр. питанием PowerMonitor (вкл по умолч) | |||
; | |||
// Шина AHB (главная) | |||
uint32_t clk_ahb_mask = 0 | |||
| PM_CLOCK_AHB_CPU_M // Ядро (вкл по умолч) | |||
| PM_CLOCK_AHB_EEPROM_M // EEPROM (вкл по умолч) | |||
| PM_CLOCK_AHB_RAM_M // ОЗУ (вкл по умолч) | |||
// | PM_CLOCK_AHB_SPIFI_M // SPI flash (вкл по умолч) | |||
| PM_CLOCK_AHB_TCB_M // TCB (вкл по умолчанию) | |||
// | PM_CLOCK_AHB_DMA_M // DMA | |||
; | |||
// Включить тактирование выбранных блоков и выключить у остальных | |||
PM->CLK_APB_M_SET = clk_apb_m_mask; | |||
PM->CLK_APB_M_CLEAR = ~clk_apb_m_mask; | |||
PM->CLK_APB_P_SET = clk_apb_p_mask; | |||
PM->CLK_APB_P_CLEAR = ~clk_apb_p_mask; | |||
PM->CLK_AHB_SET = clk_ahb_mask; | |||
PM->CLK_AHB_CLEAR = ~clk_ahb_mask; | |||
/* Вход в режим пониженного энергопотребления переключением на источник LSI32K. */ | |||
PM->AHB_CLK_MUX = PM_AHB_CLK_MUX_LSI32K_M | PM_AHB_FORCE_MUX_FIXED; // Переключиться на LSI32K | |||
for (volatile int i = 0; i < 100; i++) | |||
; | |||
/* Отключение неиспользуемых источников тактирования */ | |||
/* Источники 32МГц */ | |||
/* Внутренний */ | |||
WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_HSI32M_EN_S); // Выключить HSI32M | |||
/* Внешний */ | |||
WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_OSC32M_EN_S); // Выключить OSC32M | |||
/* Источники 32кГц */ | |||
/* Внутренний */ | |||
// WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_LSI32K_EN_S); // Выключить LSI32K | |||
/* Внешний */ | |||
WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_OSC32K_EN_S); // Выключить OSC32K | |||
/* Делители частоты */ | |||
PM->DIV_AHB = 255; | |||
PM->DIV_APB_M = 255; | |||
PM->DIV_APB_P = 255; | |||
} | |||
</syntaxhighlight> | |||
}} | |||
=== Спящий === | |||
{| class="wikitable" | |||
!Состояние процессора | |||
!Состояние памяти | |||
!Состояние периферии | |||
!Состояние системного и батарейного домена | |||
!Тактирование | |||
!Вход в режим | |||
!Выход из режима | |||
|- | |||
|Ядро в состоянии sleep | |||
|Тактирование Ядра, ОЗУ, EEPROM, SPIFI может быть выключено при записи в PM.SLEEP_MODE | |||
|Рекомендуется отключать тактирование неиспользуемых периферийных модулей программно (пользователем) записью в регистры: | |||
PM.CLK_AHB_CLEAR; | |||
PM.CLK_APB_M_CLEAR; | |||
PM.CLK_APB_P_CLEAR. | |||
|Системный домен включен, | |||
батарейный домен включен. | |||
|От внешнего осциллятора с частотой до 32 МГц | |||
От встроенного осциллятора с частотой до 32 МГц | |||
|Записью в регистр PM.SLEEP_MODE. | |||
| По прерыванию. | |||
|} | |||
«Спящий» режим подразумевает автоматическое отключение частоты ядра, некоторых модулей памяти. Переход осуществляется записью в регистр PM. SLEEP_MODE. При записи отключается тактирование ядра и в зависимости от записываемого значения отключается тактирование следующих модулей: | |||
* SLEEP_MODE[0] = 1 – отключение тактирования ядра; | |||
* SLEEP_MODE[1] = 1 – отключение тактирования EEPROM; | |||
* SLEEP_MODE[2] = 1 – отключение тактирования ОЗУ; | |||
* SLEEP_MODE[3] = 1 – отключение тактирования контроллера SPIFI. | |||
Ниже представлен пример входа в спящий режим, в котором включено тактирование GPIO0, GPIO_IRQ и EPIC. Выход из режима осуществляется, например, по внешнему прерыванию от вывода на порте GPIO0. {{#spoiler:show=Показать пример входа в спящий режим|hide=Скрыть пример входа в спящий режим| | |||
<syntaxhighlight lang="c++" line="1"> | |||
void sleepMode() | |||
{ | |||
// Шина APB_P (периферия) | |||
uint32_t clk_apb_p_mask = 0 | |||
| PM_CLOCK_APB_P_GPIO_0_M | |||
| PM_CLOCK_APB_P_GPIO_IRQ_M | |||
; | |||
// Шина APB_M (модули) | |||
uint32_t clk_apb_m_mask = 0 | |||
| PM_CLOCK_APB_M_PAD_CONFIG_M // контроллер выводов (вкл по умолч) | |||
| PM_CLOCK_APB_M_WU_M // блок батар. домена WakeUp (вкл по умолч) | |||
| PM_CLOCK_APB_M_PM_M // блок упр. питанием PowerMonitor (вкл по умолч) | |||
| PM_CLOCK_APB_M_EPIC_M | |||
; | |||
// Шина AHB (главная) | |||
uint32_t clk_ahb_mask = 0 | |||
| PM_CLOCK_AHB_CPU_M // Ядро (вкл по умолч) | |||
| PM_CLOCK_AHB_EEPROM_M // EEPROM (вкл по умолч) | |||
| PM_CLOCK_AHB_RAM_M // ОЗУ (вкл по умолч) | |||
// | PM_CLOCK_AHB_SPIFI_M // SPI flash (вкл по умолч) | |||
| PM_CLOCK_AHB_TCB_M // TCB (вкл по умолчанию) | |||
// | PM_CLOCK_AHB_DMA_M // DMA | |||
; | |||
// Включить тактирование выбранных блоков и выключить у остальных | |||
PM->CLK_APB_M_SET = clk_apb_m_mask; | |||
PM->CLK_APB_M_CLEAR = ~clk_apb_m_mask; | |||
PM->CLK_APB_P_SET = clk_apb_p_mask; | |||
PM->CLK_APB_P_CLEAR = ~clk_apb_p_mask; | |||
PM->CLK_AHB_SET = clk_ahb_mask; | |||
PM->CLK_AHB_CLEAR = ~clk_ahb_mask; | |||
PM->AHB_CLK_MUX = PM_AHB_CLK_MUX_HSI32M_M | PM_AHB_FORCE_MUX_FIXED; // Переключиться на LSI32K | |||
for (volatile int i = 0; i < 100; i++) | |||
; | |||
/* Отключение неиспользуемых источников тактирования */ | |||
/* Источники 32МГц */ | |||
/* Внутренний */ | |||
// WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_HSI32M_EN_S); // Выключить HSI32M | |||
/* Внешний */ | |||
WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_OSC32M_EN_S); // Выключить OSC32M | |||
/* Источники 32кГц */ | |||
/* Внутренний */ | |||
WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_LSI32K_EN_S); // Выключить LSI32K | |||
/* Внешний */ | |||
WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_OSC32K_EN_S); // Выключить OSC32K | |||
/* Делители частоты */ | |||
PM->DIV_AHB = 255; | |||
PM->DIV_APB_M = 255; | |||
PM->DIV_APB_P = 255; | |||
/* Вход в спящий режим */ | |||
/* Отключить тактирование SPIFI[3], RAM[2], ROM[1], ядро[0] */ | |||
PM->SLEEP_MODE = 0b1110; | |||
} | |||
</syntaxhighlight> | |||
}} | |||
===Стоп=== | |||
{| class="wikitable" | |||
!Состояние процессора | |||
!Состояние памяти | |||
!Состояние периферии | |||
!Состояние системного и батарейного домена | |||
!Тактирование | |||
!Вход в режим | |||
!Выход из режима | |||
|- | |||
|Ядро в состоянии sleep. | |||
|Тактирование ОЗУ, EEPROM, SPIFI выключено. | |||
|Тактированием периферия выключено | |||
|Системный домен включен, батарейный домен включен. | |||
|Тактирование системы выключено. | |||
|Запись в регистр WAKEUP.STOP | |||
|RTC/выводу EXT_WU. | |||
|} | |||
В режиме “Стоп” автоматически отключается тактирование всех устройств за исключением батарейного домена. Переход осуществляется записью в регистр WAKEUP.STOP. Выход из режима событию на выводе EXT_WU, будильника, или по сбросу. | |||
Для выхода из режима по RTC или выводу EXT_WU следует установить бит WU.SYS_MASK.SYS_UP_RTC или WU.SYS_MASK.SYS_UP_WU соответственно. При этом активный уровень, по которому происходит выход из режима, настраивается в WU.SYS_LEVEL.LVL_RTC и в WU.SYS_LEVEL.LVL_WU. | |||
Ниже приведен пример кода входа в режим стоп. Выход из режима осуществляется установкой на выводе EXT_WU уровня логической "1". | |||
{{#spoiler:show=Показать пример входа в режим стоп|hide=Скрыть пример входа в режим стоп| | |||
<syntaxhighlight lang="c++" line="1"> | |||
void stopMode() | |||
{ | |||
/* Разрешить включение системного домена (из режима СТОП) при активном уровне внешнего вывода ext_wu */ | |||
// WU->SYS_LEVEL &= ~WU_SYS_LEVEL_EXT_LINE_M; // Активный уровень EXT_WU лог. "0" | |||
WU->SYS_MASK |= WU_MASK_WAKEUP_EXT_M; | |||
for (volatile int i = 0; i < 100; i++) | |||
; | |||
PM->AHB_CLK_MUX = PM_AHB_CLK_MUX_LSI32K_M | PM_AHB_FORCE_MUX_FIXED; // Переключиться на LSI32K | |||
for (volatile int i = 0; i < 100; i++) | |||
; | |||
/* Отключение неиспользуемых источников тактирования */ | |||
/* Источники 32МГц */ | |||
/* Внутренний */ | |||
WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_HSI32M_EN_S); // Выключить HSI32M | |||
/* Внешний */ | |||
WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_OSC32M_EN_S); // Выключить OSC32M | |||
/* Источники 32кГц */ | |||
/* Внутренний */ | |||
// WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_LSI32K_EN_S); // Выключить LSI32K | |||
/* Внешний */ | |||
WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_OSC32K_EN_S); // Выключить OSC32K | |||
/* Делители частоты */ | |||
PM->DIV_AHB = 255; | |||
PM->DIV_APB_M = 255; | |||
PM->DIV_APB_P = 255; | |||
/* Вход в режим стоп */ | |||
WU->STOP = 1; | |||
} | |||
</syntaxhighlight> | |||
}} | |||
===Ожидание=== | |||
{| class="wikitable" | |||
!Состояние процессора | |||
!Состояние памяти | |||
!Состояние периферии | |||
!Состояние системного и батарейного домена | |||
!Тактирование | |||
!Вход в режим | |||
!Выход из режима | |||
|- | |||
|Питание выключено | |||
|Питание выключено | |||
|Питание выключено | |||
|Системный домен выключен, батарейный домен включен | |||
|Тактирование системы выключено. | |||
|Запись в регистр WAKEUP. SYS_POWEROFF. | |||
|По сбросу/RTC/ выводу EXT_WU | |||
|} | |||
Во всех режимах, кроме ожидания питание всех доменов включено. В режиме ожидания остается включенным только батарейный домен. Системный LDO выключен. Переход осуществляется записью в регистр SYS_POWEROFF. Выход из режима событию на выводе EXT_WU, будильника, или по сбросу. | |||
Для выхода из режима по RTC или выводу EXT_WU следует установить бит WU.SYS_MASK.SYS_UP_RTC или WU.SYS_MASK.SYS_UP_WU соответственно. При этом активный уровень, по которому происходит выход из режима, настраивается в WU.SYS_LEVEL.LVL_RTC и в WU.SYS_LEVEL.LVL_WU. | |||
Ниже приведен пример кода входа в режим ожидания. Выход из режима осуществляется установкой на выводе EXT_WU уровня логической "1". | |||
{{#spoiler:show=Показать пример входа в режим ожидания|hide=Скрыть пример входа в режим ожидания| | |||
<syntaxhighlight lang="c++" line="1"> | |||
void standbyMode() | |||
{ | |||
/* Разрешить включение системного домена при активном уровне внешнего вывода ext_wu */ | |||
// WU->SYS_LEVEL &= ~WU_SYS_LEVEL_EXT_LINE_M; // Активный уровень EXT_WU лог. "0" | |||
WU->SYS_MASK |= WU_MASK_WAKEUP_EXT_M; | |||
for (volatile int i = 0; i < 100; i++) | |||
; | |||
PM->AHB_CLK_MUX = PM_AHB_CLK_MUX_LSI32K_M | PM_AHB_FORCE_MUX_FIXED; // Переключиться на LSI32K | |||
for (volatile int i = 0; i < 100; i++) | |||
; | |||
/* Отключение неиспользуемых источников тактирования */ | |||
/* Источники 32МГц */ | |||
/* Внутренний */ | |||
WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_HSI32M_EN_S); // Выключить HSI32M | |||
/* Внешний */ | |||
WU->CLOCKS_SYS |= (1 << WU_CLOCKS_SYS_OSC32M_EN_S); // Выключить OSC32M | |||
/* Источники 32кГц */ | |||
/* Внутренний */ | |||
// WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_LSI32K_EN_S); // Выключить LSI32K | |||
/* Внешний */ | |||
WU->CLOCKS_BU |= (1 << WU_CLOCKS_BU_OSC32K_EN_S); // Выключить OSC32K | |||
/* Делители частоты */ | |||
PM->DIV_AHB = 255; | |||
PM->DIV_APB_M = 255; | |||
PM->DIV_APB_P = 255; | |||
/* Вход в режим ожидания */ | |||
WU->SYS_POWEROFF = 1; | |||
} | |||
</syntaxhighlight> | |||
}} | |||
==Потребление в различных режимах работы == | |||
{| class="wikitable" | {| class="wikitable" | ||
!Режим работы | !Режим работы | ||
!Условия | !Условия | ||
Строка 12: | Строка 342: | ||
|Тактирование периферий по умолчанию; | |Тактирование периферий по умолчанию; | ||
Делитель AHB = 0; | Делитель AHB = 0; | ||
Делитель APB_M = 0; | Делитель APB_M = 0; | ||
Делитель APB_P = 0 | |||
Делитель APB_P = 0. | |||
|OSC32M | |OSC32M | ||
|F<sub>CPU</sub> = 32 МГц | |F<sub>CPU</sub> = 32 МГц | ||
|12, | |12,50÷15,00 | ||
|мА | |мА | ||
|- | |- | ||
Строка 23: | Строка 354: | ||
|Тактирование включено только у WU, PM, CPU, EEPROM, RAM, TCB; | |Тактирование включено только у WU, PM, CPU, EEPROM, RAM, TCB; | ||
Источники OSC32M, OSC32K, HSI32M выключены; | Источники OSC32M, OSC32K, HSI32M выключены; | ||
Делитель AHB = 255; | Делитель AHB = 255; | ||
Делитель APB_M = 255; | Делитель APB_M = 255; | ||
Делитель APB_P = 255 | |||
Делитель APB_P = 255. | |||
|LSI32K | |LSI32K | ||
|F<sub>CPU</sub> = 125 кГц | |F<sub>CPU</sub> = 125 кГц | ||
|1, | | 1,50÷1,80 | ||
|мА | |мА | ||
|- | |- | ||
Строка 35: | Строка 368: | ||
| rowspan="3" |Тактирование RAM, EEPROM, SPIFI выключено записью в PM.SLEEP_MODE = 0b1110; | | rowspan="3" |Тактирование RAM, EEPROM, SPIFI выключено записью в PM.SLEEP_MODE = 0b1110; | ||
Тактирование включено только у WU, PM, CPU, TCB; | Тактирование включено только у WU, PM, CPU, TCB; | ||
Источники OSC32M, OSC32K, OSC32K выключены; | Источники OSC32M, OSC32K, OSC32K выключены; | ||
Делитель AHB = 255; | Делитель AHB = 255; | ||
Делитель APB_M = 255; | Делитель APB_M = 255; | ||
Делитель APB_P = 255 | |||
Делитель APB_P = 255. | |||
|HSI32M | |HSI32M | ||
| rowspan="2" |F<sub>CPU</sub> = 125 кГц | | rowspan="2" |F<sub>CPU</sub> = 125 кГц | ||
|3, | |3,20÷3,84 | ||
|мА | |мА | ||
|- | |- | ||
|OCS32M | | OCS32M | ||
|3, | |3,20÷3,84 | ||
|мА | |мА | ||
|- | |- | ||
|LSI32K | | LSI32K | ||
|F<sub>CPU</sub> = 125 Гц | |F<sub>CPU</sub> = 125 Гц | ||
|1, | |1,50÷1,80 | ||
|мА | |мА | ||
|- | |- | ||
! rowspan="2" |Стоп | ! rowspan="2" |Стоп | ||
|Источники HSI32M, OSC32K, LSI32K выключены; | |Источники HSI32M, OSC32K, LSI32K выключены; | ||
Делитель AHB = 255; | Делитель AHB = 255; | ||
Делитель APB_M = 255; | Делитель APB_M = 255; | ||
Делитель APB_P = 255; | Делитель APB_P = 255; | ||
Загрузка из EEPROM. | Загрузка из EEPROM. | ||
|OCS32M | |OCS32M | ||
|F<sub>CPU</sub> = 125 кГц | |F<sub>CPU</sub> = 125 кГц | ||
Ядро в состоянии sleep | Ядро в состоянии sleep | ||
|2, | |2,00÷2,40 | ||
|мА | |мА | ||
|- | |- | ||
|Источники OSC32M, HSI32M, OSC32K выключены; | |Источники OSC32M, HSI32M, OSC32K выключены; | ||
Делитель AHB = 255; | Делитель AHB = 255; | ||
Делитель APB_M = 255; | Делитель APB_M = 255; | ||
Делитель APB_P = 255; | Делитель APB_P = 255; | ||
Загрузка из EEPROM. | Загрузка из EEPROM. | ||
|LSI32K | |LSI32K | ||
|F<sub>CPU</sub> = 125 Гц | |F<sub>CPU</sub> = 125 Гц | ||
Ядро в состоянии sleep | Ядро в состоянии sleep | ||
|0, | |0,70÷0,84 | ||
|мА | |мА | ||
|- | |- | ||
! rowspan="2" |Ожидание | ! rowspan="2" |Ожидание | ||
|Источники HSI32M, OSC32K выключены; | |Источники HSI32M, OSC32K выключены; | ||
OSC32M включен | OSC32M включен; | ||
Делитель AHB = 255; | Делитель AHB = 255; | ||
Делитель APB_M = 255; | Делитель APB_M = 255; | ||
Делитель APB_P = 255 | |||
Делитель APB_P = 255 | |||
|LSI32K | |LSI32K | ||
|F<sub>CPU</sub> = 125 Гц | | F<sub>CPU</sub> = 125 Гц | ||
Питание ядра выключено | Питание ядра выключено | ||
|0, | |0,50÷0,60 | ||
|мА | |мА | ||
|- | |- | ||
|Источники OSC32M, HSI32M, OSC32K выключены; | |Источники OSC32M, HSI32M, OSC32K выключены; | ||
<u>OSC32M не установлен, вывод XI заземлен;</u> | <u>OSC32M не установлен, вывод XI заземлен;</u> | ||
Делитель AHB = 255; | Делитель AHB = 255; | ||
Делитель APB_M = 255; | Делитель APB_M = 255; | ||
Делитель APB_P = 255 | |||
Делитель APB_P = 255. | |||
|LSI32K | |LSI32K | ||
|F<sub>CPU</sub> = 125 Гц | |F<sub>CPU</sub> = 125 Гц | ||
Питание ядра выключено | Питание ядра выключено | ||
|0, | |0,17÷0,20 | ||
|мА | |мА | ||
|- | |- | ||
| colspan="6" |Примечание: В главном цикле инкрементируется переменная | | colspan="6" |Примечание: В главном цикле инкрементируется переменная, программа выполняется из EEPROM. | ||
|} | |} |
Текущая версия от 11:18, 30 июля 2024
Описание режимов
Активный
Состояние процессора | Состояние памяти | Состояние периферии | Состояние системного и батарейного домена | Тактирование | Вход в режим | Выход из режима |
---|---|---|---|---|---|---|
Процессор работает в нормальном режиме. | ОЗУ, EEPROM, SPIFI работают в нормальном режиме. | Периферия работает в нормальном режиме. | Системный домен включен, батарейный домен включен. | От внешнего осциллятора с частотой до 32 МГц OSC32M;
От встроенного осциллятора с частотой до 32 МГц HSI32M. |
Режим после сброса/подачи питания. | - |
Режим «Активный» подразумевает режим с максимальной производительностью: максимальная системная частота, минимальные делители, тактирование всех задействованных устройств включено.
Пониженного энергопотребления
Состояние процессора | Состояние памяти | Состояние периферии | Состояние системного и батарейного домена | Тактирование | Вход в режим | Выход из режима |
---|---|---|---|---|---|---|
Процессор работает в нормальном режиме. | ОЗУ, EEPROM, SPIFI работают в нормальном режиме.
Рекомендуется отключать тактирование неиспользуемых модулей памяти записью в регистры: PM.CLK_AHB_CLEAR |
Рекомендуется отключать тактирование неиспользуемых периферийных модулей программно (пользователем) записью в регистры:
PM.CLK_AHB_CLEAR; PM.CLK_APB_M_CLEAR; PM.CLK_APB_P_CLEAR. |
Системный домен включен, батарейный домен включен. | От внешнего часового осциллятора;
от встроенного часового осциллятора;
|
Программно, переключившись на нужный источник тактирования или выставив необходимый делитель. | Программно, переключившись на нужный источник тактирования или выставив необходимый делитель. |
Режим «Пониженного потребления» предполагает уменьшение производительности и потребления за счет снижения рабочей частоты, временное отключение тактирования устройств, которые временно не используются. Режим «Активный» и режим «Пониженного потребления» достаточно условны, так как отличаются выбранными источником тактирования, установленными делителями частот, отключенным тактированием тех или иных устройств, что определяется конкретной задачей.
Спящий
Состояние процессора | Состояние памяти | Состояние периферии | Состояние системного и батарейного домена | Тактирование | Вход в режим | Выход из режима |
---|---|---|---|---|---|---|
Ядро в состоянии sleep | Тактирование Ядра, ОЗУ, EEPROM, SPIFI может быть выключено при записи в PM.SLEEP_MODE | Рекомендуется отключать тактирование неиспользуемых периферийных модулей программно (пользователем) записью в регистры:
PM.CLK_AHB_CLEAR; PM.CLK_APB_M_CLEAR; PM.CLK_APB_P_CLEAR. |
Системный домен включен,
батарейный домен включен. |
От внешнего осциллятора с частотой до 32 МГц
От встроенного осциллятора с частотой до 32 МГц |
Записью в регистр PM.SLEEP_MODE. | По прерыванию. |
«Спящий» режим подразумевает автоматическое отключение частоты ядра, некоторых модулей памяти. Переход осуществляется записью в регистр PM. SLEEP_MODE. При записи отключается тактирование ядра и в зависимости от записываемого значения отключается тактирование следующих модулей:
- SLEEP_MODE[0] = 1 – отключение тактирования ядра;
- SLEEP_MODE[1] = 1 – отключение тактирования EEPROM;
- SLEEP_MODE[2] = 1 – отключение тактирования ОЗУ;
- SLEEP_MODE[3] = 1 – отключение тактирования контроллера SPIFI.
Ниже представлен пример входа в спящий режим, в котором включено тактирование GPIO0, GPIO_IRQ и EPIC. Выход из режима осуществляется, например, по внешнему прерыванию от вывода на порте GPIO0.
Стоп
Состояние процессора | Состояние памяти | Состояние периферии | Состояние системного и батарейного домена | Тактирование | Вход в режим | Выход из режима |
---|---|---|---|---|---|---|
Ядро в состоянии sleep. | Тактирование ОЗУ, EEPROM, SPIFI выключено. | Тактированием периферия выключено | Системный домен включен, батарейный домен включен. | Тактирование системы выключено. | Запись в регистр WAKEUP.STOP | RTC/выводу EXT_WU. |
В режиме “Стоп” автоматически отключается тактирование всех устройств за исключением батарейного домена. Переход осуществляется записью в регистр WAKEUP.STOP. Выход из режима событию на выводе EXT_WU, будильника, или по сбросу.
Для выхода из режима по RTC или выводу EXT_WU следует установить бит WU.SYS_MASK.SYS_UP_RTC или WU.SYS_MASK.SYS_UP_WU соответственно. При этом активный уровень, по которому происходит выход из режима, настраивается в WU.SYS_LEVEL.LVL_RTC и в WU.SYS_LEVEL.LVL_WU.
Ниже приведен пример кода входа в режим стоп. Выход из режима осуществляется установкой на выводе EXT_WU уровня логической "1".
Ожидание
Состояние процессора | Состояние памяти | Состояние периферии | Состояние системного и батарейного домена | Тактирование | Вход в режим | Выход из режима |
---|---|---|---|---|---|---|
Питание выключено | Питание выключено | Питание выключено | Системный домен выключен, батарейный домен включен | Тактирование системы выключено. | Запись в регистр WAKEUP. SYS_POWEROFF. | По сбросу/RTC/ выводу EXT_WU |
Во всех режимах, кроме ожидания питание всех доменов включено. В режиме ожидания остается включенным только батарейный домен. Системный LDO выключен. Переход осуществляется записью в регистр SYS_POWEROFF. Выход из режима событию на выводе EXT_WU, будильника, или по сбросу.
Для выхода из режима по RTC или выводу EXT_WU следует установить бит WU.SYS_MASK.SYS_UP_RTC или WU.SYS_MASK.SYS_UP_WU соответственно. При этом активный уровень, по которому происходит выход из режима, настраивается в WU.SYS_LEVEL.LVL_RTC и в WU.SYS_LEVEL.LVL_WU.
Ниже приведен пример кода входа в режим ожидания. Выход из режима осуществляется установкой на выводе EXT_WU уровня логической "1".
Потребление в различных режимах работы
Режим работы | Условия | Источник тактирования системы | Частота ядра | Потребление | Единицы |
---|---|---|---|---|---|
Активный | Тактирование периферий по умолчанию;
Делитель AHB = 0; Делитель APB_M = 0; Делитель APB_P = 0. |
OSC32M | FCPU = 32 МГц | 12,50÷15,00 | мА |
Пониженного энергопотребления | Тактирование включено только у WU, PM, CPU, EEPROM, RAM, TCB;
Источники OSC32M, OSC32K, HSI32M выключены; Делитель AHB = 255; Делитель APB_M = 255; Делитель APB_P = 255. |
LSI32K | FCPU = 125 кГц | 1,50÷1,80 | мА |
Спящий | Тактирование RAM, EEPROM, SPIFI выключено записью в PM.SLEEP_MODE = 0b1110;
Тактирование включено только у WU, PM, CPU, TCB; Источники OSC32M, OSC32K, OSC32K выключены; Делитель AHB = 255; Делитель APB_M = 255; Делитель APB_P = 255. |
HSI32M | FCPU = 125 кГц | 3,20÷3,84 | мА |
OCS32M | 3,20÷3,84 | мА | |||
LSI32K | FCPU = 125 Гц | 1,50÷1,80 | мА | ||
Стоп | Источники HSI32M, OSC32K, LSI32K выключены;
Делитель AHB = 255; Делитель APB_M = 255; Делитель APB_P = 255; Загрузка из EEPROM. |
OCS32M | FCPU = 125 кГц
Ядро в состоянии sleep |
2,00÷2,40 | мА |
Источники OSC32M, HSI32M, OSC32K выключены;
Делитель AHB = 255; Делитель APB_M = 255; Делитель APB_P = 255; Загрузка из EEPROM. |
LSI32K | FCPU = 125 Гц
Ядро в состоянии sleep |
0,70÷0,84 | мА | |
Ожидание | Источники HSI32M, OSC32K выключены;
OSC32M включен; Делитель AHB = 255; Делитель APB_M = 255; Делитель APB_P = 255 |
LSI32K | FCPU = 125 Гц
Питание ядра выключено |
0,50÷0,60 | мА |
Источники OSC32M, HSI32M, OSC32K выключены;
OSC32M не установлен, вывод XI заземлен; Делитель AHB = 255; Делитель APB_M = 255; Делитель APB_P = 255. |
LSI32K | FCPU = 125 Гц
Питание ядра выключено |
0,17÷0,20 | мА | |
Примечание: В главном цикле инкрементируется переменная, программа выполняется из EEPROM. |