ATMEGA325-16AJ ATMEL [ATMEL Corporation], ATMEGA325-16AJ Datasheet - Page 179

no-image

ATMEGA325-16AJ

Manufacturer Part Number
ATMEGA325-16AJ
Description
8-bit Microcontroller with In-System Programmable Flash
Manufacturer
ATMEL [ATMEL Corporation]
Datasheet
SPI Master Operation
Example
2570A–AVR–09/04
Figure 78. Three-wire Mode, Timing Diagram
The Three-wire mode timing is shown in Figure 78. At the top of the figure is a USCK
cycle reference. One bit is shifted into the USI Shift Register (USIDR) for each of these
cycles. The USCK timing is shown for both external clock modes. In External Clock
mode 0 (USICS0 = 0), DI is sampled at positive edges, and DO is changed (Data Regis-
ter is shifted by one) at negative edges. External Clock mode 1 (USICS0 = 1) uses the
opposite edges versus mode 0, i.e., samples data at negative and changes the output at
positive edges. The USI clock modes corresponds to the SPI data mode 0 and 1.
Referring to the timing diagram (Figure 78.), a bus transfer involves the following steps:
1. The Slave device and Master device sets up its data output and, depending on
2. The Master generates a clock pulse by software toggling the USCK line twice (C
3. Step 2. is repeated eight times for a complete register (byte) transfer.
4. After eight clock pulses (i.e., 16 clock edges) the counter will overflow and indi-
The following code demonstrates how to use the USI module as a SPI Master:
CYCLE
USCK
USCK
the protocol used, enables its output driver (mark A and B). The output is set up
by writing the data to be transmitted to the Serial Data Register. Enabling of the
output is done by setting the corresponding bit in the port Data Direction Regis-
ter. Note that point A and B does not have any specific order, but both must be at
least one half USCK cycle before point C where the data is sampled. This must
be done to ensure that the data setup requirement is satisfied. The 4-bit counter
is reset to zero.
and D). The bit value on the slave and master’s data input (DI) pin is sampled by
the USI on the first edge (C), and the data output is changed on the opposite
edge (D). The 4-bit counter will count both edges.
cate that the transfer is completed. The data bytes transferred must now be
processed before a new transfer can be initiated. The overflow interrupt will wake
up the processor if it is set to Idle mode. Depending of the protocol used the
slave device can now set its output to high impedance.
SPITransfer:
SPITransfer_loop:
DO
DI
sts
ldi
sts
ldi
sts
lds
sbrs
rjmp
lds
( Reference )
A
USIDR,r16
r16,(1<<USIOIF)
USISR,r16
r16,(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)
USICR,r16
r16, USISR
r16, USIOIF
SPITransfer_loop
r16,USIDR
B
MSB
MSB
C
1
D
2
6
6
3
5
5
ATmega325/3250/645/6450
4
4
4
5
3
3
6
2
2
7
1
1
LSB
LSB
8
E
179

Related parts for ATMEGA325-16AJ