СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №6/2014

ЭЛЕМЕНТЫ И КОМПОНЕНТЫ 41 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 6 2014 0х23FFFFFC 0х23FFFFF8 0х23FFFFF4 0х23FFFFF0 0х23FFFFEC 0х23FFFFE8 0х23FFFFE4 0х23FFFFE0 0х2200001C 0х22000018 0х22000014 0х22000010 0х2200000C 0х22000008 0х22000004 0х22000000 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 0х200FFFFF 0х200FFFFE 0х200FFFFD 0х200FFFFC 0х20000000 0х20000001 0х20000002 0х20000003 1 Мбайт 32 Мбайт Рис. 2. Схема соответствия областей памяти битового объединения и при выходе из режима ожидания. Поэтому в режиме ожидания выстав- ленные уровни должны удерживаться в состоянии, необходимом для режи- ма загрузки. Как правило, состояние входов BOOT0 и BOOT1 изменяют перед про- граммированием микроконтроллера для активации внутреннего загрузчи- ка. Затем состояние этих входов пере- определяют на чтение памяти про- грамм и не изменяют в течение всего времени работы. Встроенный загрузчик расположен в системной памяти и программируется фирмой ST при изготовлении продук- ции. Он используется для перепрограм- мирования флэш-памяти с помощью одного из доступных последователь- ных интерфейсов. М ЕТОД БИТОВОГО ОБЪЕДИНЕНИЯ Обычно битовые операции в опера- тивной памяти микроконтроллеров выполняются с помощью инструк- ций AND и OR. Для этого необходимо выполнить последовательность таких операций, как чтение, модификация и запись. Использование этого метода требует несколько циклов на выполне- ние установки или сброса отдельных бит и увеличивает размер программы. Устранить эти недостатки можно вве- дением новых инструкций для сбро- са и установки бит, но это приводит к усложнению процессора. В STM32 применён способ, называемый бито- вым объединением (Bit Banding), кото- рый позволяет напрямую воздейство- вать на биты памяти, не используя при этом новых инструкций. Это реализо- вано с помощью специальных областей памяти, позволяющих выполнять поби- товую адресацию. Бит-адресуемые области карты памя- ти STM32 разделены на две части. Пер- вая часть служит для хранения бит и в неё входит до 1 Мбайт физической памяти или регистров устройств вво- да-вывода. Вторая часть служит для доступа к битам и занимает до 32 Мбайт памяти. При выполнении операций с областью доступа происходит обра- щение к фактическим адресам бит в памяти. Метод битового объединения рассмо- трим на примере работы с регистрами портов ввода-вывода GPIO. Для выво- да данных в них используется регистр ODR, запись в который производится через операции «чтение–модифика- ция–запись» с использованием 16-раз- рядных значений. Но существует и дру- гой способ управления битами этого регистра – с помощью регистра поби- товой установки и сброса выводов пор- та BSRR. Примеры такого управления описаны ранее [2]. Приведём формулу для вычисления адреса слова в области доступа к битам на соответствующий бит в области хра- нения бит. bit_word_addr = bit_band_base + + (byte_offset × 32) + (bit_number × 4), где: bit_word_addr – адрес слова в области доступа к битам, которое отражается на нужный бит; bit_band_base – начальный адрес обла- сти доступа к битам; byte_offset – номер байта в области хра- нения бит, который содержит нужный бит; bit_number – позиция нужного бита от 0 до 7 в байте. Следующая формула показывает, как отобразить бит 2 из байта, расположен- ного в ОЗУ по адресу 0x20000300, на область доступа к битам: bit_word_addr = 0x22000000 + + (0x300 × 32) + (2 × 4) = 0x22006008. Запись по адресу 0x22006008 будет иметь такой же эффект, что и операция «чтение–изменение–запись» для бита 2 из байта в ОЗУ по адресу 0x20000300. Чтение по адресу 0x22006008 вер- нёт значение бита 2 для байта в ОЗУ по адресу 0x20000300 в виде значений Режимы начальной загрузки Состояние выводов управления Память Режим загрузки BOOT1 BOOT0 0 или 1 0 Основная флэш-память Программа пользователя в основной памяти 0 1 Системная память Встроенный загрузчик системной памяти 1 1 Оперативная память Программа в оперативной памяти 0x01 (если бит установлен) или 0x00 (если бит сброшен). С помощью макроса можно создать указатель на этот адрес в виде следую- щей строки: #define PB8 (*((volatile unsigned long *) 0x22006008)) // Port B bit 8 Данный указатель можно использо- вать для установки и сброса бита 8 пор- та B следующим образом: PB8 = 1; // Установить бит 8 в единич- ное состояние PB8 = 0; // Установить бит 8 в нуле- вое состояние Таким образом, можно воздейство- вать на значение отдельных бит путём обращения к определённой области памяти микроконтроллера за мини- мальное количество тактов. На рисунке 2 наглядно видно соот- ветствие между областью хранения бит размером 1 Мбайт и областью доступа к битам размером 32 Мбайт. В программах, где часто используется установка и сброс множества бит в реги- страх устройств ввода-вывода, исполь- зование данного метода позволяет суще- ственно сэкономить размер кода про- граммы и время его выполнения. Л ИТЕРАТУРА 1. https://www.st.com 2. Вальпа О . Современные 32-разрядные ARM-микроконтроллеры серии STM32: блок резервных данных BKP. Современ- ная электроника. №3. 2014.

RkJQdWJsaXNoZXIy MTQ4NjUy