summaryrefslogtreecommitdiff
path: root/nuttx/drivers/net/enc28j60.c
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2010-04-25 23:26:16 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2010-04-25 23:26:16 +0000
commitfa54579c9d299591d9cb19b66ba0b34927a9a0a4 (patch)
tree9ba4ff1362abe1d2f4fd8a7e62479edd8c6e102f /nuttx/drivers/net/enc28j60.c
parent8f0c960b94b589ceb73e12fe631a333e098f966f (diff)
downloadpx4-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-xnuttx/drivers/net/enc28j60.c88
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);