Люди добрые! Подскажите! То ли в 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, которая у меня производится после общего разрешения прерываний! Где затык?
|