Регистры CLKPR и OSCCAL

Микроконтроллеры / Для начинающих / Архитектура /

Микроконтроллеры для начинающих Что нужно для того, чтобы стать профессиональным разработчиком программ для микроконтроллеров и выйти на такой уровень мастерства, который позволит с лёгкостью найти и устроиться на работу с высокой зарплатой (средняя зарплата программиста микроконтроллеров по России на начало 2017 года составляет 80 000 рублей). Подробнее...

OSCCAL – Oscillator Calibration Register (регистр калибровки генератора тактовой частоты)

Регистр OSCCAL

  • Бит 7 - Res: Зарезервирован.
  • Биты 6...0 - CAL[6:0]: значение калибровки генератора.

Запись калибровочного байта в этот адрес (в биты 6...0) приведет к подстройке внутреннего генератора, чтобы устранить неравномерности из частоты генератора. Это делается автоматически во время сброса микроконтроллера.

Если регистр OSCCAL равен нулю, выбирается самая низкая доступная частота. Запись ненулевых значений в этот регистр приведет к увеличению частоты внутреннего генератора. Запись 0x7F в регистр дает самую высокую доступную частоту.

Откалиброванный генератор используется для определения времени доступа к EEPROM и Flash. Если EEPROM или Flash уже записаны (содержат данные), то не калибруйте генератор до более чем на 10% выше номинальной частоты. В противном случае запись EEPROM или Flash может завершиться ошибкой. Обратите внимание, что генератор предназначен для калибровки на 9,6 МГц или на 4,8 МГц. Настройка на другие значения не гарантируется, как указано в таблице 6-7 ниже.

Таблица 6-7. Диапазон частот внутреннего RC-генератора.

Значение OSCCAL Типовая самая низкая частота по отношению к номинальной частоте Типовая самая высокая частота по отношению к номинальной частоте
0х00 50% 100%
0х3F 75% 150%
0x7F 100% 200%

Для обеспечения устойчивой работы микроконтроллера калибровочное значение следует изменять небольшими шагами. Изменение частоты более чем на 2% от одного цикла к следующему может привести к непредсказуемому поведению. Изменения в регистре OSCCAL не должны превышать 0x20 для каждой калибровки. Это необходимо для того, чтобы микроконтроллер сохранялся в сбросе во время таких изменений тактовой частоты.

CLKPR - Clock Prescale Register (делитель частоты)

Регистр CLKPR

  • Бит 7 – CLKPCE: Включение изменения делителя частоты. В бит CLKPCE должна быть записана логическая единица, чтобы включить изменение битов CLKPS. Бит CLKPCE обновляется только тогда, когда другие биты в CLKPR одновременно записываются в ноль. CLKPCE очищается аппаратными средствами через четыре такта после его записи или при записи битов CLKPS. Перезапись бита CLKPCE в течение этого периода ожидания не продлевает период ожидания и не очищает бит CLKPCE.
  • Биты 6...4: Зарезервированы. Эти биты зарезервированы в ATtiny13A и всегда равны нулю.
  • Биты 3...0 - CLKPS[3:0]: Биты установки делителя частоты. Эти биты определяют коэффициент деления между выбранным источником синхронизации и внутренними системными часами. Эти биты могут быть записаны во время выполнения для изменения тактовой частоты в соответствии с требованиями приложения. Поскольку делитель делит главный тактовый вход микроконтроллера, скорость всех синхронных периферийных устройств уменьшается при использовании коэффициента деления. Коэффициенты деления приведены в таблице 6-8.

Таблица 6-8. Выбор делителя частоты.

CLKPS3 CLKPS2 CLKPS1 CLKPS0 Делитель
0 0 0 0 1
0 0 0 1 2
0 0 1 0 4
0 0 1 1 8
0 1 0 0 16
0 1 0 1 32
0 1 1 0 64
0 1 1 1 128
1 0 0 0 256
1 0 0 1 Резерв
1 0 1 0 Резерв
1 0 1 1 Резерв
1 1 0 0 Резерв
1 1 0 1 Резерв
1 1 1 0 Резерв
1 1 1 1 Резерв

Чтобы избежать непреднамеренных изменений тактовой частоты, необходимо выполнить специальную процедуру записи для изменения битов CLKPS:

  1. Записать бит Clock Prescaler Change Enable (CLKPCE) в единицу, а все остальные биты в CLKPR - в ноль.
  2. В течение четырех тактов записать желаемое значение в CLKPS, а в CLKPCE записать ноль.

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

Конфигурационный бит CKDIV8 определяет начальное значение битов CLKPS. Если CKDIV8 не запрограммирован, то биты CLKPS будут сброшены в “0000”. Если CKDIV8 запрограммирован, то биты CLKPS устанавливаются в "0011", давая коэффициент деления 8 при запуске.

Эта функция должна использоваться, если выбранный источник тактовой частоты имеет более высокую частоту, чем наибольшая допустимая частота устройства в текущих условиях использования.

Обратите внимание, что любое значение может быть записано в биты CLKPS независимо от настройки конфигурационного бита (fuse-бита) CKDIV8.

Прикладное программное обеспечение должно гарантировать, что выбран достаточный коэффициент деления, если выбранный источник тактовой частоты имеет более высокую частоту, чем наибольшая допустимая частота устройства в текущих условиях использования. Устройство поставляется с запрограммированным fuse-битом CKDIV8.

См. также Делитель тактовой частоты.


Вступить в группу "Основы программирования"

Подписаться на RUTUBE-канал

Подписаться на Дзен-канал

Подписаться на рассылки по программированию

Микроконтроллеры для ЧАЙНИКОВ Микроконтроллеры для ЧАЙНИКОВ

Бесплатная рассылка о микроконтроллерах. Рассылка содержит как бесплатную информацию для начинающих, так и ссылки на платные продукты (книги, видеокурсы и др.) для тех, кто захочет вникнуть в тему более глубоко. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su