From b0d8f22f3492fbb3f6dc0e8026e63c803af59007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Sat, 17 Oct 2015 15:40:51 +0200 Subject: Complete commit of current work --- src/spi.c | 59 ++++++++++++++--------------------------------------------- 1 file changed, 14 insertions(+), 45 deletions(-) (limited to 'src/spi.c') diff --git a/src/spi.c b/src/spi.c index 262f402..4c0293c 100644 --- a/src/spi.c +++ b/src/spi.c @@ -1,54 +1,23 @@ -#include "../spi.h" +#ifdef CONFIG_IOE_SPI +#ifdef MCUSUPPORT_USART volatile int8_t _spi_busy; -inline void spi_init(enum spiMode mode) { - _spi_busy = 0; - if (mode == SPI_MODE_MASTER) { - // Set MOSI and SCK output - DDR_SPI |= _BV(DD_MOSI) | _BV(DD_SCLK); - // Set MISO pull up resistor - PORT_SPI |= _BV(PORT_MISO); - // Enable SPI master, set clock rate fck/16 and enable SPI interrupt - SPCR = _BV(SPE) | _BV(SPIE) | _BV(MSTR) | _BV(SPR0); - } else { - // Set MISO as output - DDR_SPI |= _BV(DD_MISO); - // Set SCLK and MOSI pull up resistor - PORT_SPI |= _BV(PORT_SCLK) | _BV(PORT_MOSI); - // Enable SPI and interrupt - SPCR = _BV(SPE) | _BV(SPIE); - } -} - -inline int8_t spi_busy(void) { - return _spi_busy; -} - -inline void spi_join(void) { - while (spi_busy()); -} - -inline uint8_t spi_send(uint8_t data) { - spi_transfer(data); - while (spi_busy()); - return SPDR; -} - -inline void spi_transfer(uint8_t data) { - _spi_busy = 1; - SPDR = data; -} - -inline void spi_expose(uint8_t data) { - SPDR = data; -} - ////// Interrupts //////////////////////////////// -void (*spi_receive)(uint8_t data) = 0; +void (*spi_receive) (uint8_t data) = 0; + +#ifdef CONFIG_IOE_CAN_MCP2515 +extern void can_mcp2515_spi_hook(uint8_t); +#endif /* CONFIG_IOE_CAN_MCP2515 */ -SIGNAL(SPI_STC_vect) { +ISR(SPI_STC_vect, ISR_BLOCK) { _spi_busy = 0; +#ifdef CONFIG_IOE_CAN_MCP2515 + can_mcp2515_spi_hook(SPDR); +#endif /* CONFIG_IOE_CAN_MCP2515 */ if (spi_receive) spi_receive(SPDR); } + +#endif /* MCUSUPPORT_SPI */ +#endif /* CONFIG_IOE_SPI */ -- cgit v1.2.3