diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2010-04-25 23:26:16 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2010-04-25 23:26:16 +0000 |
commit | fa54579c9d299591d9cb19b66ba0b34927a9a0a4 (patch) | |
tree | 9ba4ff1362abe1d2f4fd8a7e62479edd8c6e102f /nuttx/drivers/net/enc28j60.c | |
parent | 8f0c960b94b589ceb73e12fe631a333e098f966f (diff) | |
download | px4-nuttx-fa54579c9d299591d9cb19b66ba0b34927a9a0a4.tar.gz px4-nuttx-fa54579c9d299591d9cb19b66ba0b34927a9a0a4.tar.bz2 px4-nuttx-fa54579c9d299591d9cb19b66ba0b34927a9a0a4.zip |
Add SPI buffer read/write logic
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2629 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/drivers/net/enc28j60.c')
-rwxr-xr-x | nuttx/drivers/net/enc28j60.c | 88 |
1 files changed, 82 insertions, 6 deletions
diff --git a/nuttx/drivers/net/enc28j60.c b/nuttx/drivers/net/enc28j60.c index 87ae285f6..ad828c43b 100755 --- a/nuttx/drivers/net/enc28j60.c +++ b/nuttx/drivers/net/enc28j60.c @@ -163,6 +163,9 @@ static inline uint8_t enc28j60_deselect(FAR struct spi_dev_s *spi); static uint8_t enc28j60_select(FAR struct spi_dev_s *spi); static uint8_t enc28j60_deselect(FAR struct spi_dev_s *spi); #endif + +/* SPI control register access */ + static uint8_t enc28j60_rdglobal2(FAR struct enc28j60_driver_s *priv, uint8_t cmd); static void enc28j60_wrglobal2(FAR struct enc28j60_driver_s *priv, @@ -173,6 +176,13 @@ static uint8_t enc28j60_rdbank(FAR struct enc28j60_driver_s *priv, static uint8_t enc28j60_rdphymac(FAR struct enc28j60_driver_s *priv, uint8_t ctrlreg); +/* SPI buffer transfers */ + +static void enc28j60_rdbuffer(FAR struct enc28j60_driver_s *priv, + FAR uint8_t *buffer, size_t buflen); +static void enc28j60_wrbuffer(FAR struct enc28j60_driver_s *priv, + FAR const uint8_t *buffer, size_t buflen); + /* Common TX logic */ static int enc28j60_transmit(FAR struct enc28j60_driver_s *priv); @@ -240,7 +250,7 @@ static inline uint8_t enc28j60_select(FAR struct spi_dev_s *spi) #else static uint8_t enc28j60_select(FAR struct spi_dev_s *spi) { - /* Select ENC2J60 chip (locking the SPI bus in case there are multiple + /* Select ENC28J60 chip (locking the SPI bus in case there are multiple * devices competing for the SPI bus */ @@ -302,7 +312,7 @@ static uint8_t enc28j60_rdglobal2(FAR struct enc28j60_driver_s *priv, DEBUGASSERT(priv && priv->spi); spi = priv->spi; - /* Select ENC2J60 chip */ + /* Select ENC28J60 chip */ enc28j60_select(spi); @@ -333,7 +343,7 @@ static void enc28j60_wrglobal2(FAR struct enc28j60_driver_s *priv, DEBUGASSERT(priv && priv->spi); spi = priv->spi; - /* Select ENC2J60 chip */ + /* Select ENC28J60 chip */ enc28j60_select(spi); @@ -351,6 +361,72 @@ static void enc28j60_wrglobal2(FAR struct enc28j60_driver_s *priv, } /**************************************************************************** + * Function: enc28j60_rdbuffer + * + * Description: + * Read a buffer of data. + * + ****************************************************************************/ + +static void enc28j60_rdbuffer(FAR struct enc28j60_driver_s *priv, + FAR uint8_t *buffer, size_t buflen) +{ + FAR struct spi_dev_s *spi; + + DEBUGASSERT(priv && priv->spi); + spi = priv->spi; + + /* Select ENC28J60 chip */ + + enc28j60_select(spi); + + /* Send the read buffer memory command (ignoring the response) */ + + (void)SPI_SEND(spi, ENC28J60_RBM); + + /* Then read the buffer data */ + + SPI_RECVBLOCK(spi, buffer, buflen); + + /* De-select ENC28J60 chip. */ + + enc28j60_deselect(spi); +} + +/**************************************************************************** + * Function: enc28j60_wrbuffer + * + * Description: + * Write a buffer of data. + * + ****************************************************************************/ + +static void enc28j60_wrbuffer(FAR struct enc28j60_driver_s *priv, + FAR const uint8_t *buffer, size_t buflen) +{ + FAR struct spi_dev_s *spi; + + DEBUGASSERT(priv && priv->spi); + spi = priv->spi; + + /* Select ENC28J60 chip */ + + enc28j60_select(spi); + + /* Send the write buffer memory command (ignoring the response) */ + + (void)SPI_SEND(spi, ENC28J60_WBM); + + /* Then send the buffer */ + + SPI_SNDBLOCK(spi, buffer, buflen); + + /* De-select ENC28J60 chip. */ + + enc28j60_deselect(spi); +} + +/**************************************************************************** * Function: enc28j60_setbank * * Description: @@ -401,7 +477,7 @@ static uint8_t enc28j60_rdbank(FAR struct enc28j60_driver_s *priv, DEBUGASSERT(priv && priv->spi); spi = priv->spi; - /* Select ENC2J60 chip */ + /* Select ENC28J60 chip */ enc28j60_select(spi); @@ -438,7 +514,7 @@ static uint8_t enc28j60_rdphymac(FAR struct enc28j60_driver_s *priv, DEBUGASSERT(priv && priv->spi); spi = priv->spi; - /* Select ENC2J60 chip */ + /* Select ENC28J60 chip */ enc28j60_select(spi); @@ -476,7 +552,7 @@ static void enc28j60_wrbank(FAR struct enc28j60_driver_s *priv, DEBUGASSERT(priv && priv->spi); spi = priv->spi; - /* Select ENC2J60 chip */ + /* Select ENC28J60 chip */ enc28j60_select(spi); |