Что такое тактовая частота? Советы и рекомендации по разработке прошивок

Добавлено 22 сентября 2019 в 21:36

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

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

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

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

Почему важна тактовая частота?

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

Основная идея здесь заключается в том, что тактовая частота выходит за рамки темы о скорости процессора. Микроконтроллеры особенны, потому что у них имеются периферийные устройства: аналого-цифровые преобразователи, цифро-аналоговые преобразователи, широтно-импульсные модуляторы, таймеры, модули I2C, и так далее.

Диаграмма, поясняющая различие между понятиями «микроконтроллер» и «микропроцессор»
Состав микроконтроллера

Все эти периферийные устройства не имеют отдельных входов тактового сигнала; скорее они обычно приводятся в действие тактовым сигналом, который получается из системного тактового сигнала (который также можно назвать основным тактовым сигналом, или тактовым сигналом ядра, или различными другими именами, которые одинаково подходят).

Таким образом, частота дискретизации вашего АЦП, скорость в бодах вашего интерфейса UART, частота, с которой ваш таймер производит отсчет, и различные другие важные функциональные параметры могут быть напрямую связаны с тактовой частотой вашей системы.

Работа с разными частотами

В связи с этим возникает другой вопрос: почему встроенное программное обеспечение (прошивка) должна иметь прямой доступ к определенной константе или переменной, соответствующей текущей тактовой частоте? Потому что это сделает ваш код чище, проще в написании и более универсальным.

Использование константы

Давайте рассмотрим первый вариант, то есть использование определения препроцессора в качестве постоянного значения, равного тактовой частоте системы в количестве циклов в секунду. Например:

#define SYSCLK_FREQ 25000000

Это позволяет вам писать код, который совместим со многими различными тактовыми частотами, потому что функции конфигурирования периферии или работы с временными интервалами, которые зависят от системного тактового сигнала, могут использовать вычисления в коде с использованием константы SYSCLK_FREQ. Другими словами, если ваша системная тактовая частота составляет 16 МГц, и вам нужно знать значение делителя, которое будет генерировать тактовый сигнал 1 МГц, вы не будете писать код, подобный следующему:

ClkDiv_Value = 16;

Вместо этого вы напишете это:

ClkDiv_Value = SYSCLK_FREQ/1000000;

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

Использование переменной

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

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

Однако константа #define не может быть изменена во время работы программы, и именно поэтому вы можете захотеть использовать вместо константы переменную.

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

unsigned long SysClk_Freq = 16000000;

…

if(MCU_STATE == NORMAL)
{
  Config_Normal();
  SysClk_Freq = 16000000;
}
else if(MCU_STATE == LOW_POWER)
{
  Config_LowPower();
  SysClk_Freq = 1000000;
}

Заключение

Тактовые частоты микроконтроллера не настолько фиксированы, как мы могли бы подумать. Даже если вы уверены в частоте, которая будет доступна на определенном оборудовании, и вы уверены, что не нужно будет динамически менять системный тактовый сигнал, вполне возможно, что когда-нибудь вы захотите повторно использовать большие фрагменты кода из одного проекта в другой системе. Включение постоянной или переменной для тактовой частоты в вашу прошивку – это простой и эффективный способ сэкономить время и сделать ваши встраиваемые системы более универсальными.

Теги

ADC / АЦП (аналого-цифровой преобразователь)I2CMCUPWM / ШИМ (широтно-импульсная модуляция)UARTМикроконтроллерРазработка ПО для встраиваемых системТактовая частота

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.