Кстати...
В комплекте с Ардуино IDE для ПК идет процессинг IDE на джаве...
Работать с нею пока не пробовал, но "про запас" поставил.
Примеры там - загляденье.
Код: Выделить всё
; ***** my INTERRUPT VECTORS ************************************************
; причем софтовая таблица может иметь и другие адреса начального размещения внутри области бутлоадера
; а не только самые первые (от FOURTHBOOTSTART)
.equ INT0addr_r = FOURTHBOOTSTART + 0x0001 ; External Interrupt Request 0
.equ INT1addr_r = FOURTHBOOTSTART + 0x0002 ; External Interrupt Request 1
.equ OC2addr_r = FOURTHBOOTSTART + 0x0003 ; Timer/Counter2 Compare Match
.equ OVF2addr_r = FOURTHBOOTSTART + 0x0004 ; Timer/Counter2 Overflow
.equ ICP1addr_r = FOURTHBOOTSTART + 0x0005 ; Timer/Counter1 Capture Event
.equ OC1Aaddr_r = FOURTHBOOTSTART + 0x0006 ; Timer/Counter1 Compare Match A
.equ OC1Baddr_r = FOURTHBOOTSTART + 0x0007 ; Timer/Counter1 Compare Match B
.equ OVF1addr_r = FOURTHBOOTSTART + 0x0008 ; Timer/Counter1 Overflow
.equ OVF0addr_r = FOURTHBOOTSTART + 0x0009 ; Timer/Counter0 Overflow
.equ SPIaddr_r = FOURTHBOOTSTART + 0x000a ; Serial Transfer Complete
.equ URXCaddr_r = FOURTHBOOTSTART + 0x000b ; USART, Rx Complete
.equ UDREaddr_r = FOURTHBOOTSTART + 0x000c ; USART Data Register Empty
.equ UTXCaddr_r = FOURTHBOOTSTART + 0x000d ; USART, Tx Complete
.equ ADCCaddr_r = FOURTHBOOTSTART + 0x000e ; ADC Conversion Complete
.equ ERDYaddr_r = FOURTHBOOTSTART + 0x000f ; EEPROM Ready
.equ ACIaddr_r = FOURTHBOOTSTART + 0x0010 ; Analog Comparator
.equ TWIaddr_r = FOURTHBOOTSTART + 0x0011 ; 2-wire Serial Interface
.equ SPMRaddr_r = FOURTHBOOTSTART + 0x0012 ; Store Program Memory Ready
; .equ INT_VECTORS_SIZE = 19 ; size in words
Код: Выделить всё
.org 0x0000
INT0addr: jmp INT0addr_r ; External Interrupt Request 0
INT1addr: jmp INT1addr_r ; External Interrupt Request 1
OC2addr: jmp OC2addr_r ; Timer/Counter2 Compare Match
OVF2addr: jmp OVF2addr_r ; Timer/Counter2 Overflow
ICP1addr: jmp ICP1addr_r ; Timer/Counter1 Capture Event
OC1Aaddr: jmp OC1Aaddr_r ; Timer/Counter1 Compare Match A
OC1Baddr: jmp OC1Baddr_r ; Timer/Counter1 Compare Match B
OVF1addr: jmp OVF1addr_r ; Timer/Counter1 Overflow
OVF0addr: jmp OVF0addr_r ; Timer/Counter0 Overflow
SPIaddr: jmp SPIaddr_r ; Serial Transfer Complete
URXCaddr: jmp URXCaddr_r ; USART, Rx Complete
UDREaddr: jmp UDREaddr_r ; USART Data Register Empty
UTXCaddr: jmp UTXCaddr_r ; USART, Tx Complete
ADCCaddr: jmp ADCCaddr_r ; ADC Conversion Complete
ERDYaddr: jmp ERDYaddr_r ; EEPROM Ready
ACIaddr: jmp ACIaddr_r ; Analog Comparator
TWIaddr: jmp TWIaddr_r ; 2-wire Serial Interface
SPMRaddr: jmp SPMRaddr_r ; Store Program Memory Ready
; далее текст программы при необходимости
...............
; теперь область бутлоадера:
.org FOURTHBOOTSTART ; или иная область внутри области ПЗУ бутлоадера - это софт, а не аппаратная разметка***
INT0addr_r: jmp my_INT0 ; External Interrupt Request 0
INT1addr_r: jmp my_INT1 ; External Interrupt Request 1
OC2addr_r: jmp my_OC2 ; Timer/Counter2 Compare Match
OVF2addr_r: jmp my_OVF2 ; Timer/Counter2 Overflow
ICP1addr_r: jmp my_ICP1 ; Timer/Counter1 Capture Event
OC1Aaddr_r: jmp my_OC1A ; Timer/Counter1 Compare Match A
OC1Baddr_r: jmp my_OC1B ; Timer/Counter1 Compare Match B
OVF1addr_r: jmp my_OVF1 ; Timer/Counter1 Overflow
OVF0addr_r: jmp my_OVF0 ; Timer/Counter0 Overflow
SPIaddr_r: jmp my_SPI ; Serial Transfer Complete
URXCaddr_r: jmp my_URXC ; USART, Rx Complete
UDREaddr_r: jmp my_UDRE ; USART Data Register Empty
UTXCaddr_r: jmp my_UTXC ; USART, Tx Complete
ADCCaddr_r: jmp my_ADCC ; ; ADC Conversion Complete
ERDYaddr_r: jmp my_ERDY ; ; EEPROM Ready
ACIaddr_r: jmp my_ACI ; Analog Comparator
TWIaddr_r: jmp my_TWI ; 2-wire Serial Interface
SPMRaddr_r: jmp my_SPMR ; Store Program Memory Ready
; далее сам бутлоадер с соответствующими подпрограммами:
...................
my_INT0: reti ; External Interrupt Request 0
my_INT1: reti ; External Interrupt Request 1
my_OC2: reti ; Timer/Counter2 Compare Match
my_OVF2: reti ; Timer/Counter2 Overflow
my_ICP1: reti ; Timer/Counter1 Capture Event
my_OC1A: reti ; Timer/Counter1 Compare Match A
my_OC1B: reti ; Timer/Counter1 Compare Match B
my_OVF1: reti ; Timer/Counter1 Overflow
my_OVF0: reti ; Timer/Counter0 Overflow
my_SPI: reti ; Serial Transfer Complete
my_URXC: reti ; USART, Rx Complete
my_UDRE: reti ; USART Data Register Empty
my_UTXC: reti ; USART, Tx Complete
my_ADCC: reti ; ; ADC Conversion Complete
my_ERDY: reti ; ; EEPROM Ready
my_ACI: reti ; Analog Comparator
my_TWI: reti ; 2-wire Serial Interface
my_SPMR: reti ; Store Program Memory Ready
Код: Выделить всё
URXCaddr_r: ijmp ; USART, Rx Complete
UDREaddr_r: ijmp ; USART Data Register Empty
UTXCaddr_r: ijmp ; USART, Tx CompleteКод: Выделить всё
nachalo:
ldi R26, 1<<IVCE
out GICR, R26
SBR R26,1<<IVSEL
; ldi R26, 1<<IVSEL
out GICR, R26