Контроллер прямого доступа к памяти экономит энергию
Большинство микроконтроллеров с низким энергопотреблением обладает контроллером прямого доступа к памяти (DMA). Данное обстоятельство не является случайным. Дело в том, что использование данной периферии позволяет существенно сократить энергопотребление системы.
Ядро является универсальным инструментом. Главное его предназначение – выполнять множество атомарных операций в любой последовательности, что в конечном итоге позволяет данному модулю выполнять любую возложенную функцию. В силу такой требуемой универсальности возможности по снижению энергопотребления весьма и весьма ограничены. Для снижения потребляемой энергии можно вводить специфические операции, характерные для конкретных приложений. Например, операция деления или умножение со сложением. Вместо выполнения некоторого алгоритма по обработке данных можно обойтись одной-двумя операциями. Пожалуй, на этом возможности снижения энергопотребления силами ядра заканчиваются. Для работы ядра, кроме памяти, в которой хранятся команды, требуются следующие модули: буфер хранения считанной команды, дешифратор команды, устройство исполнения команды (например, АЛУ или шины данных, по которым будет производиться обмен), указатель адреса исполняемой команды, который будет постоянно менять значение, регистры общего назначения, устройство управления ядра и множество других модулей. Такое число модулей, требуется для реализации главного свойства ядра: универсальности. В силу этого, при выполнении даже самых простых задач на минимальной частоте потребляется весьма ощутимая энергия. Это видно из описания на микроконтроллер. Например, ядро контроллера STM32L фирмы STMicroelectronics потребляет 233мкА/МГц. Если сравнить это потребление с потреблением любой периферии, например, DMA – 8мкА/МГц, то очевидна разница потребления в десятки раз. Откуда такая разница? DMA не является универсальным инструментом и может только копировать по запросам периферии данные из одного места в другое. Ядро, кроме того, что оно может копировать данные путём загрузки их в свои регистры и выгрузки в другую область памяти, может выполнять множество других операций. Поэтому одна и та же операция, выполненная разными способами, требует настолько разной энергии. Отсюда можно строить стратегию снижения энергопотребления всего микроконтроллера: отключать ядро, стараться производить операции копирования с помощью DMA, пробуждать ядро как можно реже для обработки больших массивов данных. Более того, некоторые интеллектуальные операции можно производить без ядра, набором нескольких периферий. Самый простой пример: мост интерфейсов на базе микроконтроллера. Если интерфейсы достаточно простые (не такие как Ethernet), то обмен информацией между ними может производить DMA. Ядро может быть выключено. Обмен будет автономный. Выдача информации интерфейса на сегментный ЖК дисплей тоже может производиться без участия ядра.
Рассмотрим приложение, в котором, принятый байт информации, по интерфейсу инициирует считывание состояний портов и возврат их по тому же интерфейсу. В классическом случае периферия должна генерировать прерывание или событие просыпания ядра (со всеми вытекающими тратами энергии), которое выполнит рутинную операцию копирования данных. Микроконтроллеры семейств STM8L и STM32L, имеющие на борту периферию прямого доступа к памяти, могут выполнить эту операцию иначе: получив данные по интерфейсу отправить запрос копирования в DMA по выделенному каналу, в результате чего состояние входов портов окажется в регистре отправки заданного интерфейса. Простой расчёт покажет энергетическую выгодность такого подхода при частом опросе состояний.
Периферия микроконтроллеров семейства STM32 обладает замечательным свойством: выполнять достаточно интеллектуальные задачи автономно от ядра. С одной стороны – это повышение производительности системы в целом, с другой, в случае отключения ядра, как самого энергоёмкого элемента, получение интеллектуального компонента системы с уникальными энергетическими характеристиками. Хорошим примером такого подхода может быть построение RGB интерфейса, описанного тут, где объединение таймеров в сложные структуры + наличие DMA позволило выполнить обработку нескольких мощных информационных потоков одним контроллером STM32F100. Периферия контроллеров STM32 обладает уникальными связями в обход ядра. Это делает применение DMA ещё более энергетически выгодным в сравнении с конкурирующими изделиями других производителей. Например, таймер может запустить АЦП в работу, параллельно сбросить другой таймер, АЦП по окончании преобразования инициировать обмен через DMA, в результате чего ШИМ другого таймера изменит значение и т.д. Таким образом, решение задачи снижения энергопотребления во многом пересекается с правильным использованием возможностей периферии контроллеров STM8/32.