Spi master operation example – Rainbow Electronics ATmega3290P_V User Manual

Page 190

Advertising
background image

190

ATmega329/3290/649/6490

2552H–AVR–11/06

SPI Master Operation
Example

The following code demonstrates how to use the USI module as a SPI Master:

SPITransfer:

sts

USIDR,r16

ldi

r16,(1<<USIOIF)

sts

USISR,r16

ldi

r16,(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)

SPITransfer_loop:

sts

USICR,r16

lds

r16, USISR

sbrs

r16, USIOIF

rjmp

SPITransfer_loop

lds

r16,USIDR

ret

The code is size optimized using only eight instructions (+ ret). The code example
assumes that the DO and USCK pins are enabled as output in the DDRE Register. The
value stored in register r16 prior to the function is called is transferred to the Slave
device, and when the transfer is completed the data received from the Slave is stored
back into the r16 Register.

The second and third instructions clears the USI Counter Overflow Flag and the USI
counter value. The fourth and fifth instruction set Three-wire mode, positive edge Shift
Register clock, count at USITC strobe, and toggle USCK. The loop is repeated 16 times.

Advertising