From 1af41c4c074f83bc777be4b6dd85e8408d03e5e5 Mon Sep 17 00:00:00 2001 From: Nélio Laranjeiro Date: Tue, 12 Feb 2008 00:25:23 +0100 Subject: Removed the test_host. Update the interruption function. Debugged the driver source file. Init tested. --- digital/avr/modules/spi/spi.c | 43 +++++++++---- digital/avr/modules/spi/spi.h | 37 ++++++++--- digital/avr/modules/spi/test/Makefile | 4 +- digital/avr/modules/spi/test/spi_host.c | 107 -------------------------------- digital/avr/modules/spi/test/test_spi.c | 31 +++++++-- 5 files changed, 87 insertions(+), 135 deletions(-) delete mode 100644 digital/avr/modules/spi/test/spi_host.c (limited to 'digital') diff --git a/digital/avr/modules/spi/spi.c b/digital/avr/modules/spi/spi.c index e99055e0..1098b260 100644 --- a/digital/avr/modules/spi/spi.c +++ b/digital/avr/modules/spi/spi.c @@ -22,8 +22,20 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * }}} */ +#include "io.h" +#include "common.h" #include "spi.h" +#define SPI_DIRVER_SIGNAL SIGNAL_SPI + +/** For host */ +#ifdef HOST +static uint8_t SPCR; +static uint8_t SPDR; +static uint8_t SPSR; +static uint8_t SPIF; +#endif + /** Spi driver context. */ static spi_t spi_global; @@ -35,9 +47,10 @@ static spi_t spi_global; void spi_init(uint8_t sprc, spi_recv_cb_t cb, void *user_data) { - SPRC = sprc; - spi_global.cb = cb; + SPCR = sprc; + spi_global.recv_cb = cb; spi_global.recv_user_data = user_data; + spi_global.interruption = sprc >> 7; } /** Send a data to the Slave. @@ -45,9 +58,11 @@ spi_init(uint8_t sprc, spi_recv_cb_t cb, void *user_data) * \param length the length of the data in bytes. */ void -spi_send(uint8_t *data, u8 length) +spi_send(uint8_t *data, uint8_t length) { - uint i; + uint8_t i; + // enables the SPI if not enabled. + SPCR |= SPI_ENABLE; for ( i = 0; i < length; i++) { @@ -55,16 +70,19 @@ spi_send(uint8_t *data, u8 length) // automatically. SPDR = data[i]; - // Wait the end of the transmission. - while(!(SPSR & (1< -#include "io.h" -#include "common.h" -#include "modules/proto/proto.h" -#include "modules/spi/spi.h" - -/** Spi driver context. */ -static spi_t spi_global; - -#ifdef HOST -static volatile uint8_t SPCR; -static volatile uint8_t SPDR; -static volatile uint8_t SPSR; -#endif - -/** Initialise the SPI Control Register. - * \param sprc the sprc register data to be store in the register. - * \param cb the function call back to call the user which receive the data. - * \param user_data the user data to be provieded in the function call back. - */ -void -spi_init(uint8_t sprc, spi_recv_cb_t cb, void *user_data) -{ - SPCR = sprc; - spi_global.recv_cb = cb; - spi_global.recv_user_data = user_data; -} - -/** Uninitialise the SPI module. - * Unused on the target - */ -void -spi_uninit (void) -{ -} - -/** Send a data to the Slave. - * \param data the data to send - * \param length the length of the data in bytes. - */ -void -spi_send(uint8_t *data, u8 length) -{ - uint8_t i; - - for ( i = 0; i < length; i++) - { - proto_send0 (data[i]); - } -} - -/** Receive a data from the SPI bus. - * \return the data received from the bus. - */ -uint8_t -spi_recv(void) -{ - return SPDR; -} - -/** Return the status register from the SPI driver. - * \return the status register value - */ -uint8_t -spi_status(void) -{ - return SPSR; -} - -/** Function called by the interruption if an IT is requested. - * - */ -void -spi_catch_it(void) -{ - // call the call back. - (*spi_global.recv_cb) (spi_global.recv_user_data); -} - -void -proto_callback (uint8_t cmd, uint8_t size, uint8_t *args) -{ -} diff --git a/digital/avr/modules/spi/test/test_spi.c b/digital/avr/modules/spi/test/test_spi.c index 08e34db7..a6060b8b 100644 --- a/digital/avr/modules/spi/test/test_spi.c +++ b/digital/avr/modules/spi/test/test_spi.c @@ -27,13 +27,9 @@ #include "io.h" #include "../spi.h" -#ifdef HOST -extern volatile uint8_t SPDR; -#endif - /** Call back function to be called on the AVR interruption */ void -spi_interruption_function (void *user_data) +spi_interruption_function (void *user_data, uint8_t data) { } @@ -43,6 +39,31 @@ main (void) uint8_t test [10]; uint8_t res; + res = SPI_IT_ENABLE; + spi_init (res, spi_interruption_function, 0x0); + res = SPI_IT_DISABLE; + spi_init (res, spi_interruption_function, 0x0); + res = SPI_ENABLE; + spi_init (res, spi_interruption_function, 0x0); + res = SPI_DISABLE; + spi_init (res, spi_interruption_function, 0x0); + res = SPI_LSB_FIRST; + spi_init (res, spi_interruption_function, 0x0); + res = SPI_MSB_FIRST; + spi_init (res, spi_interruption_function, 0x0); + res = SPI_MASTER; + spi_init (res, spi_interruption_function, 0x0); + res = SPI_SLAVE; + spi_init (res, spi_interruption_function, 0x0); + res = SPI_CPOL_RISING; + spi_init (res, spi_interruption_function, 0x0); + res = SPI_CPOL_FALLING; + spi_init (res, spi_interruption_function, 0x0); + res = SPI_CPHA_SAMPLE; + spi_init (res, spi_interruption_function, 0x0); + res = SPI_CPHA_SETUP; + spi_init (res, spi_interruption_function, 0x0); + //initialise the spi. spi_init (0x14, spi_interruption_function, 0x0); -- cgit v1.2.3