Skip to main content

Модуль управления источниками тактовых сигналов системы

Общая информация

Модуль управления источника тактовых сигналов системы предназначен для включения, отключения источников тактирования системы, переключения между ними, а также для изменения периода синхросигнала.

Микроконтроллер может работать от двух различных источников тактирования:

  • Низкочастотный (встроенный низкочастотный RC-генератор);
  • Высокочастотный (встроенный высокочастотный RC-генератор, кварцевый резонатор, внешний генератор).

Структурная схема

Структурная схема модуля управления источниками тактовых сигналов системы

Модуль управления источниками тактовых сигналов системы состоит из следующих блоков:

  • REGISTERS – блок для хранения управляющих данных и статусов;
  • SLEEP_CONTOL – блок управления режимом «SLEEP», предназначен для запуска режимов «Сон процессора» и «Глубокий сон»;
  • CLOCK_SEL – блок выбора частоты тактирования, предназначен для выбора источника частоты тактирования системы;
  • MUX – мультиплексор, предназначен для управления частотами, которые будут переданы в систему;
  • CLOCK_DIVIDER – делитель частоты, предназначен для деления частоты выбранного источника тактирования.

Выбор источника тактирования системы

При подаче питания тактирование системы осуществляется с внутреннего высокочастотного RC-генератора. Пользователь может изменить источник тактирования путём записи необходимого значения бита RC_FAST_SLOW в регистре CMM_CTRL. Переключение возможно только, если в регистре CMM_CTRL установлены биты RC_FAST_EN и RC_SLOW_EN. В любом другом случае попытка переключения будет проигнорирована, биты не изменят своего значения. На время операции переключения в регистре CMM_ST в активном уровне будет находится бит SWITCH. Когда операция переключения будет завершена, бит SWITCH примет значение 0.

Процесс переключения частот состоит из нескольких этапов. После записи RC_FAST_SLOW команда старта синхронизируется на переключаемую частоту – 2 такта (частоты, на которую происходит переключение). Производится проверка частоты, на которую переключается пользователь – 4 такта (частоты, на которую происходит переключение). Сигнал подтверждения наличия частоты синхронизируется на текущую частоту – 2 такта (текущей частоты). Синхронизация сигнала об отключении текущей частоты – 2 такта (частоты, на которую происходит переключение). Затем снимается команда переключения – 1 такт. Вырабатывается прерывание – 1 такт. Обновляется регистр статуса – 1 такт. При большой разнице частот, процесс переключения на медленную частоту займет порядка 12 тактов медленной частоты.

Деление частоты тактирования

Текущая частота тактирования системы может быть поделена. Для этого необходимо записать коэффициент в регистр CMM_DIV.

Отключение частоты тактирования

Пользователь имеет возможность отключить незадействованный источник тактирования путём записи в биты RC_FAST_EN или RC_SLOW_EN регистра CMM_CTRL нулевого значения, таким образом понизив электропотребление системы. Отключение текущей рабочей частоты невозможно. Отключение частоты невозможно во время процедуры переключения источника тактирования.

Выключение источника тактирования во время режима «Глубокий сон»

Модуль «CMM» имеет два бита настройки отключения источника тактирования во время режима «Глубокий сон». Подробно режим описан в пункте «Режим SLEEP». Запись «1» в один из битов RC_F_SLEEP_STOP или RC_S_SLEEP_STOP регистра CMM_CTRL означает, что при переходе системы в режим «Глубокий сон», соответствующий источник тактирования автоматически будет отключен. При выходе из режима «Глубокий сон» источники тактирования будут работать в соответствии с битами RC_SLOW_EN и RC_FAST_EN. Данная процедура снижает энергопотребление системы во время режима «Глубокий сон».

Отключение источника тактирования, на котором происходит работа во время режима «Глубокий сон», приведет к полной остановке системы, без возможности программного восстановления работоспособности.

Регистры модуля управления источниками тактовых сигналов системы

АббревиатураДоступОписание
2100hCMM_CTRLRWРегистр управления
2101hCMM_DIVRWРегистр делителя частоты
2102hCMM_MSKRWРегистр маски
2103hCMM_STRРегистр статуса

CMM_CTRL

Бит76543210
НазначениеРезерв*RC_S_SLEEP_STOPRC_F_SLEEP_STOPRC_SLOW_ENRC_FAST_ENRC_FAST_SLOW
Начальное значение000110

* – Не изменять начальное значение.

RC_S_SLEEP_STOP – выключение низкочастотного RC-генератора в режиме «Глубокий сон»:

  • 1 – отключить низкочастотный RC-генератор;
  • 0 – не отключать низкочастотный RC-генератор.

RC_F_SLEEP_STOP – выключение высокочастотного RC-генератора в режиме «Глубокий сон»:

  • 1 – отключить высокочастотный RC-генератор;
  • 0 – не отключать высокочастотный RC-генератор.

RC_SLOW_EN – бит управления включением низкочастотного RC-генератора:

  • 1 – включен;
  • 0 – выключен.

RC_FAST_EN – бит управления включением высокочастотного RC-генератора:

  • 1 – включен;
  • 0 – выключен.

RC_FAST_SLOW – бит управления источником тактирования системы (Fsrc):

  • 1 – тактирование от низкочастотного RC-генератора;
  • 0 – тактирование от высокочастотного RC-генератора.

CMM_DIV

Бит76543210
НазначениеCOEF
Начальное значение0

COEF – значение регистра CMM_DIV.

При COEF>0 частота тактирования системы рассчитывается по формуле:

FSYS=FSRC2COEFF_{SYS} = \frac {F_{SRC}}{2 \cdot COEF}

где FSRC – исходная частота от источника XTAL_CLK или RC_CLK.

При COEF=0:

FSYS=FSRCF_{SYS} = F_{SRC}

CMM_MSK

Бит76543210
НазначениеРезервNSWITCH
Начальное значение0

NSWITCH – разрешить прерывание по статусу NSWITCH:

  • 1 – данное прерывание формируется;
  • 0 – данное прерывание не формируется.

Прерывания работают независимо от того, включен генератор или нет

CMM_ST

Бит76543210
НазначениеРезервSWITCHNSWITCH
Начальное значение000

SWITCH – переключение между частотой высокочастотного и низкочастотного RC-генератора:

  • 1 – идет переключение на выбранную частоту;
  • 0 – система работает на выбранной частоте.

NSWITCH – окончание процесса переключения частоты тактирования:

  • 1 – процесс переключения частоты тактирования окончен;
  • 0 – процесс переключения не окончен или не начинался.