3. Система (System) 3.1. Отображение памяти 3.10. Контроллер термодатчика 3.11. Подключение периферийной системы PSI 3.12. Модуль управления памятью ввода-вывода IOMMU 3.13. Часы реального времени RTC 3.2. Конфигурация CPUX 3.3. Контроллер синхрогенератора 3.5. Конфигурация системы 3.6. Таймер 3.8. Универсальный контроллер прерываний Глава 3. Система - System Раздел 3.6. Таймер - Timer 3.6. Таймер3.6.1. ОбзорМодуль таймера реализует функции хронирования и подсчета. Модуль таймера включает в себя timer0, timer1, сторожевой таймер и AVS0, AVS1. Таймер 0 и таймер 1 полностью согласованы. Таймер 0 и таймер 1 имеют следующие особенности: Сторожевой таймер используется для передачи сигнала сброса для сброса всей системы после возникновения исключения в системе. Сторожевой таймер имеет следующие особенности: AVS используется для синхронизации аудио и видео. Модуль AVS включает AVS0 и AVS1, AVS0 и AVS1 полностью согласованы. AVS имеет следующие особенности: 3.6.2. Блок-схемаРисунок 3-12. Блок-схема таймера. 3.6.3. Операции и функциональные описания3.6.3.1 Формула таймераНа примере Timer0.
3.6.3.2 Типичное применениеРисунок 3-13. Схема применения таймера. 3.6.3.3 Выполнение функций1. Таймер Таймер представляет собой 32-битный обратный счетчик, значение счетчика уменьшается на 1 на каждом переднем фронте счетчика. Каждый таймер имеет независимое прерывание. Таймер имеет два режима работы.Бит 7 TMRn_CTRL_REG установлен в непрерывный режим, когда значение счетчика уменьшается до 0, модуль таймера перезагружает данные из TMRn_INTV_VALUE_REG, а затем продолжает счет. Бит 7 TMRn_CTRL_REG устанавливается в одиночный режим, когда значение счетчика уменьшается до 0, таймер прекращает счет. Таймер снова начинает отсчет только после загрузки нового начального значения. Каждый таймер имеет предварительный делитель, который делит рабочую тактовую частоту каждого таймера на 1,2,4,8,16,32,64,128. 2. Сторожевой таймер Сторожевой таймер представляет собой 32-битный счетчик с обратным отсчетом, значение счетчика уменьшается на 1 на каждом фронте тактовой частоты счета. Сторожевой таймер имеет два режима работы.WDOG0_CFG_REG устанавливается в 0x2, когда значение счетчика достигает 0 и WDOG0_IRQ_EN_REG включен, сторожевой таймер генерирует прерывание, сторожевой таймер переходит в режим прерывания. WDOG0_CFG_REG установлен в 0x1, когда значение счетчика достигает 0, сторожевой таймер генерирует сигнал сброса для сброса всей системы. Источником синхронизации сторожевого таймера является OSC24M / 750. Имеется 12 настраиваемых начальных значений счета. Сторожевой таймер может перезапустить для подсчета, установив WDOG0_CTRL_REG: записать 0xA57 в бит [12: 1], затем записать 1 в бит [0]. 3. AVS AVS - это 33-битный суммирующий счетчик. Значение счетчика увеличивается на 1 с каждым нарастающим фронтом счетчика. AVS может работать после открытия его тактового строба в модуле CCU. AVS имеет источник синхронизации OSC24M и 12-битный коэффициент деления (N1 или N2). Когда таймер увеличивается до N1 или N2 с 0, счетчик AVS добавляет 1; когда счетчик достигнет 33-битного верхнего предела, AVS снова начнет отсчет с начального значения. В процессе работы счетчика коэффициент деления и начальный счетчик AVS можно изменить в любое время. И AVS может в любой момент остановить или запустить счетчик.3.6.3.4 Рабочий режим1. Таймер начальный 2. Таймер прерывания 3. Watchdog Initial 4. Сторожевое прерывание Прерывание сторожевого таймера используется только для счетчика.5. AVS Старт / Пауза (1) Напишите AVS_CNT_DIV_REG, чтобы настроить коэффициент деления. (2) Запишите AVS_CNT_REG, чтобы настроить начальное значение счетчика. (3) Запишите AVS_CNT_CTL_REG, чтобы включить счетчик AVS. Счетчик AVS можно приостановить в любой момент.3.6.4. Рекомендации по программированию3.6.4.1. ТаймерВозьмем для примера задержку в 1 мс, в данном случае будут выбраны источник тактовой частоты 24M, одиночный режим и 2 предварительных шкалы. 3.6.4.2 Сброс сторожевого таймераВ следующем примере выполняются конфигурации для Watchdog: настройте источник синхронизации как 24M / 750, настройте значение интервала как 1s и настройте конфигурацию Watchdog как для всей системы. Этот пример указывает на то, что система сбросила через 1 с. Writel (0x1, WDOG_CONFIG); // Для всей системы Writel (0x10, WDOG_MODE); // Значение интервала устанавливается 1 с writel(readl(WDOG_MODE)|(1 << 0), WDOG_MODE); //Enable Watchdog3.6.4.3 Перезапуск сторожевого таймераВ следующем примере выполняются конфигурации для Watchdog: настройте источник синхронизации как 24M / 750, настройте значение интервала как 1s и настройте конфигурацию Watchdog как для всей системы. В следующем случае, если время других кодов больше 1 с, сторожевой таймер сбросит всю систему. Если предложение о перезапуске сторожевого таймера реализовано внутри 1 с, сторожевой таймер будет перезапущен. ---- другие коды --- |