Люди добрые! Подскажите! То ли в AVRStudio глюк, то ли я заработался.
В AVRStudio v4.10 запускаю такую вещь:
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc"
.def temp=r16
.CSEG
.org 0
rjmp RESET
nop
.
.
rjmp SPI;
.
.
nop
;****** обработка RESET ******************
RESET:
cli ;запрещение прерываний
ldi temp,low(RAMEND) ;инициализация стека
out SPL,temp ; --"--
ldi temp,(1<<PB0)+(1<<PB3)+(1<<PB5) ;определение линий
;порта B как выходных
out DDRB,temp ;PB0 - линия CS внешнего
;ЦАП с интерфейсом SPI, PB3 - ;линия MOSI, PB5 - линия SCK
ldi temp,1<<PB0 ;установка PB0 - запрет выбора
out PORTB,temp ;внешнего ЦАП
ldi temp,(1<<SPIE)+(1<<SPE)+(1<<MSTR) ;SPIE - разрешение
;прерывания SPI, SPE - ;разешение работы SPI
;MSTR - определение AVR
;как мастера
out SPCR,temp ;инициализация SPI
sei ;разрешение прерываний
ldi XH,high(0xffff) ;подготовка данных для
ldi XL,low0xffff) ;загрузки по SPI
cbi PORTB,PB0 ;сброс PB0 -разрешение
;работы внешнего ЦАП
out SPDR,XH ;передача данных
out SPDR,XL ;по SPI
sbi PORTB,PB0
reti
;****** обработка IRQ *********************
SPI: reti
при пошаговой отладке сразу же после разрешения прерываний (командой sei) вызывается обработка SPI, хотя, насколько я знаю, обработка SPI вызывается ПОСЛЕ ПЕРЕДАЧИ ДАННЫХ, а, в свою очередь, передача данных начинается только ПОСЛЕ ЗАГРУЗКИ РЕГИСТРА SPDR, которая у меня производится после общего разрешения прерываний!
Где затык?