Немного теории
Согласно документации на микроконтроллеры Atmel серии SAMD20/21 система тактирования состоит из следующих блоков:
- блок источника сигнала (управляется SYSCTRL)
- Источником синхронизации являются базовые часы в системе.
Это может быть, например, внутренний генератор 8 МГц (OSC8M), внешний генератор (XOSC), цифровая система фазовой автоподстройки частоты (DFLL48M);
- Источником синхронизации являются базовые часы в системе.
- базовый тактовый контроллер (GLCK-generic clock Controller), который управляет системой распределения тактовых импульсов и состоит из:
- Генераторы базовой частоты (Generic Clock Generator) — это программируемый прескалер, к которому можно подключить любой источник сигнала.
С выхода генератора 0 (GCLKGEN[0], GCLK_MAIN) сигнал поступает на Power Manager, который формирует основной тактовый сигнал;
- Базовые тактовые сигналы (Generic Clocks) — обычно это сигналы, синхронизирующие периферийные устройства.
Базовые тактовые сигналы с помощью базовых мультиплексоров сигналов могут использовать любые тактовые сигналы, доступные в системе.
Разные периферийные устройства могут использовать разные тактовые сигналы.
Выход мультиплексора 0 используется в качестве источника опорного сигнала для цифровой системы фазовой автоподстройки частоты.
Обратите внимание, что в таком случае выходной сигнал DFLL не должен использоваться в качестве опорного сигнала для генератора, выход которого используется в качестве опорного сигнала для мультиплексора 0.
- Генераторы базовой частоты (Generic Clock Generator) — это программируемый прескалер, к которому можно подключить любой источник сигнала.
- блок управления питанием (PM – Power Manager)
- Блок управления питанием управляет синхронизацией системы.
Сюда входят ЦП, шины (APB, AHB) и синхронная (с точки зрения ЦП) периферия.
Он содержит маски тактовой частоты, которые можно использовать для включения или отключения периферийного пользовательского интерфейса, а также делители тактовых сигналов процессора и шины.
- Блок управления питанием управляет синхронизацией системы.
- синхронно от Power Manager (обеспечивает работу периферии с ЦП по шине APB/AHB);
- асинхронный от GCLK (обеспечивает работу «ядра» периферии).
И даже если частоты и источники сигнала одинаковы, синхронизация все равно происходит. Все регистры, работающие на той же частоте и источнике, что и шины, не требуют синхронизации.
Все регистры ядра требуют синхронизации при записи, а некоторые — при чтении.
Процесс синхронизации обозначается битом SYNCBUSY в регистре состояния или прерыванием.
Таким образом, теоретически для настройки тактовых сигналов необходимо:
- Выберите базовый источник (или несколько) опорного тактового сигнала: это может быть внешний генератор, внутренний и т. д. (блок SYSCTRL)
- Настройте прескалер и мультиплексор для каждого из основных сигналов (блок GCLK).
- Выберите основной тактовый сигнал (выход генератора 0).
- Настройте периферийные часы (общие часы).
В частности:
- Опорный тактовый сигнал для DFLL может быть:
- минимальное значение: 0,732 кГц
- типичное значение: 32,768 кГц
- максимальное значение: 35,1 кГц
- Выходной сигнал DFLL: от 47 до 49 МГц
- Внешний генератор должен быть: не более 32 МГц.
Как работает код А.
С.
Ф.
Мы не будем вдаваться в подробности всей библиотеки, об этом вы можете прочитать в статье про А.
С.
Ф.
.
Рассмотрим только то, что касается тактирования.
При создании проекта в Atmel Studio создается файл main.c , который уже содержит system_init() .
Прототип этой функции находится в файле src/asf/sam0/system/system.c :
Теги: #Atmel #samd20 #samd21 #cortex #cortex-m0 #cortex-m0 #atmel Arm #DFLL48M #Программирование микроконтроллеров/** * \brief Initialize system. * * This function will call the various initialization functions within the * system namespace. If a given optional system module is not available, the * associated call will effectively be a NOP (No Operation).
* * Currently the following initialization functions are supported: * - System clock initialization (via the SYSTEM CLOCK sub-module) * - Board hardware initialization (via the Board module) * - Event system driver initialization (via the EVSYS module) * - External Interrupt driver initialization (via the EXTINT module) */ void system_init(void) {
-
Анализ Спама Ваших Аккаунтов В Exim
19 Oct, 24 -
У Меня Есть Ты
19 Oct, 24 -
Новый Взгляд На Codeplex
19 Oct, 24