static void runTX(char c1, char c2, char c3, char c4) { // Initialize packet buffer of size PKTLEN + 1 uint8 txBuffer[PKTLEN+1] = {0}; P2SEL &= ~0x40; // P2SEL bit 6 (GDO0) set to one as default. Set to zero (I/O) // connect ISR function to GPIO0, interrupt on falling edge trxIsrConnect(GPIO_0, FALLING_EDGE, &radioRxTxISR); // enable interrupt from GPIO_0 trxEnableInt(GPIO_0); // create a random packet with PKTLEN + 2 byte packet counter + n x random bytes createPacket(txBuffer, c1, c2, c3, c4); // write packet to tx fifo cc11xLSpiWriteTxFifo(txBuffer,sizeof(txBuffer)); // strobe TX to send packet trxSpiCmdStrobe(CC110L_STX); // wait for interrupt that packet has been sent. // (Assumes the GPIO connected to the radioRxTxISR function is set // to GPIOx_CFG = 0x06) while(!packetSemaphore); // clear semaphore flag packetSemaphore = ISR_IDLE; halLedToggle(LED1); __delay_cycles(250000); halLedToggle(LED1); }
/****************************************************************************** * @fn perCC115LSendPacket * * @brief Sends the contents that pData points to. pData has the * following structure: * * txArray[0] = length byte * txArray[n] = payload[n] * | n<[sizeOf(RXFIFO)-2], variable packet length is assumed. * * The radio state after completing TX is dependant on the * MCSM1 register setting. This function enables SYNC interrupt. * This means that an interrupt will go off when a packet * has been sent, i.e sync signal transitions from high to low. * MSP will be in low power mode until packet has been sent given * that no other interrupts go off. * * The One-Way PER test disables the sync pin interrupt when TX * finishes, while the Two-Way PER test doesn't to enable quick * reception of Slave ACK. * * Note: Assumes chip is ready * * input parameters * * @param *pData - pointer to data array that starts with length byte * and followed by payload. * output parameters * * @return void */ void perCC115LSendPacket(uint8 *pData) { uint8 len = *pData; /* Will only try to transmit if the whole packet can fit i TXFIFO * and we're not currently sending a packet. */ if(!(len > (PER_MAX_DATA-2)) && (cc115LRadioTxIdle != CC115L_STATE_TX) ) { cc11xLSpiWriteTxFifo(pData,(len+1)); /* Indicate state to the ISR and issue the TX strobe */ trxEnableInt(); cc115LRadioTxIdle = CC115L_STATE_TX; trxSpiCmdStrobe(CC115L_STX); /* Wait until packet is sent before doing anything else */ __low_power_mode_3(); while(cc115LRadioTxIdle == CC115L_STATE_TX); if(perSettings.linkTopology == LINK_1_WAY) { /* Back in Idle*/ trxDisableInt(); } } return; }
/******************************************************************************* * @fn perCC115LWriteTxFifo * * @brief Means for PER test to write the TX FIFO * * input parameters * * @param *pData - pointer to data array that will be written to TX Fifo * @param len - number of bytes in that will be written to TX Fifo * * output parameters * * @return void */ void perCC115LWriteTxFifo(uint8 *pData, uint8 len) { cc11xLSpiWriteTxFifo(pData,len); return; }