Gestione SPI su ATMEGA 328P

di il
0 risposte

Gestione SPI su ATMEGA 328P

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.

Devi accedere o registrarti per scrivere nel forum
0 risposte