Вы здесь: Главная » Использование системы тактирования микроконтроллеров XMEGA

Использование системы тактирования микроконтроллеров XMEGA

Обзор системы тактирования

Система тактирования микроконтроллеров XMEGA обеспечивает широкий набор внешних и внутренних источников тактового сигнала. Кроме того, встроенный модуль PLL может быть использован для умножения частоты выбранного источника с коэффициентом от 1 до 31.

В целях упрощения реализации, по умолчанию микроконтроллеры XMEGA при старте тактируются от внутреннего генератора частотой 2 МГц, откалиброванного на фабрике при изготовлении. Таким образом, если настроек по умолчанию достаточно, для старта выполнения кода не требуется никаких внешних компонентов или программного конфигурирования.

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

2.1 Внутренние источники тактового сигнала

Микроконтроллеры XMEGA имеют пять встроенных источников тактовых импульсов (включая PLL), начиная с ультра экономичного RC-генератора частотой 32 кГц и заканчивая кольцевым генератором частотой 32 МГц, откалиброванного на фабрике при изготовлении и имеющего опцию автоматической калибровки. Все источники, кроме одного, могут быть использованы в качестве основного тактового генератора.

В любой момент времени можно включить любое количество внутренних генераторов, даже если ни один из них не будет использоваться в качестве основного. Кроме того, возможно использование некоторых источников тактового сигнала сразу для нескольких целей. Например, RC-генератор частотой 32 кГц может быть использован одновременно и как основной источник тактового сигнала, и как источник тактового сигнала для модуля таймера реального времени.

Некоторые из внутренних источников тактового сигнала могут служить в качестве источника сигнала для встроенного модуля PLL, что позволяет получить более высокие частоты тактирования. Подробнее модуль PLL рассматривается в разделе 2.3.

2.1.1 RC-генератор частотой 32 кГц с ультра низким энергопотреблением

RC-генератор частотой 32 кГц с ультра низким энергопотреблением (ULP32K) как правило используется для системных целей, таких как тактирование сторожевого таймера, формирование задержки при старте и других временных интервалов. Он может использоваться как модуль реального времени, но он не может быть использован в качестве основного источника тактового сигнала. При точности частоты этого генератора 30% он просто не предназначен для работы в качестве основного источника тактового сигнала.

Генератор ULP может быть использован в качестве источника тактовых импульсов для модуля счетчика реального времени. Более подробные сведения об этом смотрите в статье «AVR1314: Использование счетчика реального времени в микроконтроллерах XMEGA».

Генератор ULP включается автоматически аппаратно, когда в нем возникает необходимость.

2.1.2 Калиброванный RC-генератор частотой 32 кГц

RC-генератор частотой 32,768 кГц (RC32K) откалиброван при изготовлении на фабрике с точностью 1% при напряжении питания 3 В и температуре окружающей среды 25 °C. Калибровочное значение хранится в калибровочной строке и автоматически загружается в калибровочный регистр генератора (RC32KCAL) во время сброса микроконтроллера. Это значение доступно пользователю как на чтение, так и на запись, однако не стоит устанавливать это значение вне рекомендуемых ограничений. Для более полной информации по этому вопросу обратитесь к технической документации на микроконтроллер (раздел «электрические характеристики»).

Генератор RC32K может использоваться в качестве источника системной тактовой частоты. А так же он может быть использован как источник для модуля таймера реального времени (на самом деле, частота генератора RC32K при таком использовании делится (снижается) до 1,024 кГц). Более подробные сведения об этом смотрите в статье «Использование счетчика реального времени в микроконтроллерах XMEGA».

Генератор RC32K не может использоваться в качестве источника для внутреннего узла PLL.

Помимо уже рассмотренного, генератор RC32K так же может быть использован в качестве опорного для функции автоматической калибровки внутренних генераторов частотой 2 МГц и 32 МГц.

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

Управление внутренним RC-генератором частотой 32,768 кГц осуществляется с помощью бита включения генератора RC32KEN регистра OSC.CTRL. До того, как начать использовать этот генератор в качестве источника системной тактовой частоты, необходимо проверить бит готовности RC-генератора частотой 32,768 кГц RC32KRDY регистра OSC.STATUS.

2.1.3 Калиброванный RC-генератор частотой 2 МГц

Встроенный RC-генератор частотой 2 МГц (RC2M) откалиброван при изготовлении на фабрике с точностью 1% при напряжении питания 3 В и температуре окружающей среды 25 °C. Калибровочное значение хранится в калибровочной строке и автоматически загружается в калибровочный регистр генератора во время сброса микроконтроллера. В дальнейшем генератор может быть настроен и откалиброван с помощью функции автоматической калибровки, описанной в разделе 2.8.

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

Управление внутренним RC-генератором частотой 2 МГц осуществляется с помощью бита включения генератора RC2MEN регистра OSC.CTRL. До того, как начать использовать этот генератор в качестве источника системной тактовой частоты, необходимо проверить бит готовности RC-генератора частотой 2 МГц RC2MRDY регистра OSC.STATUS.

2.1.4 Калиброванный кольцевой генератор частотой 32 МГц

Встроенный кольцевой генератор частотой 32 МГц (R32M) откалиброван при изготовлении на фабрике с точностью 1% при напряжении питания 3 В и температуре окружающей среды 25 °C. Калибровочное значение хранится в калибровочной строке и автоматически загружается в калибровочный регистр генератора во время сброса микроконтроллера. В дальнейшем генератор может быть настроен и откалиброван с помощью функции автоматической калибровки, описанной в разделе 2.8.

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

Управление внутренним кольцевым генератором частотой 32 МГц осуществляется с помощью бита включения генератора R32MEN регистра OSC.CTRL. До того, как начать использовать этот генератор в качестве источника системной тактовой частоты, необходимо проверить бит готовности кольцевого генератора частотой 32 МГц R32MRDY регистра OSC.STATUS.

2.2 Внешние источники тактового сигнала

Для микроконтроллеров XMEGA существует несколько возможных внешних источников тактового сигнала. Все они используют выводы XTAL1 и XTAL2. По этой причине только один внешний источник тактового сигнала может быть активен в единицу времени. Аппаратная реализация системы тактирования исключает возможность одновременной активации двух внешних источников тактового сигнала. Попытки активировать более одного внешнего источника тактового сигнала будут проигнорированы оборудованием.

Исключением из этого является генератор для модуля счетчика реального времени, который использует для подключения внешнего часового кварцевого резонатора выводы TOSC1 и TOSC2. Генератор счетчика реального времени так же может быть использован непосредственно в качестве источника системного тактового сигнала. Но использовать для этих целей сигнал частотой 1 кГц (после предварительного делителя) не получится, так как он идет непосредственно в модуль счетчика реального времени.

2.2.1 Кварцевый резонатор

Выводы микроконтроллера XTAL1 и XTAL2 являются соответственно входом и выходом инвертирующего усилителя, который служит в качестве интегрированного генератора, использующего внешний кварцевый резонатор с резонансной частотой от 0,4 МГц до 16 МГц. Этот генератор может быть настроен на один из следующих режимов:

  • 32,768 кГц часовой кварцевый генератор с низким энергопотреблением
  • 0,4 – 2 МГц кварцевый генератор с низкой амплитудой
  • 2 – 9 МГц кварцевый генератор с низкой амплитудой
  • 9 – 12 МГц кварцевый генератор с низкой амплитудой
  • 12 – 16 МГц кварцевый генератор с низкой амплитудой

Фактически, данный генератор реализован в виде двух отдельных кварцевых генераторов: один для кварцевых резонаторов с частотой 32,768 кГц, а второй для высокочастотных кварцевых резонаторов.

При использовании внешнего часового кварцевого резонатора на частоту 32 кГц кварцевый генератор позволяет активировать энергосберегающий режим с помощью бита X32KLPM регистра управления внешним генератором (OSC.XOSCCTRL). Этот режим доступен только при использовании часового кварцевого резонатора с частотой 32 кГц, причем должны быть использованы кварцевые резонаторы высокого качества.

Битовое поле Выбора Внешнего Генератора (XOSCSEL) регистра Управления Внешним Генератором (OSC.XOSCCTRL) выбирает тип внешнего генератора и время запуска.

Бит Включения Внешнего Генератора (XOSCEN) регистра Управления Генератором (OSC.CTRL) управляет этим генератором. Бит Готовности Внешнего Генератора (XOSCRDY) регистра Состояния Генератора (OSC.STATUS) предназначен для контроля устойчивости работы и готовности внешнего генератора перед тем, как сделать его источником системного тактового сигнала.

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

Схема подключения внешнего кварцевого резонатора показана на рисунке 2-1. Рекомендуемые значения конденсаторов приведены в таблице ниже.

Рисунок 2-1. Схема подключения внешнего резонатора

Схема подключения внешнего резонатора XMEGA

Таблица 2-1. Рекомендуемые значения конденсаторов

Диапазон частот Емкость конденсаторов (C1 и C2)
0,4 – 2 МГц 100 пФ
2 – 9 МГц 15 пФ
9 – 12 МГц 15 пФ
12 – 16 МГц 10 пФ

Обратите внимание на то, что кварцевый генератор генерирует сигнал с низкой амплитудой. Из этого следует, что выводы XTAL не могут быть использованы для обеспечения тактовым сигналом других устройств. Для этого можно использовать один из модулей таймера/счетчика. Более подробные сведения Вы можете найти в документе «AVR1306: Использование таймеров/счетчиков в микроконтроллерах XMEGA».

2.2.2 Внешний генератор

Если конструкция оборудования обеспечивает внешний источник тактового сигнала, Вы можете подвести его к выводу XTAL1, а встроенный в микроконтроллер кварцевый генератор можете отключить. Внешний тактовый сигнал — это один из возможных вариантов при выборе источника тактового сигнала с помощью битового поля XOSCSEL регистра управления внешним генератором OSC.XOSCCTRL.

На рисунке 2-2 показана схема подключения внешнего генератора. Для стабильной работы микроконтроллера тактовая частота не должна изменяться более чем на 2% между двумя соседними тактами. Если требуется изменить частоту более кардинально, микроконтроллер XMEGA следует сначала перевести в состояние сброса.

Рисунок 2-2. Подключение внешнего генератора

Подключение внешнего генератора XMEGA

2.3 Высокочастотный модуль PLL

Для получения высоких частот можно использовать встроенный модуль PLL, который позволяет умножить частоту источника на коэффициент в диапазоне от 1 до 31. В качестве источника тактового сигнала для узла PLL могут выступать следующие источники:

  • Внутренний RC- генератор частотой 2 МГц.
  • Внутренний кольцевой генератор частотой 32 МГц с настроенным делителем на четыре.
  • Внешний кварцевый генератор частотой от 0,4 МГц до 16 МГц.
  • Внешний генератор

Оборудование не позволяет использовать внешний генератор в качестве источника сигнала для PLL, если он настроен на работу с частотой 32 кГц. Если в качестве входного сигнала используется внешний генератор, он должен генерировать сигнал частотой выше 0,4 МГц. Для уточнения минимального значения частоты обратитесь к разделу с электрическими характеристиками в документации на используемый микроконтроллер.

Процедура корректного включения PLL выглядит следующим образом:

  1. Выбрать коэффициент умножения, используя битовое поле «Коэффициент Умножения» (PLLFAC), и источник входного тактового сигнала, используя битовое поле «Источник Тактового сигнала» (PLLSRC) регистра управления узлом PLL (OSC.PLLCTRL).
  2. Активировать PLL используя бит включения PLL (PLLEN) регистра Управления генератором (OSC.CTRL).
  3. Дождаться стабильной работы узла PLL. Это можно сделать путем проверки бита Готовности PLL (PLLRDY) регистра Состояния Генератора (OSC.STATUS).

Прежде чем включить PLL, пользователь обязательно должен убедиться в том, что источник входного тактового сигнала работает стабильно. Для стабилизации работы модуля PLL обычно требуется 64 цикла.

Изменение настроек узла PLL невозможно без предварительной его остановки. Все попытки изменения настроек активированного узла PLL будут игнорироваться оборудованием.

Пользователь несет ответственность за обеспечение минимальной тактовой частоты на входе узла PLL не менее 0,4 МГц. Кроме того, частота входного сигнала никогда не должна превышать 200 МГц. Требование минимального порога частоты входного сигнала применимо при использовании внешнего тактового сигнала.

2.4 Выбор источника системного тактового сигнала и настройка предварительного делителя

Система тактирования микроконтроллеров XMEGA содержит в своем составе мультиплексор, который позволяет выбрать источник тактового сигнала или узел PLL. Прежде, чем тактовый сигнал поступит на центральный процессор и периферийные устройства, он проходит через предварительный делитель, который может быть настроен на деление тактовой частоты с коэффициентом от 1 до 2048. Так же система тактирования может обеспечивать периферийные устройства тактовым сигналом частотой, превышающей в двое или в четверо частоту тактового сигнала процессора. Примером такого периферийного устройства является модуль EBI, который способен работать с частотой тактового сигнала вдвое превышающей частоту тактового сигнала центрального процессора.

Рисунок 2-3 схематично иллюстрирует мультиплексор и предварительный делитель. Сигнал с выхода мультиплексора проходит три стадии предварительного делителя. На первом этапе делитель частоты может быть настроен на коэффициент деления от 1 до 512. Предварительные делители B и C могут быть настроены на прохождение сигнала на прямую, или на деление частоты с суммарным коэффициентом до четырех. Ограничение на суммарный коэффициент деления можно уточнить в документации на микроконтроллер. С выхода предварительного делителя C сигнал направляется на центральный процессор и периферийные устройства.

Рисунок 2-3. Мультиплексор и предварительный делитель

Мультиплексор и предварительный делитель XMEGA

По умолчанию, после сброса микроконтроллера, в качестве источника системного тактового сигнала выбирается внутренний RC-генератор частотой 2 МГц. При этом тактовый сигнал не делится ни одним из предварительных делителей. Предварительный делитель A используется для снижения системной тактовой частоты с целью снижения энергопотребления. Предварительные делители B и C используются, как правило, для обеспечения периферийных устройств тактовыми сигналами с частотой, вдвое и в четверо превышающей частоту тактового сигнала центрального процессора.

Настройки предварительного делителя могут быть безопасно изменены в любое время. Аппаратура будет корректно переключаться на другую частоту. При этом аппаратура при изменении источника тактового сигнала будет игнорировать попытки переключения на нестабильные источники.

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

  1. Загрузить сигнатуру защиты регистров ввода/вывода (значение 0xD8) в регистр защиты изменения конфигурации (CCP). Это приведет к автоматическому отключению всех прерываний в течении следующих четырех тактов.
  2. Теперь можно задать новые настройки для предварительного делителя или изменить источник системного тактового сигнала.

Обратите внимание на то, что запись сигнатуры в регистр CCP всего лишь дает время для перенастройки предварительного делителя или изменения источника системного тактового сигнала. Все действия по перенастройке системы тактирования следует выполнить в течении следующих четырех тактов. Если потребуется повторная настройка системы тактирования, запись сигнатуры в регистр CCP необходимо повторить. Для получения дополнительных сведений об этом изучите исходный код, прилагаемый к статье.

2.5 Фиксирование настроек системы тактирования

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

Процедура фиксации настроек системы тактирования выглядит следующим образом:

  1. Установить требуемую конфигурацию системы тактирования.
  2. Загрузить сигнатуру защиты регистров ввода/вывода (значение 0xD8) в регистр защиты изменения конфигурации (CCP). Это приведет к автоматическому отключению всех прерываний в течении следующих четырех тактов.
  3. Установить бит Фиксирования Конфигурации Системы Тактирования (LOCK) регистра Фиксирования Системного Тактового Сигнала (CLK.LOCK) в логическую единицу.
  4. Теперь конфигурация системы тактирования зафиксирована до следующего сброса микроконтроллера.

Если активирован детектор пропадания внешнего тактового сигнала, при пропадании тактового сигнала фиксирование настроек системы тактирования отменяется. Более подробно этот вопрос рассмотрен далее в главе 2.7.

2.6 Режимы сна и источники тактового сигнала

В режимах Power-down и Power-save все генераторы тактового сигнала отключены. Исключением является модуль счетчика реального времени, который продолжает работать в режиме Power-save. В случаях, когда не используется счетчик реального времени, режим Power-down более предпочтителен, чем режим Power-save. При выходе микроконтроллера из этих режимов возникает задержка, связанная с запуском генераторов тактового сигнала.

В режиме ожидания (Standby) и в расширенном режиме ожидания (Extended Standby) генераторы продолжают работать, а центральный процессор выходит из этих режимов без длительных задержек.

В режиме простоя (Idle) все генераторы продолжают работать. Поэтому центральный процессор «просыпается» мгновенно, без каких либо задержек.

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

2.7 Детектор пропадания внешнего тактового сигнала

При использовании внешнего кварцевого резонатора или внешнего генератора всегда существует небольшая вероятность отказа источника тактового сигнала. В качестве меры предосторожности, система тактирования микроконтроллеров XMEGA имеет детектор отказа внешнего генератора, который контролирует внешний источник тактового сигнала и реагирует, если он вдруг остановится.

Если в качестве основного источника системного тактового сигнала выбран внешний источник и он откажет, детектор отказа переключит мультиплексор системы тактироания на внутренний RC-генератор частотой 2 МГц и сгенерирует немаскируемое прерывание (NMI). Для получения более подробной информации о NMI обратитесь к статье по применению «AVR1305: Прерывания и программируемый многоуровневый контроллер прерываний микроконтроллеров XMEGA».

Если внешний источник используется, но не выбран в качестве основного источника системного тактового сигнала, детектор отказа отключит внешний источник и, как и в предыдущем случае, сгенерирует NMI.

Детектор отказа использует ULP генератор для мониторинга внешнего источника, и реагирует, если его частота падает ниже 32 кГц. Следует отметить, что точность ULP составляет 30%, так что есть возможность запустить микроконтроллер на частоте ниже 32 кГц, но это делать не рекомендуется. Работа на частоте 32 кГц и выше гарантированно не спровоцирует срабатывание детектора.

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

  1. Загрузить сигнатуру защиты регистров ввода/вывода (значение 0xD8) в регистр защиты изменения конфигурации (CCP). Это приведет к автоматическому отключению всех прерываний в течении следующих четырех тактов.
  2. Установить бит Включения Детектора Отказа (XOSCFDEN) в регистре Детектора Отказа Внешнего Источника (OSC.XOSCFAIL) в логическую единицу.
  3. Теперь детектор отказа активен до следующего сброса системы.

Поскольку детектор отказа генерирует немаскируемое прерывание, реализация обработчика прерывания для этого прерывания обязательна. Немаскируемые прерывания не могут быть отключены ни в каком случае, отсюда и название "Немаскируемое". Пожалуйста, ознакомьтесь с примером программы, приложенной к этой статье.

2.8 Автоматическая калибровка внутренних генераторов в процессе работы

Система тактирования микроконтроллеров XMEGA обеспечивает два цифровых модуля автоподстройки частоты (DFLLs), один для внутреннего RC-генератора частотой 2 МГц, и один для внутреннего кольцевого генератора частотой 32 МГц. DFLLs может быть настроен на использование в качестве источника эталонной частоты для калибровки либо внутреннего RC-генератора частотой 32 кГц, либо внешнего часового кварцевого резонатора частотой 32 кГц.

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

При отключении DFLL текущее значение калибровки генератора останется в силе до следующего включения DFLL и последующего процесса калибровки.

Регистр Управления DFLL (OSC.DFLLCTRL) содержит два управляющих бита (R32MCREF и RC2MCREF), которые позволяют выбрать источники опорного тактового сигнала для модулей автоподстройки. Логический ноль выбирает внутренний RC-генератор частотой 32 кГц. Логическая единица выбирает генератор с внешним часовым кварцевым резонатором. Аппаратно реализовано игнорирование попыток использования нестабильных источников тактового сигнала.

Модули автоподстройки частоты сами нуждаются в трех-байтных эталонных значениях счетчиков, загруженных в соответствующие регистры Счетчиков DFLL (OSC.DFLLx.OSCCNTn). Правильные эталонные значения счетчиков автоматически загружаются при сбросе и не должны изменяться пользователем.

Так же каждый модуль автоподстройки имеет двух-байтный калибровочный регистр (OSC.DFLLx.CALn), которые содержат бит активации соответствующего модуля и калибровочное значение, которое загружается при сбросе микроконтроллера. Калибровочное значение служит стартовым значением в калибровочном цикле, и оно не должно изменятся пользователем.

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

  1. С помощью управляющего бита модулей автоподстройки регистра управления модулями автоподстройки (OSC.DFLLCTRL) выбрать внутренний или внешний источник тактового сигнала.
  2. Включить модуль автоподстройки частоты установкой бита ENABLE регистра DFLLx.CTRL в логическую единицу.
  3. Процесс калибровки начнется немедленно.

Для внутреннего RC-генератора опция автоматической калибровки отсутствует. Но, при необходимости, он может быть настроен более точно с помощью калибровочного регистра (RC32KCAL). Однако, обратите пристальное внимание на то, чтобы не допускать настройку любого генератора на значения, выходящие за рамки допустимых.

3 Примеры

Эта статья по применению включает в себя архив с исходным кодом базового драйвера системы тактирования, реализованного на языке C. Код написан для компилятора IAR Embedded Workbench®.

Обратите внимание на то, что представленный здесь драйвер системы тактирования не предназначен для использования совместно с высокопроизводительным кодом. Он выполнен в виде библиотеки и предназначен для быстрого старта работы с системой тактирования микроконтроллеров XMEGA. В приложениях, в которых критично время выполнения и размер кода, Вы должны работать непосредственно с регистрами системы тактирования. Для получения более подробной информации Вам следует обратиться к исходному коду драйвера.

3.1 Файлы

Архив с исходным кодом содержит три файла:

  1. clksys_driver.c — Исходный код драйвера системы тактирования.
  2. clksys_driver.h — Заголовочный файл драйвера системы тактирования.
  3. main.c — Пример программы, использующей драйвер.

Подробное описание интерфейсных функций представленного здесь драйвера и примеры использования Вы найдете в документации к исходному коду.