X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=firmware%2Fapps%2Fradios%2Fccspi.c;h=377a5f0cbe4c2a66a6e1cbf8926ee271da9d00c5;hp=e1cb9bb8cdf7bafee225f1a0439484dddaf25700;hb=ca4deae50d7d2098d372d903d33879f9f951c75c;hpb=5e2476a1d3fe898f77f6bca399bbff63bb420a2d diff --git a/firmware/apps/radios/ccspi.c b/firmware/apps/radios/ccspi.c index e1cb9bb..377a5f0 100644 --- a/firmware/apps/radios/ccspi.c +++ b/firmware/apps/radios/ccspi.c @@ -1,6 +1,11 @@ /*! \file ccspi.c \author Travis Goodspeed \brief Chipcon SPI Register Interface + + Unfortunately, there is very little similarity between the CC2420 + and the CC2500, to name just two of the myriad of Chipcon SPI + radios. Auto-detection will be a bit difficult, but more to the + point, all high level functionality must be moved into the client. */ //Higher level left to client application. @@ -15,20 +20,48 @@ #include "ccspi.h" #include "spi.h" +//! Handles a Chipcon SPI command. +void ccspi_handle_fn( uint8_t const app, + uint8_t const verb, + uint32_t const len); + +// define the ccspi app's app_t +app_t const ccspi_app = { + + /* app number */ + CCSPI, -#define RADIOACTIVE SETCE -#define RADIOPASSIVE CLRCE + /* handle fn */ + ccspi_handle_fn, + + /* name */ + "CCSPI", + + /* desc */ + "\tThe CCSPI app adds support for the Chipcon SPI register\n" + "\tinterface. Unfortunately, there is very little similarity\n" + "\tbetween the CC2420 and the CC2500, to name just two of the\n" + "\tmyriad of Chipcon SPI radios. Auto-detection will be a bit\n" + "\tdifficult, but more to the point, all high level functionality\n" + "\tmust be moved into the client.\n" +}; //! Set up the pins for CCSPI mode. void ccspisetup(){ - SETSS; - P5DIR&=~MISO; - P5DIR|=MOSI+SCK; + SPIDIR&=~MISO; + SPIDIR|=MOSI+SCK; DIRSS; DIRCE; + P4OUT|=BIT5; //activate CC2420 voltage regulator + msdelay(100); + + //Reset the CC2420. + P4OUT&=~BIT6; + P4OUT|=BIT6; + //Begin a new transaction. - CLRSS; + CLRSS; SETSS; } @@ -81,78 +114,126 @@ u8 ccspi_regread(u8 reg, u8 *buf, int len){ } //! Handles a Chipcon SPI command. -void ccspihandle(unsigned char app, - unsigned char verb, - unsigned long len){ +void ccspi_handle_fn( uint8_t const app, + uint8_t const verb, + uint32_t const len){ unsigned long i; - //Drop CE to passify radio. - RADIOPASSIVE; - //Raise !SS to end transaction, just in case we forgot. - SETSS; - ccspisetup(); + //debugstr("Chipcon SPI handler."); switch(verb){ - //PEEK and POKE might come later. - case READ: + case PEEK: + cmddata[0]|=0x40; //Set the read bit. + //DO NOT BREAK HERE. + case READ: case WRITE: + case POKE: CLRSS; //Drop !SS to begin transaction. for(i=0;i