Salve a tutti, sono da poco entrato nel forum, e spero di poter contribuire e ricevere contributi.
Mi sto avventurando nella programmazione in Assembly per la famiglia AVR, in particolare per il 328P.
Sto riscontrando problemi nell'esecuzione del codice per l'inizializzazione e scrittura dati tramite protocollo SPI, che riporto in seguito:
.equ SS=PB2
.equ MOSI=PB3
.equ SCK=PB5
.equ MISO=PB4
SPI_Init:
ldi r16, (1<<MOSI)|(1<<SCK)|(1<<SS);
out DDRB,r16 ; Imposta i pin MOSI-SCK-SS come Output
ldi r16, (0<<MISO)
out DDRB,r16
ldi r16,SS
out PORTB,r16 ; Porta alto SS per avviare la trasmissione
ldi r16,(1<<SPE)|(1<<MSTR)|(1<<SPR1);Abilita lo SPI in modalità master con Fosc/16
out SPCR,r16
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SPI_WRITE:
ldi r17,'a'
sts SPDR, r17 ; Scrivi il dato nel registro di trasmissione
/*Attende_trasmissione:
sbrs SPSR, SPIF ; Aspetta che la trasmissione sia completa
rjmp loop
sbi PB0, 0
RET
*/
Attende_trasmissione:
in r16, SPSR
sbrs r16, SPIF
rjmp Attende_trasmissione
ret
Monitorando le uscite con un analizzatore logico software, che simula il protocollo SPI, non riesco purtroppo a vedere il dato in ingresso: cosa c'è di sbagliato secondo voi nel codice?
Grazie a tutti.