Обсуждаем контроллеры компании Atmel.
Ответить

Вопрос: avr_asm interrupt в отдельный файл как?

Сб ноя 03, 2018 11:43:53

Доброго времени.
(avr, asm, AVR Studio)
Подскажите на примере как вынести таблицу векторов прерываний с обработчиками в отдельный файл, а подпрограммы в другой файл.
Или где об этом прочитать на русском.
Заранее спасибо.

Спойлер;tn2313a_blink
.device ATtiny2313A
.include "tn2313adef.inc"
;CPU_Clock - Ext_Osc 8MHz

.def temp = r16
.def led_6 = r17
.def delay_ms = r18

.equ _DELAY = 250

;===Interrupt=======
rjmp RESET ; Reset Handler
reti ;rjmp INT0 ; External Interrupt0 Handler
reti ;rjmp INT1 ; External Interrupt1 Handler
reti ;rjmp TIM1_CAPT ; Timer1 Capture Handler
reti ;rjmp TIM1_COMPA ; Timer1 CompareA Handler
reti ;rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0 ; Timer0 Overflow Handler
reti ;rjmp USART0_RXC ; USART0 RX Complete Handler
reti ;rjmp USART0_DRE ; USART0,UDR Empty Handler
reti ;rjmp USART0_TXC ; USART0 TX Complete Handler
reti ;rjmp ANA_COMP ; Analog Comparator Handler
reti ;rjmp PCINT0 ; PCINT0 Handler
reti ;rjmp TIMER1_COMPB ; Timer1 Compare B Handler
reti ;rjmp TIMER0_COMPA ; Timer0 Compare A Handler
reti ;rjmp TIMER0_COMPB ; Timer0 Compare B Handler
reti ;rjmp USI_START ; USI Start Handler
reti ;rjmp USI_OVERFLOW ; USI Overflow Handler
reti ;rjmp EE_READY ; EEPROM Ready Handler
reti ;rjmp WDT_OVERFLOW ; Watchdog Overflow Handler
reti ;rjmp PCINT1 ; PCINT1 Handler
reti ;rjmp PCINT2 ; PCINT2 Handler

;===
RESET:
;stack
ldi temp, RAMEND
out SPL, temp

;PortD Pin6 - OUT the external LED
ldi temp, 0b01000000
out DDRD, temp

clr temp
out PortD, temp

;TIM0 - init
clr temp
out TCCR0B, temp

ldi temp, 0x83 ;(256-125=131(0x83) interrTIM0/ms) for k=64 cpu 8MHz
out TCNT0, temp

in temp, TIFR
sbr temp, 0b00000010
out TIFR, temp

in temp, TIMSK
sbr temp, 0b00000010
out TIMSK, temp

in temp, TCCR0B
sbr temp, 0b00000011
out TCCR0B, temp

;===========
sei
ldi led_6, 0b01000000

;===========
MAIN:
in temp, PortD
eor temp, led_6
out PortD, temp

ldi delay_ms, _DELAY
rcall f_delay_ms

rjmp MAIN

;==
f_delay_ms:
cpi delay_ms, 0
brne f_delay_ms
ret

;==
TIM0:
ldi temp, 0x82 ;(255-125=130) for k=64 cpu 8MHz
out TCNT0, temp

cpi delay_ms, 0
breq no_dec
dec delay_ms
no_dec:
reti

Re: Вопрос: avr_asm interrupt в отдельный файл как?

Сб ноя 03, 2018 15:36:44

.include "name.type"

Re: Вопрос: avr_asm interrupt в отдельный файл как?

Вс ноя 04, 2018 19:55:15

Спасибо.
А как избежать конфликта адресов? Ну как бы хотелось, иклюды не по всей программе распихивать, а все в кучу в самом начале. Неужели вручную через .org высчитывать?

Re: Вопрос: avr_asm interrupt в отдельный файл как?

Пн ноя 05, 2018 08:02:21

Так и ставьте, компилятор расчитает адреса

Re: Вопрос: avr_asm interrupt в отдельный файл как?

Пн ноя 05, 2018 09:11:32

Как один из возможных вариантов смотри здесь
https://radiokot.ru/forum/viewtopic.php?f=62&t=94201
ближе к концу выведена некая формулировка "слэнга" многофайловых проектов под асемблером.
:roll:

Re: Вопрос: avr_asm interrupt в отдельный файл как?

Пт ноя 09, 2018 22:40:47

Как один из возможных вариантов смотри здесь
https://radiokot.ru/forum/viewtopic.php?f=62&t=94201
ближе к концу выведена некая формулировка "слэнга" многофайловых проектов под асемблером.
:roll:


Спасибо, но легче не стало. А простого конкретного примера случайно нету? Если это не в напряг.

Re: Вопрос: avr_asm interrupt в отдельный файл как?

Сб ноя 10, 2018 05:52:42

Любой из рассмотренных в вышеуказанной теме проектов, в том числе и для АВР.
Принцип построения одинаков - единственно ближе к концу темы выведено дополненеие по структуре папок проекта с распределением их содержимого.
Образец "раннего примитива" со смешанными в единой папке файлами:
extdi_2313.rar
(33.15 KiB) Скачиваний: 163

Сейчас несколько более распределено - отдельно основа проекта, отлдельно остальные разделы.
8)
Ответить