Поиск по сайту: |
|
По базе: |
|
Главная страница > Обзоры по типам > Микроконтроллеры > ARM |
|
||||||||||||||||||
2.3.7. Метод "Bit Banding"У предшествующих ЦПУ ARM7 и ARM9 битовые операции в статическом ОЗУ можно было выполнять только с помощью инструкций AND и OR. Для этого необходимо выполнить последовательность ЧТЕНИЕ - МОДИФИКАЦИЯ - ЗАПИСЬ. Однако использование этого метода приводит к чрезмерному расходованию количества циклов на выполнение установки и сброса отдельных бит и увеличению результирующего кода программы.
Преодолеть данное ограничение можно, если предусмотреть отдельные инструкции сброса и установки бит или интегрировать полнофункциональный процессор битовой обработки, однако это приведет к увеличению размеров и сложности ЦПУ. Вместо этого, способ, называемый bit banding, позволяет напрямую воздействовать на биты в памяти из областей УВВ и статического ОЗУ, не используя при этом каких-либо специальных инструкций. Битноадресуемые области карты памяти Cortex разделены на две части: область хранения бит (в нее входят до 1 Мбайт физической памяти или регистров УВВ) и область доступа к битам, которая занимает до 32 Мбайт карты памяти. Получить доступ к каждому отдельному биту из области хранения бит можно по соответствующему адресу слова из области доступа к битам. Таким образом, если выполнять запись по адресу в области доступа к битам на самом деле мы будем воздействовать на значение определенного бита в физической памяти.
В итоге, мы можем воздействовать на значение отдельных бит, не прибегая, при этом, к использованию специальных инструкций и сохраняя результирующие размеры ядра Cortex на минимально возможном уровне. Чтобы использовать этот метод на практике, необходимо вычислить адрес слова в области доступа к битам, который соответствует заданной ячейки памяти из области УВВ или статического ОЗУ. Выполняется это по следующей формуле: Адрес в области доступа к битам = Базовый адрес области доступа к битам + Смещение адреса слова доступа к биту, где Смещение адреса слова доступа к биту = Смещение в байтах по отношению базовому адресу области хранения бит х 0x20 + номер бита х 4 На самом деле все обстоит гораздо проще, чем может показаться на первый взгляд. Рассмотрим практический пример. Необходимо выполнить запись в выходной регистр порта ввода-вывода (ПВВ) для установки или сброса отдельных линий ввода-вывода. Физический адрес выходного регистра порта В - 0x40010C0C. Предположим, что нужно устанавливать и сбрасывать бит 8 этого регистра. Воспользуемся приведенной выше формулой: Адрес слова = 0x40010C0C Базовый адрес области хранения бит УВВ = 0x40000000 Базовый адрес области доступа к битам УВВ = 0x42000000 Смещение в байтах по отношению базовому адресу области хранения бит = 0x40010C0C - 0x40000000 = 10C0C Смещение адреса слова доступа к биту = (0x10С0С x 0x20) +(8x4) = 0x2181A0 Адрес в области доступа к битам = 0x42000000 + 0x2181A0 = 0x422181A0 Теперь мы можем создать указатель на этот адрес с помощью следующей Си-строки:
После этого, этот указатель можно использовать для установки и сброса бит ПВВ:
После компиляции будут сгенерированы следующие ассемблерные инструкции:
Для отключения светодиода используем строку:
Ей соответствуют следующие ассемблерные инструкции:
Таким образом, для установки или сброса бита необходимо выполнить три 16-битных инструкции. Микроконтроллер STM32, работающий на частоте 72 МГц, выполнит их за 80 нс. Альтернативно установку или сброс бита можно выполнить, если применить логическую операцию "ИЛИ" или "И" ко всему слову из области хранения бит УВВ или статического ОЗУ:
Но в таком случае, одна операция установки/сброса потребует выполнения смеси 16- и 32-битных инструкций, которые займут минимум 14 байт и на той же тактовой частоте будут выполняться как минимум 180 нс. Таким образом, в программе, где используется установка/сброс множества бит в регистрах УВВ, а также применяются семафоры и флаги в статическом ОЗУ, использование метода bit banding позволит существенно сэкономить, как размер кода программы, так и время его выполнения.
Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
|
Впервые? | Реклама на сайте | О проекте | Карта портала тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru ©1998-2023 Рынок Микроэлектроники |
|