diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2011-06-16 07:23:37 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2011-06-16 07:23:37 +0000 |
commit | f10126a95e528a04b4ec6be1d0fc30be4fbb7e98 (patch) | |
tree | 2c6e32dc8d510eacdd489fd86b6651b9246c864d /LUFA/Drivers/Peripheral | |
parent | d8fe01f19a48b960f5f82735b38ab798d07f2891 (diff) | |
download | lufa-f10126a95e528a04b4ec6be1d0fc30be4fbb7e98.tar.gz lufa-f10126a95e528a04b4ec6be1d0fc30be4fbb7e98.tar.bz2 lufa-f10126a95e528a04b4ec6be1d0fc30be4fbb7e98.zip |
Added new \ref SPI_GetCurrentMode() function to the SPI peripheral driver.
Diffstat (limited to 'LUFA/Drivers/Peripheral')
-rw-r--r-- | LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h b/LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h index 36e7de3f0..2caacaa00 100644 --- a/LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h +++ b/LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h @@ -167,16 +167,23 @@ */ static inline void SPI_Init(const uint8_t SPIOptions) { - DDRB |= ((1 << 1) | (1 << 2)); - DDRB &= ~((1 << 0) | (1 << 3)); - PORTB |= ((1 << 0) | (1 << 3)); + /* Prevent high rise times on PB.0 (/SS) from forcing a change to SPI slave mode */ + DDRB |= (1 << 0); + PORTB |= (1 << 0); - SPCR = ((1 << SPE) | SPIOptions); + DDRB |= ((1 << 1) | (1 << 2)); + DDRB &= ~(1 << 3); + PORTB |= (1 << 3); if (SPIOptions & SPI_USE_DOUBLESPEED) SPSR |= (1 << SPI2X); else SPSR &= ~(1 << SPI2X); + + /* Switch /SS to input mode after configuration to allow for forced mode changes */ + DDRB &= ~(1 << 0); + + SPCR = ((1 << SPE) | SPIOptions); } /** Turns off the SPI driver, disabling and returning used hardware to their default configuration. */ @@ -188,6 +195,15 @@ SPCR = 0; SPSR = 0; } + + /** Retrieves the currently selected SPI mode, once the SPI interface has been configured. + * + * \return \ref SPI_MODE_MASTER if the interface is currently in SPI Master mode, \ref SPI_MODE_SLAVE otherwise + */ + static inline uint8_t SPI_GetCurrentMode(void) + { + return (SPCR & SPI_MODE_MASTER); + } /** Sends and receives a byte through the SPI interface, blocking until the transfer is complete. * |