Обсуждаем контроллеры компании Atmel.
Сб ноя 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
Вс ноя 04, 2018 19:55:15
Спасибо.
А как избежать конфликта адресов? Ну как бы хотелось, иклюды не по всей программе распихивать, а все в кучу в самом начале. Неужели вручную через .org высчитывать?
Пн ноя 05, 2018 08:02:21
Так и ставьте, компилятор расчитает адреса
Пн ноя 05, 2018 09:11:32
Как один из возможных вариантов смотри здесь
https://radiokot.ru/forum/viewtopic.php?f=62&t=94201ближе к концу выведена некая формулировка "слэнга" многофайловых проектов под асемблером.
Пт ноя 09, 2018 22:40:47
Как один из возможных вариантов смотри здесь
https://radiokot.ru/forum/viewtopic.php?f=62&t=94201ближе к концу выведена некая формулировка "слэнга" многофайловых проектов под асемблером.
Спасибо, но легче не стало. А простого конкретного примера случайно нету? Если это не в напряг.
Сб ноя 10, 2018 05:52:42
Любой из рассмотренных в вышеуказанной теме проектов, в том числе и для АВР.
Принцип построения одинаков - единственно ближе к концу темы выведено дополненеие по структуре папок проекта с распределением их содержимого.
Образец "раннего примитива" со смешанными в единой папке файлами:
Сейчас несколько более распределено - отдельно основа проекта, отлдельно остальные разделы.