コード例 #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 プロジェクト: MrZANE42/rfboard-chibios
void halRfFlushRx(void) {
	/* Flush RX FIFO twice instead of once. See bug #1 in
	 * http://www.ti.com/lit/er/swrz024/swrz024.pdf */
	halRfDisableRxInterrupt();
	CC2520_RXBUF8();
	CC2520_INS_STROBE(CC2520_INS_SFLUSHRX);
	CC2520_INS_STROBE(CC2520_INS_SFLUSHRX);
	halRfEnableRxInterrupt();
}
コード例 #3
0
ファイル: hal_rf.c プロジェクト: MrZANE42/rfboard-chibios
/***********************************************************************************
 * @fn      halRfReceiveOn
 *
 * @brief   Turn receiver on
 *
 * @param   none
 *
 * @return  none
 */
void halRfReceiveOn(void) {
	/* Flush RX FIFO if needed.
	 * See bug #1 in http://www.ti.com/lit/er/swrz024/swrz024.pdf */
	halRfDisableRxInterrupt();
	CC2520_INS_STROBE(CC2520_INS_SFLUSHRX);
	uint8_t rx_fifo_cnt = CC2520_REGRD8(CC2520_RXFIFOCNT);

	CC2520_INS_STROBE(CC2520_INS_SRXON);

	if (rx_fifo_cnt != CC2520_REGRD8(CC2520_RXFIFOCNT)) {
		CC2520_INS_STROBE(CC2520_INS_SFLUSHRX);
	}
	halRfEnableRxInterrupt();
}
コード例 #4
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;
}
コード例 #5
0
ファイル: hal_rf.c プロジェクト: MrZANE42/rfboard-chibios
/***********************************************************************************
 * @fn      halRfReceiveOff
 *
 * @brief   Turn receiver off
 *
 * @param   none
 *
 * @return  none
 */
void halRfReceiveOff(void) {
	/* Flush RX FIFO if needed.
	 * See bug #1 in http://www.ti.com/lit/er/swrz024/swrz024.pdf */
	halRfDisableRxInterrupt();
	CC2520_INS_STROBE(CC2520_INS_SFLUSHRX);
	uint8_t rx_fifo_cnt = CC2520_REGRD8(CC2520_RXFIFOCNT);

	CC2520_INS_STROBE(CC2520_INS_SRFOFF);

	if (rx_fifo_cnt != CC2520_REGRD8(CC2520_RXFIFOCNT)) {
		CC2520_INS_STROBE(CC2520_INS_SFLUSHRX);
		// Software clean-up
		// Reset software for frame reception...
	}
	halRfEnableRxInterrupt();
}
コード例 #6
0
uint8 WAIT_DPU_DONE_H(void) {
	int tries = 0;

	while (CC2520_INS_STROBE(CC2520_INS_SNOP) & DPU_ACTIVE_H_BM) {
		tries++;
		if (tries > 10000) {
			return 0;
		}
	}

	return 1;
}
コード例 #7
0
ファイル: basic_rf.c プロジェクト: DIYzzuzpb/wismote
uint8 basicRfSendPacket(uint16 destAddr, uint8* pPayload, uint8 length)
{
    uint8 mpduLength;
    uint8 status;

    // Check packet length
    length = length;

    mpduLength = basicRfBuildMpdu(destAddr, pPayload, length);

    CC2520_TXBUF(mpduLength,txMpdu); 
    CC2520_INS_STROBE(CC2520_INS_STXONCCA);//CC2520_INS_STXON);     

    status = SUCCESS;
    
    if(status == SUCCESS) {
        txState.txSeqNumber++;
    }
    return status;

}
コード例 #8
0
/***********************************************************************************
 * @fn      CC2520_STXCAL
 *
 * @brief   STXCAL instruction strobe
 *
 * @param   none
 *
 * @return  uint8 - status byte
 */
uint8 CC2520_STXCAL(void)
{
	return CC2520_INS_STROBE(CC2520_INS_STXCAL);
}
コード例 #9
0
/***********************************************************************************
 * @fn      CC2520_SSAMPLECCA
 *
 * @brief   Sample CCA instruction strobe
 *
 * @param   none
 *
 * @return  uint8 - status byte
 */
uint8 CC2520_SSAMPLECCA(void)
{
	return CC2520_INS_STROBE(CC2520_INS_SSAMPLECCA);
}
コード例 #10
0
ファイル: hal_rf.c プロジェクト: navinars/etz-main
/***********************************************************************************
* @fn      halRfGetStatusByte
*
* @brief   Get chip status byte
*
* @param   none
*
* @return  uint8 - chip status byte
*/
uint8 halRfGetStatusByte(void)
{
    return CC2520_INS_STROBE(CC2520_INS_SNOP);
}
コード例 #11
0
/***********************************************************************************
 * @fn      CC2520_STXON
 *
 * @brief   STXON instruction strobe
 *
 * @param   none
 *
 * @return  uint8 - status byte
 */
uint8 CC2520_STXON(void)
{
	return CC2520_INS_STROBE(CC2520_INS_STXON);
}
コード例 #12
0
ファイル: hal_rf.c プロジェクト: navinars/etz-main
/***********************************************************************************
* @fn      halRfReceiveOn
*
* @brief   Turn receiver on
*
* @param   none
*
* @return  none
*/
void halRfReceiveOn(void)
{
    CC2520_INS_STROBE(CC2520_INS_SRXON);
}
コード例 #13
0
ファイル: hal_rf.c プロジェクト: navinars/etz-main
/***********************************************************************************
* @fn      halRfReceiveOff
*
* @brief   Turn receiver off
*
* @param   none
*
* @return  none
*/
void halRfReceiveOff(void)
{
    CC2520_INS_STROBE(CC2520_INS_SRFOFF);
}
コード例 #14
0
ファイル: cc2520.c プロジェクト: xoakin/WSN_HEMS
/***********************************************************************************
* @fn      cc2520_receiveOff
*
* @brief   Turn receiver off
*
* @param   none
*
* @return  none
*/
void
cc2520_receiveOff(void)
{
	txState.receiveOn = FALSE;
    CC2520_INS_STROBE(CC2520_INS_SRFOFF);
}
コード例 #15
0
/***********************************************************************************
 * @fn      CC2520_SFLUSHTX
 *
 * @brief   SFLUSHTX instruction strobe
 *
 * @param   none
 *
 * @return  uint8 - status byte
 */
uint8 CC2520_SFLUSHTX(void)
{
	return CC2520_INS_STROBE(CC2520_INS_SFLUSHTX);
}
コード例 #16
0
/***********************************************************************************
 * @fn      CC2520_SNOP
 *
 * @brief   SNOP instruction strobe
 *
 * @param   none
 *
 * @return  uint8 - status byte
 */
uint8 CC2520_SNOP(void)
{
	return CC2520_INS_STROBE(CC2520_INS_SNOP);
}
コード例 #17
0
ファイル: cc2520.c プロジェクト: xoakin/WSN_HEMS
/***********************************************************************************
* @fn      cc2520_receiveOn
*
* @brief   Turn receiver on
*
* @param   none
*
* @return  none
*/
void
cc2520_receiveOn(void)
{
	txState.receiveOn = TRUE;
    CC2520_INS_STROBE(CC2520_INS_SRXON);
}
コード例 #18
0
/***********************************************************************************
 * @fn      CC2520_SRXMASKBITSET
 *
 * @brief   SRXMASKBITSET instruction strobe
 *
 * @param   none
 *
 * @return  uint8 - status byte
 */
uint8 CC2520_SRXMASKBITSET(void)
{
	return CC2520_INS_STROBE(CC2520_INS_SRXMASKBITSET);
}
コード例 #19
0
/***********************************************************************************
 * @fn      CC2520_SNACK
 *
 * @brief   SNACK instruction strobe
 *
 * @param   none
 *
 * @return  uint8 - status byte
 */
uint8 CC2520_SNACK(void)
{
	return CC2520_INS_STROBE(CC2520_INS_SNACK);
}
コード例 #20
0
/***********************************************************************************
 * @fn      CC2520_SACKPEND
 *
 * @brief   SACKPEND instruction strobe
 *
 * @param   none
 *
 * @return  uint8 - status byte
 */
uint8 CC2520_SACKPEND(void)
{
	return CC2520_INS_STROBE(CC2520_INS_SACKPEND);
}
コード例 #21
0
/***********************************************************************************
 * @fn      CC2520_SIBUFEX
 *
 * @brief   SIBUFEX instruction strobe
 *
 * @param   none
 *
 * @return  uint8 - status byte
 */
uint8 CC2520_SIBUFEX(void)
{
	return CC2520_INS_STROBE(CC2520_INS_SIBUFEX);
}
コード例 #22
0
/***********************************************************************************
 * @fn      CC2520_STXONCCA
 *
 * @brief   STXONCCA instruction strobe
 *
 * @param   none
 *
 * @return  uint8 - status byte
 */
uint8 CC2520_STXONCCA(void)
{
	return CC2520_INS_STROBE(CC2520_INS_STXONCCA);
}
コード例 #23
0
/***********************************************************************************
 * @fn      CC2520_SRXMASKBITCLR
 *
 * @brief   SRXMASKBITCLR instruction strobe
 *
 * @param   none
 *
 * @return  uint8 - status byte
 */
uint8 CC2520_SRXMASKBITCLR(void)
{
	return CC2520_INS_STROBE(CC2520_INS_SRXMASKBITCLR);
}
コード例 #24
0
/***********************************************************************************
 * @fn      CC2520_SXOSCOFF
 *
 * @brief   SXOSCOFF instruction strobe
 *
 * @param   none
 *
 * @return  uint8 - status byte
 */
uint8 CC2520_SXOSCOFF(void)
{
	return CC2520_INS_STROBE(CC2520_INS_SXOSCOFF);
}