X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Fchips%2Frf230%2FRF230LayerP.nc;h=fb429b933b54b5d26c7b1feb361b397e71a0fd85;hb=d4dbb904d4c5a34dcacf5fc657ceb6023a421159;hp=9c0a3624459c23831c40a21e984dadd8b4e1a340;hpb=60f8c4ec4b792c6a99d5ef66ee413e8712a10a1e;p=tinyos-2.x.git diff --git a/tos/chips/rf230/RF230LayerP.nc b/tos/chips/rf230/RF230LayerP.nc index 9c0a3624..fb429b93 100644 --- a/tos/chips/rf230/RF230LayerP.nc +++ b/tos/chips/rf230/RF230LayerP.nc @@ -26,6 +26,7 @@ #include #include #include +#include module RF230LayerP { @@ -45,8 +46,7 @@ module RF230LayerP interface GeneralIO as SELN; interface Resource as SpiResource; - interface SpiByte; - interface HplRF230; + interface FastSpiByte; interface GeneralIO as SLP_TR; interface GeneralIO as RSTN; @@ -126,9 +126,9 @@ implementation ASSERT( reg == (reg & RF230_CMD_REGISTER_MASK) ); call SELN.clr(); - call HplRF230.spiSplitWrite(RF230_CMD_REGISTER_WRITE | reg); - call HplRF230.spiSplitReadWrite(value); - call HplRF230.spiSplitRead(); + call FastSpiByte.splitWrite(RF230_CMD_REGISTER_WRITE | reg); + call FastSpiByte.splitReadWrite(value); + call FastSpiByte.splitRead(); call SELN.set(); } @@ -138,9 +138,9 @@ implementation ASSERT( reg == (reg & RF230_CMD_REGISTER_MASK) ); call SELN.clr(); - call HplRF230.spiSplitWrite(RF230_CMD_REGISTER_READ | reg); - call HplRF230.spiSplitReadWrite(0); - reg = call HplRF230.spiSplitRead(); + call FastSpiByte.splitWrite(RF230_CMD_REGISTER_READ | reg); + call FastSpiByte.splitReadWrite(0); + reg = call FastSpiByte.splitRead(); call SELN.set(); return reg; @@ -150,11 +150,11 @@ implementation enum { - SLEEP_WAKEUP_TIME = (uint16_t)(880 * RF230_ALARM_SEC / 1000000UL), - CCA_REQUEST_TIME = (uint16_t)(140 * RF230_ALARM_SEC / 1000000UL), + SLEEP_WAKEUP_TIME = (uint16_t)(880 * RADIO_ALARM_MICROSEC), + CCA_REQUEST_TIME = (uint16_t)(140 * RADIO_ALARM_MICROSEC), - TX_SFD_DELAY = (uint16_t)(176 * RF230_ALARM_SEC / 1000000UL), - RX_SFD_DELAY = (uint16_t)(8 * RF230_ALARM_SEC / 1000000UL), + TX_SFD_DELAY = (uint16_t)(176 * RADIO_ALARM_MICROSEC), + RX_SFD_DELAY = (uint16_t)(8 * RADIO_ALARM_MICROSEC), }; tasklet_async event void RadioAlarm.fired() @@ -324,6 +324,9 @@ implementation readRegister(RF230_IRQ_STATUS); // clear the interrupt register call IRQ.captureRisingEdge(); + // setChannel was ignored in SLEEP because the SPI was not working, so do it here + writeRegister(RF230_PHY_CC_CCA, RF230_CCA_MODE_VALUE | channel); + writeRegister(RF230_TRX_STATE, RF230_RX_ON); state = STATE_TRX_OFF_2_RX_ON; } @@ -441,13 +444,13 @@ implementation ASSERT( ! radioIrq ); call SELN.clr(); - call HplRF230.spiSplitWrite(RF230_CMD_FRAME_WRITE); + call FastSpiByte.splitWrite(RF230_CMD_FRAME_WRITE); length = call RF230Config.getLength(msg); data = call RF230Config.getPayload(msg); // length | data[0] ... data[length-3] | automatically generated FCS - call HplRF230.spiSplitReadWrite(length); + call FastSpiByte.splitReadWrite(length); // the FCS is atomatically generated (2 bytes) length -= 2; @@ -460,7 +463,7 @@ implementation // first upload the header to gain some time do { - call HplRF230.spiSplitReadWrite(*(data++)); + call FastSpiByte.splitReadWrite(*(data++)); } while( --header != 0 ); @@ -470,12 +473,12 @@ implementation *(timesync_relative_t*)timesync = (*(timesync_absolute_t*)timesync) - time32; do { - call HplRF230.spiSplitReadWrite(*(data++)); + call FastSpiByte.splitReadWrite(*(data++)); } while( --length != 0 ); // wait for the SPI transfer to finish - call HplRF230.spiSplitRead(); + call FastSpiByte.splitRead(); call SELN.set(); /* @@ -549,10 +552,10 @@ implementation uint16_t crc; call SELN.clr(); - call HplRF230.spiWrite(RF230_CMD_FRAME_READ); + call FastSpiByte.write(RF230_CMD_FRAME_READ); // read the length byte - length = call HplRF230.spiWrite(0); + length = call FastSpiByte.write(0); // if correct length if( length >= 3 && length <= call RF230Config.getMaxLength() ) @@ -561,7 +564,7 @@ implementation uint8_t* data; // initiate the reading - call HplRF230.spiSplitWrite(0); + call FastSpiByte.splitWrite(0); call RF230Config.setLength(rxMsg, length); data = call RF230Config.getPayload(rxMsg); @@ -577,19 +580,19 @@ implementation length -= read; do { - crc = call HplRF230.crcByte(crc, *(data++) = call HplRF230.spiSplitReadWrite(0)); + crc = RF230_CRCBYTE_COMMAND(crc, *(data++) = call FastSpiByte.splitReadWrite(0)); } while( --read != 0 ); if( signal RadioReceive.header(rxMsg) ) { while( length-- != 0 ) - crc = call HplRF230.crcByte(crc, *(data++) = call HplRF230.spiSplitReadWrite(0)); + crc = RF230_CRCBYTE_COMMAND(crc, *(data++) = call FastSpiByte.splitReadWrite(0)); - crc = call HplRF230.crcByte(crc, call HplRF230.spiSplitReadWrite(0)); - crc = call HplRF230.crcByte(crc, call HplRF230.spiSplitReadWrite(0)); + crc = RF230_CRCBYTE_COMMAND(crc, call FastSpiByte.splitReadWrite(0)); + crc = RF230_CRCBYTE_COMMAND(crc, call FastSpiByte.splitReadWrite(0)); - call PacketLinkQuality.set(rxMsg, call HplRF230.spiSplitRead()); + call PacketLinkQuality.set(rxMsg, call FastSpiByte.splitRead()); } else crc = 1;