X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=firmware%2Fapps%2Fradios%2Fnrf.c;h=ca701130eee5a896609bd16181be5d98048a89b2;hb=b3867f4248b4258ba1c1d75b96e4da35a6064e92;hp=6b2ad59b095472b0865a4f4b1fe330100a987e2b;hpb=17693c959ca627716d8d44c12d16a13d38a293f3;p=goodfet diff --git a/firmware/apps/radios/nrf.c b/firmware/apps/radios/nrf.c index 6b2ad59..ca70113 100644 --- a/firmware/apps/radios/nrf.c +++ b/firmware/apps/radios/nrf.c @@ -15,33 +15,25 @@ #include "nrf.h" #include "spi.h" -//Weird HOPE badge wiring. This was a fuckup. -//BIT0 should be SS, but in point of fact it is IRQ. -//BIT4 is actually SS, BIT5 is CE. -#define SS BIT4 - -//This could be more accurate. -//Does it ever need to be? -#define NRFSPEED 0 -#define NRFDELAY(x) -//delay(x) +#define RADIOACTIVE SETCE +#define RADIOPASSIVE CLRCE //! Set up the pins for NRF mode. void nrfsetup(){ - P5OUT=SS; + SETSS; P5DIR&=~MISO; - P5DIR|=MOSI+SCK+SS; - + P5DIR|=MOSI+SCK; + DIRSS; + DIRCE; //Begin a new transaction. - P5OUT&=~SS; - P5OUT|=SS; + CLRSS; + SETSS; } - //! Read and write an NRF byte. -unsigned char nrftrans8(unsigned char byte){ +u8 nrftrans8(u8 byte){ register unsigned int bit; //This function came from the NRF Wikipedia article. //Minor alterations. @@ -65,49 +57,102 @@ unsigned char nrftrans8(unsigned char byte){ } +//! Writes a register +u8 nrf_regwrite(u8 reg, const u8 *buf, int len){ + CLRSS; + + reg=nrftrans8(reg); + while(len--) + nrftrans8(*buf++); + + SETSS; + return reg;//status +} +//! Reads a register +u8 nrf_regread(u8 reg, u8 *buf, int len){ + CLRSS; + + reg=nrftrans8(reg); + while(len--) + *buf++=nrftrans8(0); + + SETSS; + return reg;//status +} + //! Handles a Nordic RF command. void nrfhandle(unsigned char app, unsigned char verb, unsigned long len){ unsigned long i; + //Drop CE to passify radio. + RADIOPASSIVE; //Raise !SS to end transaction, just in case we forgot. - P5OUT|=SS; + SETSS; nrfsetup(); - + switch(verb){ //PEEK and POKE might come later. - case READ: + case READ: case WRITE: - P5OUT&=~SS; //Drop !SS to begin transaction. + CLRSS; //Drop !SS to begin transaction. for(i=0;i