Datasheet

161
ATmega169A/PA/329A/PA/649A/P/3290A/PA/6490A/P [DATASHEET]
8284E–AVR–02/2013
The following code examples show how to initialize the SPI as a Master and how to perform a simple transmission. DDR_ SPI in the examples mus t be replaced by the actual Da ta Directio n Register cont rolling the S PI pins. DD_MOSI, DD_MISO an d DD_SCK mus t be replaced by the actual d ata direction b its for these pin s. E.g. if MO SI is placed o n pin PB5, rep lace DD_MOSI w ith DDB5 an d DDR_SPI with DDRB.
Note: 1. See ”About code examples” on page 11.
Assembly code example
(1)
SPI_MasterInit:
; Set MOSI and SCK output, all others input
ldi r17,(1<<DD_MOSI)|(1<<DD_SCK)
out DDR_SPI,r17
; Enable SPI, Master, set clock rate fck/16
ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r17
ret
SPI_MasterTransmit:
; Start transmission of data (r16)
out SPDR,r16
Wait_Transmit:
; Wait for transmission complete
sbis SPSR,SPIF
rjmp Wait_Transmit
ret
C code example
(1)
void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}
void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)))
;
}