/*********************************************************************************** * @fn halRfTransmit * * @brief Transmit frame with Clear Channel Assessment. * * @param none * * @return uint8 - SUCCESS or FAILED */ uint8 halRfTransmit(void) { uint16 timeout = 500; // 500 x 100us = 50ms uint8 status = 0; // Wait for RSSI to become valid while (!CC2520_RSSI_VALID_PIN){}; // Reuse GPIO2 for TX_FRM_DONE exception CC2520_CFG_GPIO_OUT(2, 1 + CC2520_EXC_TX_FRM_DONE); // Wait for the transmission to begin before exiting (makes sure that this function cannot be called // a second time, and thereby canceling the first transmission. while (--timeout > 0) { CC2520_INS_STROBE(CC2520_INS_STXONCCA); if (CC2520_SAMPLED_CCA_PIN) { break; } chThdSleepMicroseconds(100); } if (timeout == 0) { status = FAILED; CC2520_INS_STROBE(CC2520_INS_SFLUSHTX); } else { status = SUCCESS; // Wait for TX_FRM_DONE exception while (!CC2520_TX_FRM_DONE_PIN) {}; CC2520_CLEAR_EXC(CC2520_EXC_TX_FRM_DONE); } // Reconfigure GPIO2 CC2520_CFG_GPIO_OUT(2, CC2520_GPIO_RSSI_VALID); return status; }
/*********************************************************************************** * @fn halRfTransmit * * @brief Transmit frame with Clear Channel Assessment. * * @param none * * @return uint8 - HAL_RF_SUCCESS or HAL_RF_FAILED */ uint8 halRfTransmit(void) { uint16 timeout = 2500; // 2500 x 20us = 50ms uint8 status=0; // DEBUG_MSG_FUNC_START; // Wait for RSSI to become valid while(!CC2520_RSSI_VALID_PIN); // Reuse GPIO2 for TX_FRM_DONE exception HAL_INT_OFF(); CC2520_CFG_GPIO_OUT(2, 1 + CC2520_EXC_TX_FRM_DONE); HAL_INT_ON(); // Wait for the transmission to begin before exiting (makes sure that this function cannot be called // a second time, and thereby cancelling the first transmission. while(--timeout > 0) { HAL_INT_OFF(); CC2520_INS_STROBE(CC2520_INS_STXONCCA); HAL_INT_ON(); if (CC2520_SAMPLED_CCA_PIN) break; #if 0 // POOH halMcuWaitUs(20); #else Delay(20); #endif } if (timeout == 0) { DEBUG_MSG_FUNC_ERROR; status = HAL_RF_FAILED; CC2520_INS_STROBE(CC2520_INS_SFLUSHTX); } else { status = HAL_RF_SUCCESS; // Wait for TX_FRM_DONE exception while(!CC2520_TX_FRM_DONE_PIN); HAL_INT_OFF(); CC2520_CLEAR_EXC(CC2520_EXC_TX_FRM_DONE); HAL_INT_ON(); } // Reconfigure GPIO2 HAL_INT_OFF(); CC2520_CFG_GPIO_OUT(2, CC2520_GPIO_RSSI_VALID); HAL_INT_ON(); return status; }