MyTetra Share
Делитесь знаниями!
Содержимое заголовочного файла AVR Studio
Время создания: 02.12.2021 17:31
Раздел: Компьютер - Программирование - Ассемблеры - Архитектура AVR - Ассемблер в AVR Studio
Запись: xintrea/mytetra_syncro/master/base/16384554752nhjjq22q1/text.html на raw.github.com

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

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

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

; ***** I/O REGISTER DEFINITIONS **************************

; NOTE:

; Definitions marked "MEMORY MAPPED" are extended I/O ports

; and cannot be used with IN/OUT instructions

 

.equ    SREG    = 0x3F

.equ    SPL = 0x3D

.equ    SPH = 0x3E

.

.equ    TWAR    = 0x02

.equ    TWSR    = 0x01

.equ    TWBR    = 0x00

 

; ***** BIT DEFINITIONS ***********************************

.

; ***** CPU **************************

; SREG - Status Register

.equ    SREG_C = 0 ; Carry Flag

.equ    SREG_Z = 1 ; Zero Flag

.equ    SREG_N = 2 ; Negative Flag

.equ    SREG_V = 3 ; Two's Complement Overflow Flag

.equ    SREG_S = 4 ; Sign Bit

.equ    SREG_H = 5 ; Half Carry Flag

.equ    SREG_T = 6 ; Bit Copy Storage

.equ    SREG_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 присвоены дополнительные служебные имена:


1

2

3

4

5

6

7

; ***** CPU REGISTER DEFINITIONS **************************

.def    XH = R27

.def    XL = R26

.def    YH = R29

.def    YL = R28

.def    ZH = R31

.def    ZL = R30

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

; ***** DATA MEMORY DECLARATIONS **************************

.equ    FLASHEND     = 0x0FFF  ; Note: Word address

.equ    IOEND          = 0x003F

.equ    SRAM_START   = 0x0060

.equ    SRAM_SIZE    = 1024

.equ    RAMEND   = 0x045F

.equ    XRAMEND  = 0x0000

.equ    E2END          = 0x01FF

.equ    EEPROMEND    = 0x01FF

.equ    EEADRBITS    = 9

̣̣̣̣̣̣̣̣

; ***** BOOTLOADER DECLARATIONS ***************************

.equ    NRWW_START_ADDR = 0xC00

.equ    NRWW_STOP_ADDR  = 0xFFF

.equ    RWW_START_ADDR  = 0x0

.equ    RWW_STOP_ADDR   = 0xBFF

.equ    PAGESIZE        = 32

.equ    FIRSTBOOTSTART  = 0xF80

.equ    SECONDBOOTSTART = 0xF00

.equ    THIRDBOOTSTART  = 0xE00

.equ    FOURTHBOOTSTART = 0xC00

.equ    SMALLBOOTSTART  = FIRSTBOOTSTART

.equ    LARGEBOOTSTART  = FOURTHBOOTSTART

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


1

2

3

4

5

6

7

8

9

10

; ***** INTERRUPT VECTORS *********************************

.equ    INT0addr = 0x0001  ; External Interrupt Request 0

.equ    INT1addr = 0x0002  ; External Interrupt Request 1

.equ    OC2addr  = 0x0003  ; Timer/Counter2 Compare Match

̣̣̣̣̣̣̣̣

.equ    ACIaddr  = 0x0010  ; Analog Comparator

.equ    TWIaddr  = 0x0011  ; 2-wire Serial Interface

.equ    SPMRaddr = 0x0012  ; Store Program Memory Ready

 

.equ    INT_VECTORS_SIZE = 19 ; size in words


 
MyTetra Share v.0.59
Яндекс индекс цитирования