Читаем Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С полностью

Каково назначение остальных символов рассматриваемой записи? Переменной ATDCTL2 назначается формат представления данных unsigned char, т.е 8-разрядный без знака. Определение volatile, которое следует за объявление формата, информирует компилятор о том, что изменение значения переменной ATDCTL2 может происходить не только в результате действия программы, но и на аппаратном уровне. Когда переменная сопровождается определением volatile, компилятор не использует по отношению к ней оптимизацию. Знак * после определения volatile указывает на то, что в следующих скобках заключено значение адреса переменной, а не значение этой переменной.

Пример.

Регистр ATDCTL2, расположенный в памяти МК по адресу 0x0062, управляет работой модуля аналого-цифрового преобразователя ATD. Бит 7 этого регистра разрешает (1) или запрещает (0) работу модуля. Этот бит, обозначенный в техническом описании как ATPU (ATD Powerup Bit), устанавливается в 0 в состоянии сброса МК. Для включения модуля ATD в работу необходимо программно установить этот бит в 1. На языке Ассемблера это действие может быть произведено следующим фрагментом программы:

;

;MAIN PROGRAMM

;

ATDCTL2 EQU  $0062    ;определить адрес регистра в МК

ATD_INI EQU  $80      ;определить значение слова

                      ;инициализации для включения АЦП

        LDAA #ATD_INI ;загрузить слово инициализации в ACC

        STAA ATDCTL2  ;записать значение инициализации в

                      ;регистр управления АЦП

                      ;

Первые две строки программы содержат директивы присвоения EQU языка Ассемблер, которые информируют программу о том, что вместо имени ATDCTL2 в кодах программы следует использовать значение $0062, а вместо ATD_INI — $80 или 10000000 в двоичном коде. Команда LDAA использует непосредственную адресацию, в результате ее выполнения число $80 загрузится в аккумулятор ACC. Команда STAA с прямой адресацией пересылает содержимое ACC в ячейку с адресом ATDCTL2. В результате, код в регистре управления ATDCTL2 будет равен 10000000, т.е. установленный в 1 бит 7 вызовет включение модуля АЦП. На языке Си аналогичное действие выполняет следующий программный фрагмент:

/*--------------------------*/

/*MAIN PROGRAMM             */

/*--------------------------*/

#include <912b32.h>

void main(void) {

 unsigned char ATD_INI = 0x80;

 ATDCTL2 = ATD_INI;

}

/*---------------------------*/

Как видите, Вам не пришлось указывать в программе физический адрес регистра ATDCTL2, т.к. он уже определен в заголовочном файле 912b32.h.

<p>4.5.1. Виртуальный адрес блока регистров</p>

Все регистры специальных функций МК семейства 68HC12/HCS12 объединены в блок, который занимает 512 ячеек памяти в адресном пространстве МК. Регистры располагаются в памяти, начиная с некоторого начального адреса, который принято в программном коде обозначать как IO_BASE. Адреса регистров следуют последовательно друг за другом, поэтому адрес каждого регистра можно представить, как (IO_BASE + код смещения). Численное значение кода смещения каждого регистра определено в карте памяти конкретной модели МК в составе семейства 68HC12/HCS12 и может быть получено из технического описания этого МК. Так в примере предыдущего параграфа код смещения регистра ATDCTL2 в составе МК B32 был равен $0062.

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже