Управление тактированием: различия между версиями
Дмитрий (обсуждение | вклад) (изменено управление тактирования с помощью регистров на hal библиотеку) |
Дмитрий (обсуждение | вклад) (исправил mik32_hal_pcc.h) |
||
Строка 35: | Строка 35: | ||
Для управления тактированием в микроконтроллере в сегрегированном файле main.c необходимо подключить библиотеку "mik32_hal_PCC.h" и создать функцию SystemClock_Config с вызовом ее в main. | Для управления тактированием в микроконтроллере в сегрегированном файле main.c необходимо подключить библиотеку "mik32_hal_PCC.h" и создать функцию SystemClock_Config с вызовом ее в main. | ||
{{#spoiler:show=Развернуть код|hide=Свернуть код|<syntaxhighlight lang="c" line="1"> | {{#spoiler:show=Развернуть код|hide=Свернуть код|<syntaxhighlight lang="c" line="1"> | ||
#include " | #include "mik32_hal_pcc.h" | ||
void SystemClock_Config(void); | void SystemClock_Config(void); | ||
Строка 81: | Строка 81: | ||
Для настройки встроенного осциллятора HSI32M используются поправочные коэффициенты с допустимым значением от 0 до 255. | Для настройки встроенного осциллятора HSI32M используются поправочные коэффициенты с допустимым значением от 0 до 255. | ||
Для настройки встроенного осциллятора LSI32K используются поправочные коэффициенты с допустимым значением от 0 до | Для настройки встроенного осциллятора LSI32K используются поправочные коэффициенты с допустимым значением от 0 до 15. | ||
RTCClockSelection используется для назначения приоритетного источника тактирования модуля RTC. | RTCClockSelection используется для назначения приоритетного источника тактирования модуля RTC. | ||
Строка 129: | Строка 129: | ||
PCC_FREQ_MONITOR_SOURCE_OSC32K — Опорный источник частоты монитора частоты принудительно выбран как OSC32K | PCC_FREQ_MONITOR_SOURCE_OSC32K — Опорный источник частоты монитора частоты принудительно выбран как OSC32K | ||
|- | |- | ||
| colspan="2" | AHBDivider | | colspan="2" |AHBDivider | ||
|Минимальное значение: 0; | |Минимальное значение: 0; | ||
Максимальное значение: 255 | Максимальное значение: 255 | ||
|- | |- | ||
| colspan="2" | APBMDivider | | colspan="2" |APBMDivider | ||
|Минимальное значение: 0; | |Минимальное значение: 0; | ||
Строка 149: | Строка 149: | ||
|- | |- | ||
| colspan="2" |LSI32KCalibrationValue | | colspan="2" |LSI32KCalibrationValue | ||
| Минимальное значение: 0; | |Минимальное значение: 0; | ||
Максимальное значение: | Максимальное значение: 15 | ||
|- | |- | ||
| colspan="2" |RTCClockSelection | | colspan="2" | RTCClockSelection | ||
|PCC_RTC_CLOCK_SOURCE_AUTO — Источник тактирования RTC выбирается автоматически. Если присутствуют оба тактовых сигнала 32K, то выбирается LSI32K; | |PCC_RTC_CLOCK_SOURCE_AUTO — Источник тактирования RTC выбирается автоматически. Если присутствуют оба тактовых сигнала 32K, то выбирается LSI32K; | ||
Строка 160: | Строка 160: | ||
PCC_RTC_CLOCK_SOURCE_OSC32K — Приоритетный источник тактирования RTC - OSC32K | PCC_RTC_CLOCK_SOURCE_OSC32K — Приоритетный источник тактирования RTC - OSC32K | ||
|- | |- | ||
| colspan="2" |RTCClockCPUSelection | | colspan="2" | RTCClockCPUSelection | ||
|PCC_CPU_RTC_CLOCK_SOURCE_OSC32K — Источник тактирования RTC в составе ядра - OSC32K; | |PCC_CPU_RTC_CLOCK_SOURCE_OSC32K — Источник тактирования RTC в составе ядра - OSC32K; | ||
PCC_CPU_RTC_CLOCK_SOURCE_LSI32K — Источник тактирования RTC в составе ядра - LSI32K | PCC_CPU_RTC_CLOCK_SOURCE_LSI32K — Источник тактирования RTC в составе ядра - LSI32K | ||
|} | |} |
Версия от 10:17, 6 ноября 2024
В основе работы любого микроконтроллера лежит процесс тактирования.
Тактирование — это процесс подачи тактовых импульсов генератором. Этот процесс необходим для синхронизации всех процессов в микроконтроллере.
Тактовая частота микроконтроллера — количество тактов, которые выполняет микроконтроллер в секунду. От частоты зависит эффективность микроконтроллера.
Чем больше тактовая частота микроконтроллера, тем большее количество операций он может выполнить за одну секунду. Она определяет порядок и скорость выполнения операций устройства.
Тактовые импульсы можно подавать двумя способами: через внутренний и внешний генератор.
Существует несколько типов тактовых резонаторов:
- RC-цепи
- Керамичсекие резонаторы
- Кварцевые резонаторы
Микроконтроллер MIK32 оснащен четырьмя генераторами, два на основе внешнего кварцевого резонатора и два на встроенном контуре RC.
- Внешние генераторы
- OSC32K — генератор с выводами для подключения внешнего часового кварцевого резонатора;
- OSC32M — генератор с выводами для подключения внешнего кварцевого резонатора для тактирования системы с частотой от 1 до 32 МГц (генератор по-умолчанию);
- Внутренние генераторы
- HSI32M — встроенный генератор с частотой 32 МГц с возможностью корректировки частоты;
- LSI32K — встроенных генератора с частотой 32 кГц с возможностью корректировки частоты;
- монитор частоты, предназначен для контроля состояния источников тактирования во время работы микроконтроллера;
Управление тактированием
При включении питания и по внешнему сбросу:
- тактирование осуществляется от внешнего осциллятора 32 МГц (OSC32M);
- значения делителей шин AHB, APB_M, APB_P равны 0, то есть указанные шины работают на частоте осциллятора;
- тактирование RAM, EEPROM, SPIFI, PowerManager, WakeUp включено, тактирование остальных устройств выключено;
- тактирование сторожевого таймера осуществляется от встроенного осциллятора 32 МГц;
- внешние осцилляторы OSC32K и OSC32M включены. Перед использованием внешнего осциллятора его необходимо включить записью «0» в поле OCS32M;
Для управления тактированием в микроконтроллере в сегрегированном файле main.c необходимо подключить библиотеку "mik32_hal_PCC.h" и создать функцию SystemClock_Config с вызовом ее в main.
Значение параметра OscillatorEnable отвечает за активацию источников тактирования в микроконтроллере.
FreqMon.OscillatorSystem выбирает основной источник тактирования микроконтроллера.
FreqMon.ForceOscSys позволяет или запрещает автоматическое изменение основного источника тактирования при отсутствии сигнала на нём.
FreqMon.Force32KClk предназначен для назначения опорного источника тактирования монитора частоты.
AHBDivider, APBMDivider, APBPDivider задают делитель частоты шин AHB, APB_М и APB_P соответственно.
Частоты сигналов на шинах рассчитываются по следующим формулам:
FAHB = FИСТОЧНИКА / (AHBDivider + 1),
FAPB_М = FAHB / (APBMDivider + 1),
FAPB_P = FAHB / (APBPDivider + 1).
Для настройки встроенного осциллятора HSI32M используются поправочные коэффициенты с допустимым значением от 0 до 255.
Для настройки встроенного осциллятора LSI32K используются поправочные коэффициенты с допустимым значением от 0 до 15.
RTCClockSelection используется для назначения приоритетного источника тактирования модуля RTC.
RTCClockCPUSelection используется для назначения приоритетного источника тактирования RTC в составе ядра.
Описание полей модуля управления тактированием представлено в таблице 1.
Таблица 1. Поля управления модуля тактирования
Поле | Значения | |
---|---|---|
OscillatorEnable | PCC_OSCILLATORTYPE_HSI32M — Внутренний источник тактирования 32МГц;
PCC_OSCILLATORTYPE_OSC32M — Внешний источник тактирования 32МГц; PCC_OSCILLATORTYPE_LSI32K — Внутренний источник тактирования 32КГц; PCC_OSCILLATORTYPE_OSC32K — Внешний источник тактирования 32КГц; PCC_OSCILLATORTYPE_ALL — Все источники тактирования | |
FreqMon | OscillatorSystem | PCC_OSCILLATORTYPE_HSI32M — Внутренний источник тактирования 32МГц;
PCC_OSCILLATORTYPE_OSC32M — Внешний источник тактирования 32МГц; PCC_OSCILLATORTYPE_LSI32K — Внутренний источник тактирования 32КГц; PCC_OSCILLATORTYPE_OSC32K — Внешний источник тактирования 32КГц |
ForceOscSys | PCC_FORCE_OSC_SYS_UNFIXED — Источник тактирования системы не выбирается принудительно;
PCC_FORCE_OSC_SYS_FIXED — Источник тактирования системы выбирается принудительно | |
Force32KClk | PCC_FREQ_MONITOR_SOURCE_AUTO — Опорный источник частоты монитора частоты выбирается автоматически;
PCC_FREQ_MONITOR_SOURCE_LSI32K — Опорный источник частоты монитора частоты принудительно выбран как LSI32K; PCC_FREQ_MONITOR_SOURCE_OSC32K — Опорный источник частоты монитора частоты принудительно выбран как OSC32K | |
AHBDivider | Минимальное значение: 0;
Максимальное значение: 255 | |
APBMDivider | Минимальное значение: 0;
Максимальное значение: 255 | |
APBPDivider | Минимальное значение: 0;
Максимальное значение: 255 | |
HSI32MCalibrationValue | Минимальное значение: 0;
Максимальное значение: 255 | |
LSI32KCalibrationValue | Минимальное значение: 0;
Максимальное значение: 15 | |
RTCClockSelection | PCC_RTC_CLOCK_SOURCE_AUTO — Источник тактирования RTC выбирается автоматически. Если присутствуют оба тактовых сигнала 32K, то выбирается LSI32K;
PCC_RTC_CLOCK_SOURCE_LSI32K — Приоритетный источник тактирования RTC - LSI32K; PCC_RTC_CLOCK_SOURCE_OSC32K — Приоритетный источник тактирования RTC - OSC32K | |
RTCClockCPUSelection | PCC_CPU_RTC_CLOCK_SOURCE_OSC32K — Источник тактирования RTC в составе ядра - OSC32K;
PCC_CPU_RTC_CLOCK_SOURCE_LSI32K — Источник тактирования RTC в составе ядра - LSI32K |