コード例 #1
0
ファイル: hal_rf.c プロジェクト: MrZANE42/rfboard-chibios
/***********************************************************************************
 * @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;
}
コード例 #2
0
ファイル: hal_rf.c プロジェクト: JinhoAndyPark/ARM
/***********************************************************************************
* @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;
}