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

Инструменты сайта


doc:doclist:clockchecker

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
doc:doclist:clockchecker [2019/07/11 18:22]
vasco [Пример для HSE1]
doc:doclist:clockchecker [2019/07/17 14:56] (текущий)
katya [Уточнение формулы]
Строка 4: Строка 4:
 {{1986be8t:​clk_checker_scheme.png}} {{1986be8t:​clk_checker_scheme.png}}
  
-Как видно из схемы, блок считает количество импульсов одной частоты между периодами сброса,​ сформированными от второй частоты. Счетчик может считать только до 15-ти, поэтому входные сигналы должны иметь сопоставимые частоты чтобы уложиться в это значение. Для этого входные частоты делятся с помощью делителей. Таким образом блок отслеживает соотношение входных частот.+Как видно из схемы, блок считает количество импульсов одной частоты между периодами сброса,​ сформированными от второй частоты. Счетчик может считать только до 15-ти, поэтому входные сигналы должны иметь сопоставимые частотычтобы уложиться в это значение. Для этого входные частоты делятся с помощью делителей. Таким образом блок отслеживает соотношение входных частот.
  
 Блок контроля частот состоит из схемы контроля снижения частоты и схемы контроля повышения частоты,​ для каждой схемы считается свой коэффициент соотношения частот:​ Блок контроля частот состоит из схемы контроля снижения частоты и схемы контроля повышения частоты,​ для каждой схемы считается свой коэффициент соотношения частот:​
Строка 10: Строка 10:
   * SHIFT_REG1 - для схемы детектирования повышения частоты CLK.   * SHIFT_REG1 - для схемы детектирования повышения частоты CLK.
  
-Это внутренние значения,​ которые постоянно обновляются. Их максимальные значения выводятся в регистр STAT поля MAX_CHK_SHIFT_REG0 и MAX_CHK_SHIFT_REG1 соответственно. Это позволяет понять отклонялась ли частота и на сколько далеко. Кроме этого, для отклонений есть два порога по которым вырабатываются события. Эти события позволяют получить прерывание при выходе частоты из заданного диапазона. Регистры и их поля, используемые для настройки схем, представлены на картинках ниже:+Это внутренние значения,​ которые постоянно обновляются. Их максимальные значения выводятся в регистр STAT поля MAX_CHK_SHIFT_REG0 и MAX_CHK_SHIFT_REG1 соответственно. Это позволяет понятьотклонялась ли частота и насколько далеко. Кроме этого, для отклонений есть два порогапо которым вырабатываются события. Эти события позволяют получить прерывание при выходе частоты из заданного диапазона. Регистры и их поля, используемые для настройки схем, представлены на картинках ниже: 
 + 
 +//(На момент написания статьи формулы в спецификации такие, но вероятно скоро будут уточнены. см. ниже)//
  
 ===Контроль снижения частоты=== ===Контроль снижения частоты===
Строка 24: Строка 26:
   * HSI = 8 МГц, PRES_REG0 = 1, PRES_REG2 = 1   * HSI = 8 МГц, PRES_REG0 = 1, PRES_REG2 = 1
  
-Подставляя значения в формулы с картинок получаем коэффициенты SHIFT_REG0 и SHIFT_REG1 для правильного отношения частот. В спецификации они обозначены К0 и К1:+Подставляя значения в формулы с картинокполучаем коэффициенты SHIFT_REG0 и SHIFT_REG1 для правильного отношения частот. В спецификации они обозначены К0 и К1:
   * HSI/1 = SHIFT_REG0 * CLK/​100, ​ SHIFT_REG0 = 10   * HSI/1 = SHIFT_REG0 * CLK/​100, ​ SHIFT_REG0 = 10
   * CLK/1 = SHIFT_REG1 * HSI/​1, ​ SHIFT_REG1 = 10   * CLK/1 = SHIFT_REG1 * HSI/​1, ​ SHIFT_REG1 = 10
  
-Теперь,​ задав значения BASE_REGx больше значений Кх, настраиваются пороги при которых будут возникать события при отклонении отслеживаемой частоты. Максимальное значение регистров BASE_REGx указано как 15, но на практике при уходе частоты из регистров считывается значение 16 (0х10). Это видимо уже переполнение счетчика.+Теперь,​ задав значения BASE_REGx больше значений Кх, настраиваются порогипри которых будут возникать события при отклонении отслеживаемой частоты. Максимальное значение регистров BASE_REGx указано как 15, но на практике при уходе частоты из регистров считывается значение 16 (0х10). Это видимо уже переполнение счетчика.
  
 =====Уточнение формулы===== =====Уточнение формулы=====
-Счетчик не считает при активном сигнале Reset, а это длительность "​1"​-цы исходного сигнала за которую приходит несколько тактов отслеживаемой частоты. Формулы приведенные ранее учитывают этот момент,​ количество пропущенных за время ресета импульсов учтено в способе задания ​коэффициентов. ​+Счетчик не считает при активном сигнале Reset, а это длительность "​1"​-цы исходного сигналаза которую приходит несколько тактов отслеживаемой частоты. Формулыприведенные ранееучитывают этот момент, ​т.е. ​количество пропущенных за время ресета импульсов ​уже ​учтено в способе задания ​делителей: ​
  
 {{1986be8t:​clkchk_clkgehsi.png}} {{1986be8t:​clkchk_clkgehsi.png}}
  
-Но если период отслеживаемой частоты окажется больше,​ чем длительность "​1"​-цы формирующей сброс, то формулы становятся не точны. Необходимо исключить количество импульсов за ресет, поскольку их там не будет, они "не влезут"​+Ноесли период отслеживаемой частоты окажется больше,​ чем длительность "​1"​-цы формирующей сброс, то формулы становятся не точны. Необходимо исключить количество импульсов за ресет, поскольку их там не будет, они "не влезут"​:
  
 {{1986be8t:​clkchk_clklthsi.png}} {{1986be8t:​clkchk_clklthsi.png}}
  
-//​(Данные картинки представлены в разном масштабе,​ а вся разница состоит в отношении длительности полупериода "​1"​ HSI к импульсам CLK.)//+//​(Данные картинки представлены в разном масштабе,​ а вся разница состоит в отношении длительности полупериода "​1"​ HSI к импульсам CLK. **Делители только прореживают сигнал,​ но не сохраняют скважность в 50%!**)//
  
-В итоге более точные формулы получаются такие:+В итогеболее точные формулы получаются такие:
  
   * При CLK < HSI:   * При CLK < HSI:
Строка 50: Строка 52:
     * K1 = CLK / (PRES_REG3 + 1) * PRES_REG0 / HSI     * K1 = CLK / (PRES_REG3 + 1) * PRES_REG0 / HSI
  
-Как видно, тут просто исключены +1 в соответствующих коэффициентах. Для расчета необходимо выбирать ту пару формул,​ куда ожидается уход частоты CLK. Если ожидается уход частоты CLK ниже частоты HSI, то прескеллеры и значения K0,K1 подбираются по формуле для CLK < HSI. В противном случае используется формула HSI > CLK.+Как видно, тут просто исключены +1 в соответствующих коэффициентах. Для расчета необходимо выбирать ту пару формул,​ куда ожидается уход частоты CLK. Если ожидается уход частоты CLK ниже частоты HSI, то прескеллеры и значения K0,K1 подбираются по формуле для CLK < HSI. В противномслучае используется формула HSI > CLK. Поскольку обычно требуется высокое быстродействие,​ то чаще всего необходимы формулы для CLK < HSI
  
-Возможно более ​точными формулами не стоит заморачиватьсяпоскольку уход частоты как в большую, так и в меньшую ​сторону все-равно фиксируется ​блоком. Просто в одну ​сторону фиксация ​отклонений ​будет больше соответствовать расчетной. Лучше ​всего проверить это эмпирически ​настроить блок на рабочую частоту и посмотреть какие значения отклонений вырабатывает блок при тюнинге частоты. Эти значения ​в регистрах SHIFT_REG0 / SHIFT_REG1 и прописать как уровни для возникновения событий (EVENTs).+Уровни срабатывания событий считаются по этим же формулам, только вместо ​CLK необходимо поставить частоту, при которой ​необходимо получить EVENT. Подобрать ​уровни порогов событий можно и эмпирически. Для этого надо ​настроить блок на рабочую частоту и посмотретькакие значения отклонений вырабатывает блок при тюнинге частоты. Эти значения и следует прописать ​в регистры SHIFT_REG0 / SHIFT_REG1 ​как уровни для возникновения событий (EVENTs).
  
-=====Пример для ​HSE1===== +=====Пример для ​HSE0===== 
-Для проверки работы блока можно использовать подстройку генератора HSI в блоке BKP. Параметра HSI_Trim позволяет подстроить частоту внутреннего RC-генератора HSI. Ниже приведены скриншоты того, как меняются отклонения SHIFT_REG0 и SHIFT_REG1 при среднем значении HSI_Trim, минимальном и максимальном. В качестве CLK используется сигнал от HSE1на который можно подключить внешний генератор ​на отладочной плате ​1986ВЕ8Т. Но генератора у нас не было, поэтому картинки только при тюнинге ​HSI.+Для проверки работы блока можно использовать подстройку генератора HSI в блоке BKP. Параметра HSI_Trim позволяет подстроить частоту внутреннего RC-генератора HSI. Ниже приведены скриншоты того, как меняются отклонения SHIFT_REG0 и SHIFT_REG1 при среднем значении HSI_Trim, минимальном и максимальном. В качестве CLK используется сигнал от HSE0, на отладочной плате ​это резонатор на 10МГц. Картинки ​отражают выработку событий ​при тюнинге ​HSI_Trim:
  
 {{1986be8t:​clkchk_hsi_def.png}}{{1986be8t:​clkchk_hsi_minmax.png}} {{1986be8t:​clkchk_hsi_def.png}}{{1986be8t:​clkchk_hsi_minmax.png}}
  
-Как видно из картинок,​ параметры SHIFT_REG0 и SHIFT_REG1 отражают изменение соотношения частот ​HSE1 и HSI при регулировке HSI_Trim. Изменения не значительны,​ потому что частота HSI меняется слабо. Расчетные же значения ​оба ​были равны ​4, т.е.:+Как видно из картинок,​ параметры SHIFT_REG0 и SHIFT_REG1 отражают изменение соотношения частот ​HSE0 и HSI при регулировке HSI_Trim. Изменения не значительны,​ потому что частота HSI меняется слабо. Расчетные же значения были равны:
  
 <​code>​ <​code>​
-  K0 = HSI / (HSI_PrescREG2 + 1) * (CLK_PrescREG1 + 1) / CLK = 8MHz / 2 * 8MHz  ​= 4 +  K0 = HSI / (HSI_PrescREG2 + 1) * (CLK_PrescREG1 + 1) / CLK =  8MHz / 2 * 10 10MHz = 4 
-  K1 = CLK / (CLK_PrescREG3 + 1) *  HSI_PrescREG0 ​     / HSI = 8MHz / 2 * 8 / 8MHz  4+  K1 = CLK / (CLK_PrescREG3 + 1) *  HSI_PrescREG0 ​     / HSI = 10MHz / 2 *  8 /  8MHz = 5
 </​code>​ </​code>​
  
-При стартовом значении регистры SHIFT_REG0 и SHIFT_REG1 имеют значения 3 и 5, что как раз "обрамляет" расчетные 4.+При стартовом значении регистры SHIFT_REG0 и SHIFT_REG1 имеют значения 3 и 5, что ​близко к расчетным 4 и 5. При отклонении частоты ​меняются значения этих регистров и вырабатываются события.
  
-В демо-проекте работы с ClockChecker-ом на [[https://​github.com/​StartMilandr/​MDR_Pack_v6/​tree/​master/​PACK_Gen/​Files/​Examples/​All_Boards/​ClockChecker|GitHub]] представлен вариант аварийного перехода на частоту HSI с тактирования от HSE1 через PLL0. Для эмуляции "​аварии"​ в примере просто выключается PLL.+В демо-проекте работы с ClockChecker-ом на [[https://​github.com/​StartMilandr/​MDR_Pack_v6/​tree/​master/​PACK_Gen/​Files/​Examples/​All_Boards/​ClockChecker|GitHub]] ​помимо случая с HSE0, представлен ​также ​вариант аварийного перехода на частоту HSI с тактирования от HSE0 через PLL0. Для эмуляции "​аварии"​ в примере просто выключается PLL.
doc/doclist/clockchecker.1562854937.txt.gz · Последние изменения: 2019/07/11 18:22 — vasco