3 spi slave operation example, 4 two-wire mode, Attiny43u – Rainbow Electronics ATtiny43U User Manual
Page 104

104
8048B–AVR–03/09
ATtiny43U
14.3.3
SPI Slave Operation Example
The following code demonstrates how to use the USI module as a SPI Slave:
init:
ldi
r16,(1< out USICR,r16 ... SlaveSPITransfer: out USIDR,r16 ldi r16,(1< out USISR,r16 SlaveSPITransfer_loop: in r16, USISR sbrs r16, USIOIF rjmp SlaveSPITransfer_loop in r16,USIDR ret The code is size optimized using only eight instructions (plus return). The code example Note that the first two instructions are for initialization, only, and need only be executed once. 14.3.4 Two-wire Mode The USI two-wire mode is compliant to the Inter IC (TWI) bus protocol, but without slew rate lim- shows two USI units operating in two-wire mode, one as master and one as slave. It is only the physical layer that is shown since the system operation is highly dependent of the Clock generation must be implemented in software, but the shift operation is done automatically Since the clock also increments the counter, a counter overflow can be used to indicate that the
assumes that the DO and USCK pins have been enabled as outputs in DDRA. The value stored
in register r16 prior to the function is called is transferred to the master device, and when the
transfer is completed the data received from the master is stored back into the register r16.
These instructions set three-wire mode and positive edge clock. The loop is repeated until the
USI Counter Overflow Flag is set.
iting on outputs and without input noise filtering. Pin names used in this mode are SCL and SDA.
communication scheme used. The main differences between the master and slave operation at
this level is the serial clock generation which is always done by the master. Only the slave uses
the clock control unit.
in both devices. Note that clocking only on negative edges for shifting data is of practical use in
this mode. The slave can insert wait states at start or end of transfer by forcing the SCL clock
low. This means that the master must always check if the SCL line was actually released after it
has generated a positive edge.
transfer is completed. The clock is generated by the master by toggling the USCK pin via the
PORTA register.