Commit a7d538ddb31a6cc7f0511c4d4a15d1ff5e42871b
authorPhilip Withnall <philip@tecnocode.co.uk>
Sat, 1 Dec 2012 10:00:20 +0000 (10:00 +0000)
committerMichel Pollet <buserror@gmail.com>
Thu, 9 Jan 2014 08:57:32 +0000 (08:57 +0000)
treeb62bb34079b7c78655bef447068311681d278a1b
parent26ebc9917ec7b343165121b8675c12f6373481ea
Message:
spi: Clear SPIF when writing to SPDR

The manual says the SPIF bit is cleared when accessing (i.e. reading _or_
writing) the SPDR register after an interrupt is raised. By clearing SPIF
on a write to SPDR, the following code starts to work:

   SPDR = 0xff; loop_until_bit_is_set (SPSR, SPIF);
   SPDR = 0x00; loop_until_bit_is_set (SPSR, SPIF);

(where the bytes are arbitrarily chosen). This didn’t work before as the
SPIF bit wasn’t cleared by the second write to SPDR, so the second loop
turned into a no-op. This caused the write timer for the first byte to be
overwritten by the write timer for the second. Consequently, the first byte
never got transmitted.

Signed-off-by: Michel Pollet <buserror@gmail.com>
simavr/sim/avr_spi.c