Содержимое заголовочного файла

Содержимое заголовочного файла

В начале любой программы, как правило, подключается один из стандартных заголовочных файлов, поставляемых вместе с пакетом программ AVR Studio.

Заголовочные файлы существуют для всех моделей AVR. По умолчанию исходной директорией их размещения является “С:\Program Files\Atmel\AVRTools\AvrAssembler2\Appnotes”. Каждый файл имеет имя подобное “m8def.inc”, в котором первая часть указывает на модель микроконтроллера.

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

; ***** I/O REGISTER DEFINITIONS ************************** ; NOTE: ; Definitions marked “MEMORY MAPPED” are extended I/O ports ; and cannot be used with IN/OUT instructions .equSREG= 0x3F .equSPL= 0x3D .equSPH= 0x3E . .equTWAR= 0x02 .equTWSR= 0x01 .equTWBR= 0x00 ; ***** BIT DEFINITIONS *********************************** . ; ***** CPU ************************** ; SREG – Status Register .equSREG_C = 0 ; Carry Flag .equSREG_Z = 1 ; Zero Flag .equSREG_N = 2; Negative Flag .equSREG_V = 3; Two’s Complement Overflow Flag .equSREG_S = 4; Sign Bit .equSREG_H = 5; Half Carry Flag .equSREG_T = 6; Bit Copy Storage .equSREG_I = 7; Global Interrupt Enable .

Директива .equ связывает название каждого из РВВ с его фактическим адресом в адресном пространстве ввода-вывода. Эти адреса могут использоваться только совместно с инструкциями in, out, sbi, cbi, sbis, sbic. Если обращаться к управляющему регистру как к ячейке памяти в абсолютном адресном пространстве, то к его имени необходимо будет добавлять смещение 0x20:

lds SPL+0x20,R16 ;копировать R16 в ячейку 0x5D SRAM (0x3D I/O).

Обозначения РВВ и их битов в точности совпадают с теми, которые приводятся в технической документации на каждую конкретную модель. Поэтому не рекомендуется изменять эти имена в заголовочном файле по своему усмотрению. Стандартные названия помогают облегчить переносимость программ в пределах одного семейства. Если, например, понадобиться перенести рабочий код с модели ATmega8 на ATmeg8535, то все что надо будет сделать – это заменить в исходном тексте файле “m8def.inc” на “m8535def.inc” и заново откомпилировать проект.

В каждом заголовочном файле РОНам R27…R31 директивой .def присвоены дополнительные служебные имена:

; ***** CPU REGISTER DEFINITIONS ************************** .defXH = R27 .defXL = R26 .defYH = R29 .defYL = R28 .defZH = R31 .defZL = R30

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

; ***** DATA MEMORY DECLARATIONS ************************** .equFLASHEND = 0x0FFF; Note: Word address .equIOEND = 0x003F .equSRAM_START = 0x0060 .equSRAM_SIZE = 1024 .equRAMEND = 0x045F .equXRAMEND = 0x0000 .equE2END = 0x01FF .equEEPROMEND = 0x01FF .equEEADRBITS = 9 ̣̣̣̣̣̣̣̣ ; ***** BOOTLOADER DECLARATIONS *************************** .equNRWW_START_ADDR = 0xC00 .equNRWW_STOP_ADDR = 0xFFF .equRWW_START_ADDR = 0x0 .equRWW_STOP_ADDR = 0xBFF .equPAGESIZE = 32 .equFIRSTBOOTSTART = 0xF80 .equSECONDBOOTSTART = 0xF00 .equTHIRDBOOTSTART = 0xE00 .equFOURTHBOOTSTART = 0xC00 .equSMALLBOOTSTART = FIRSTBOOTSTART .equLARGEBOOTSTART = FOURTHBOOTSTART

В конце файла приведена таблица векторов прерывания:

; ***** INTERRUPT VECTORS ********************************* .equINT0addr = 0x0001; External Interrupt Request 0 .equINT1addr = 0x0002; External Interrupt Request 1 .equOC2addr = 0x0003; Timer/Counter2 Compare Match ̣̣̣̣̣̣̣̣ .equACIaddr = 0x0010; Analog Comparator .equTWIaddr = 0x0011; 2-wire Serial Interface .equSPMRaddr = 0x0012; Store Program Memory Ready .equINT_VECTORS_SIZE = 19 ; size in words


Категория: Микроконтроллеры
Метки:

Написать коментарий

*
= 4 + 5

Добавить изображение

Последние статьи