Atmega16(l) – Rainbow Electronics ATmega64L User Manual
Page 130

130
ATmega16(L)
2466B–09/01
The following code examples show how to initialize the SPI as a master and how to per-
form a simple transmission. DDR_SPI in the examples must be replaced by the actual
data direction register controlling the SPI pins. DD_MOSI, DD_MISO and DD_SCK
must be replaced by the actual data direction bits for these pins. For example if MOSI is
placed on pin PB5, replace DD_MOSI with DDB5 and DDR_SPI with DDRB.
Note:
1. The example code assumes that the part specific header file is included.
Assembly Code Example
SPI_MasterInit:
; Set MOSI and SCK output, all others input
ldi
r17,(1< out DDR_SPI,r17 ; Enable SPI, Master, set clock rate fck/16 ldi r17,(1< 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 void SPI_MasterInit(void) { /* Set MOSI and SCK output, all others input */ DDR_SPI = (1< /* Enable SPI, Master, set clock rate fck/16 */ SPCR = (1< } void SPI_MasterTransmit(char cData) { /* Start transmission */ SPDR = cData; /* Wait for transmission complete */ while (!(SPSR & (1< ; }