/* * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER. * CONSEQUENTLY, CMOSTEK SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. * * Copyright (C) CMOSTEK SZ. */ /*! * @file radio.c * @brief Generic radio handlers * * @version 1.1 * @date Feb 08 2017 * @author CMOSTEK R@D */ #include "radio.h" #include "cmt2300_params.h" #include "cmt2300_params433_100_0kbps.h" #include "cmt2300_params470_100_0kbps.h" #include "cmt2300_params490_100_0kbps.h" #include "cmt2300_params510_100_0kbps.h" #include "cmt2300_params868_100_0kbps.h" #include "cmt2300_params915_100_0kbps.h" #include "cmt2300_params433_10_0kbps.h" #include "cmt2300_params470_10_0kbps.h" #include "cmt2300_params490_10_0kbps.h" #include "cmt2300_params510_10_0kbps.h" #include "cmt2300_params868_10_0kbps.h" #include "cmt2300_params915_10_0kbps.h" #include "cmt2300_params433_200_0kbps.h" #include "cmt2300_params470_200_0kbps.h" #include "cmt2300_params490_200_0kbps.h" #include "cmt2300_params510_200_0kbps.h" #include "cmt2300_params868_200_0kbps.h" #include "cmt2300_params915_200_0kbps.h" #include "cmt2300_params433_20_0kbps.h" #include "cmt2300_params470_20_0kbps.h" #include "cmt2300_params490_20_0kbps.h" #include "cmt2300_params510_20_0kbps.h" #include "cmt2300_params868_20_0kbps.h" #include "cmt2300_params915_20_0kbps.h" #include "cmt2300_params433_2_0kbps.h" #include "cmt2300_params470_2_0kbps.h" #include "cmt2300_params490_2_0kbps.h" #include "cmt2300_params510_2_0kbps.h" #include "cmt2300_params868_2_0kbps.h" #include "cmt2300_params915_2_0kbps.h" #include "cmt2300_params433_300_0kbps.h" #include "cmt2300_params470_300_0kbps.h" #include "cmt2300_params490_300_0kbps.h" #include "cmt2300_params510_300_0kbps.h" #include "cmt2300_params868_300_0kbps.h" #include "cmt2300_params915_300_0kbps.h" #include "cmt2300_params433_50_0kbps.h" #include "cmt2300_params470_50_0kbps.h" #include "cmt2300_params490_50_0kbps.h" #include "cmt2300_params510_50_0kbps.h" #include "cmt2300_params868_50_0kbps.h" #include "cmt2300_params915_50_0kbps.h" #include static EnumRFStatus g_nNextRFState = RF_STATE_IDLE; static uint8_t* g_pRxBuffer = NULL; static uint8_t* g_pTxBuffer = NULL; static uint16_t g_nRxLength = 0; static uint16_t g_nTxLength = 0; static uint32_t g_nRxTimeout = 0xFFFFFFFF; static uint32_t g_nTxTimeout = 0xFFFFFFFF; static uint32_t g_nRxTimeCount = 0; static uint32_t g_nTxTimeCount = 0; static int packetRssi; volatile cmtInt_tu getIntFlag; static uint8_t g_nInterrutFlags = 0; static uint8_t syncWord[] = {0x2D, 0xD4, 0xCC, 0xDD}; //6表示6个频段,7表示7种波特率 cmtParams_ts cmtParamsList433[6][7] = { { { .CmtBank = g_cmt2300CmtBank433_2_0kbps, .SystemBank = g_cmt2300SystemBank433_2_0kbps, .FrequencyBank = g_cmt2300FrequencyBank433_2_0kbps, .DataRateBank = g_cmt2300DataRateBank433_2_0kbps, .BasebandBank = g_cmt2300BasebandBank433_2_0kbps, .TxBank = g_cmt2300TxBank433_2_0kbps, }, { .CmtBank = g_cmt2300CmtBank433_10_0kbps, .SystemBank = g_cmt2300SystemBank433_10_0kbps, .FrequencyBank = g_cmt2300FrequencyBank433_10_0kbps, .DataRateBank = g_cmt2300DataRateBank433_10_0kbps, .BasebandBank = g_cmt2300BasebandBank433_10_0kbps, .TxBank = g_cmt2300TxBank433_10_0kbps, }, { .CmtBank = g_cmt2300CmtBank433_20_0kbps, .SystemBank = g_cmt2300SystemBank433_20_0kbps, .FrequencyBank = g_cmt2300FrequencyBank433_20_0kbps, .DataRateBank = g_cmt2300DataRateBank433_20_0kbps, .BasebandBank = g_cmt2300BasebandBank433_20_0kbps, .TxBank = g_cmt2300TxBank433_20_0kbps, }, { .CmtBank = g_cmt2300CmtBank433_50_0kbps, .SystemBank = g_cmt2300SystemBank433_50_0kbps, .FrequencyBank = g_cmt2300FrequencyBank433_50_0kbps, .DataRateBank = g_cmt2300DataRateBank433_50_0kbps, .BasebandBank = g_cmt2300BasebandBank433_50_0kbps, .TxBank = g_cmt2300TxBank433_50_0kbps, }, { .CmtBank = g_cmt2300CmtBank433_100_0kbps, .SystemBank = g_cmt2300SystemBank433_100_0kbps, .FrequencyBank = g_cmt2300FrequencyBank433_100_0kbps, .DataRateBank = g_cmt2300DataRateBank433_100_0kbps, .BasebandBank = g_cmt2300BasebandBank433_100_0kbps, .TxBank = g_cmt2300TxBank433_100_0kbps, }, { .CmtBank = g_cmt2300CmtBank433_200_0kbps, .SystemBank = g_cmt2300SystemBank433_200_0kbps, .FrequencyBank = g_cmt2300FrequencyBank433_200_0kbps, .DataRateBank = g_cmt2300DataRateBank433_200_0kbps, .BasebandBank = g_cmt2300BasebandBank433_200_0kbps, .TxBank = g_cmt2300TxBank433_200_0kbps, }, { .CmtBank = g_cmt2300CmtBank433_300_0kbps, .SystemBank = g_cmt2300SystemBank433_300_0kbps, .FrequencyBank = g_cmt2300FrequencyBank433_300_0kbps, .DataRateBank = g_cmt2300DataRateBank433_300_0kbps, .BasebandBank = g_cmt2300BasebandBank433_300_0kbps, .TxBank = g_cmt2300TxBank433_300_0kbps, }, }, //470频段----------------------------------- { { .CmtBank = g_cmt2300CmtBank470_2_0kbps, .SystemBank = g_cmt2300SystemBank470_2_0kbps, .FrequencyBank = g_cmt2300FrequencyBank470_2_0kbps, .DataRateBank = g_cmt2300DataRateBank470_2_0kbps, .BasebandBank = g_cmt2300BasebandBank470_2_0kbps, .TxBank = g_cmt2300TxBank470_2_0kbps, }, { .CmtBank = g_cmt2300CmtBank470_10_0kbps, .SystemBank = g_cmt2300SystemBank470_10_0kbps, .FrequencyBank = g_cmt2300FrequencyBank470_10_0kbps, .DataRateBank = g_cmt2300DataRateBank470_10_0kbps, .BasebandBank = g_cmt2300BasebandBank470_10_0kbps, .TxBank = g_cmt2300TxBank470_10_0kbps, }, { .CmtBank = g_cmt2300CmtBank470_20_0kbps, .SystemBank = g_cmt2300SystemBank470_20_0kbps, .FrequencyBank = g_cmt2300FrequencyBank470_20_0kbps, .DataRateBank = g_cmt2300DataRateBank470_20_0kbps, .BasebandBank = g_cmt2300BasebandBank470_20_0kbps, .TxBank = g_cmt2300TxBank470_20_0kbps, }, { .CmtBank = g_cmt2300CmtBank470_50_0kbps, .SystemBank = g_cmt2300SystemBank470_50_0kbps, .FrequencyBank = g_cmt2300FrequencyBank470_50_0kbps, .DataRateBank = g_cmt2300DataRateBank470_50_0kbps, .BasebandBank = g_cmt2300BasebandBank470_50_0kbps, .TxBank = g_cmt2300TxBank470_50_0kbps, }, { .CmtBank = g_cmt2300CmtBank470_100_0kbps, .SystemBank = g_cmt2300SystemBank470_100_0kbps, .FrequencyBank = g_cmt2300FrequencyBank470_100_0kbps, .DataRateBank = g_cmt2300DataRateBank470_100_0kbps, .BasebandBank = g_cmt2300BasebandBank470_100_0kbps, .TxBank = g_cmt2300TxBank470_100_0kbps, }, { .CmtBank = g_cmt2300CmtBank470_200_0kbps, .SystemBank = g_cmt2300SystemBank470_200_0kbps, .FrequencyBank = g_cmt2300FrequencyBank470_200_0kbps, .DataRateBank = g_cmt2300DataRateBank470_200_0kbps, .BasebandBank = g_cmt2300BasebandBank470_200_0kbps, .TxBank = g_cmt2300TxBank470_200_0kbps, }, { .CmtBank = g_cmt2300CmtBank470_300_0kbps, .SystemBank = g_cmt2300SystemBank470_300_0kbps, .FrequencyBank = g_cmt2300FrequencyBank470_300_0kbps, .DataRateBank = g_cmt2300DataRateBank470_300_0kbps, .BasebandBank = g_cmt2300BasebandBank470_300_0kbps, .TxBank = g_cmt2300TxBank470_300_0kbps, }, }, //490频段----------------------------------- { { .CmtBank = g_cmt2300CmtBank490_2_0kbps, .SystemBank = g_cmt2300SystemBank490_2_0kbps, .FrequencyBank = g_cmt2300FrequencyBank490_2_0kbps, .DataRateBank = g_cmt2300DataRateBank490_2_0kbps, .BasebandBank = g_cmt2300BasebandBank490_2_0kbps, .TxBank = g_cmt2300TxBank490_2_0kbps, }, { .CmtBank = g_cmt2300CmtBank490_10_0kbps, .SystemBank = g_cmt2300SystemBank490_10_0kbps, .FrequencyBank = g_cmt2300FrequencyBank490_10_0kbps, .DataRateBank = g_cmt2300DataRateBank490_10_0kbps, .BasebandBank = g_cmt2300BasebandBank490_10_0kbps, .TxBank = g_cmt2300TxBank490_10_0kbps, }, { .CmtBank = g_cmt2300CmtBank490_20_0kbps, .SystemBank = g_cmt2300SystemBank490_20_0kbps, .FrequencyBank = g_cmt2300FrequencyBank490_20_0kbps, .DataRateBank = g_cmt2300DataRateBank490_20_0kbps, .BasebandBank = g_cmt2300BasebandBank490_20_0kbps, .TxBank = g_cmt2300TxBank490_20_0kbps, }, { .CmtBank = g_cmt2300CmtBank490_50_0kbps, .SystemBank = g_cmt2300SystemBank490_50_0kbps, .FrequencyBank = g_cmt2300FrequencyBank490_50_0kbps, .DataRateBank = g_cmt2300DataRateBank490_50_0kbps, .BasebandBank = g_cmt2300BasebandBank490_50_0kbps, .TxBank = g_cmt2300TxBank490_50_0kbps, }, { .CmtBank = g_cmt2300CmtBank490_100_0kbps, .SystemBank = g_cmt2300SystemBank490_100_0kbps, .FrequencyBank = g_cmt2300FrequencyBank490_100_0kbps, .DataRateBank = g_cmt2300DataRateBank490_100_0kbps, .BasebandBank = g_cmt2300BasebandBank490_100_0kbps, .TxBank = g_cmt2300TxBank490_100_0kbps, }, { .CmtBank = g_cmt2300CmtBank490_200_0kbps, .SystemBank = g_cmt2300SystemBank490_200_0kbps, .FrequencyBank = g_cmt2300FrequencyBank490_200_0kbps, .DataRateBank = g_cmt2300DataRateBank490_200_0kbps, .BasebandBank = g_cmt2300BasebandBank490_200_0kbps, .TxBank = g_cmt2300TxBank490_200_0kbps, }, { .CmtBank = g_cmt2300CmtBank490_300_0kbps, .SystemBank = g_cmt2300SystemBank490_300_0kbps, .FrequencyBank = g_cmt2300FrequencyBank490_300_0kbps, .DataRateBank = g_cmt2300DataRateBank490_300_0kbps, .BasebandBank = g_cmt2300BasebandBank490_300_0kbps, .TxBank = g_cmt2300TxBank490_300_0kbps, }, }, //510频段----------------------------------- { { .CmtBank = g_cmt2300CmtBank510_2_0kbps, .SystemBank = g_cmt2300SystemBank510_2_0kbps, .FrequencyBank = g_cmt2300FrequencyBank510_2_0kbps, .DataRateBank = g_cmt2300DataRateBank510_2_0kbps, .BasebandBank = g_cmt2300BasebandBank510_2_0kbps, .TxBank = g_cmt2300TxBank510_2_0kbps, }, { .CmtBank = g_cmt2300CmtBank510_10_0kbps, .SystemBank = g_cmt2300SystemBank510_10_0kbps, .FrequencyBank = g_cmt2300FrequencyBank510_10_0kbps, .DataRateBank = g_cmt2300DataRateBank510_10_0kbps, .BasebandBank = g_cmt2300BasebandBank510_10_0kbps, .TxBank = g_cmt2300TxBank510_10_0kbps, }, { .CmtBank = g_cmt2300CmtBank510_20_0kbps, .SystemBank = g_cmt2300SystemBank510_20_0kbps, .FrequencyBank = g_cmt2300FrequencyBank510_20_0kbps, .DataRateBank = g_cmt2300DataRateBank510_20_0kbps, .BasebandBank = g_cmt2300BasebandBank510_20_0kbps, .TxBank = g_cmt2300TxBank510_20_0kbps, }, { .CmtBank = g_cmt2300CmtBank510_50_0kbps, .SystemBank = g_cmt2300SystemBank510_50_0kbps, .FrequencyBank = g_cmt2300FrequencyBank510_50_0kbps, .DataRateBank = g_cmt2300DataRateBank510_50_0kbps, .BasebandBank = g_cmt2300BasebandBank510_50_0kbps, .TxBank = g_cmt2300TxBank510_50_0kbps, }, { .CmtBank = g_cmt2300CmtBank510_100_0kbps, .SystemBank = g_cmt2300SystemBank510_100_0kbps, .FrequencyBank = g_cmt2300FrequencyBank510_100_0kbps, .DataRateBank = g_cmt2300DataRateBank510_100_0kbps, .BasebandBank = g_cmt2300BasebandBank510_100_0kbps, .TxBank = g_cmt2300TxBank510_100_0kbps, }, { .CmtBank = g_cmt2300CmtBank510_200_0kbps, .SystemBank = g_cmt2300SystemBank510_200_0kbps, .FrequencyBank = g_cmt2300FrequencyBank510_200_0kbps, .DataRateBank = g_cmt2300DataRateBank510_200_0kbps, .BasebandBank = g_cmt2300BasebandBank510_200_0kbps, .TxBank = g_cmt2300TxBank510_200_0kbps, }, { .CmtBank = g_cmt2300CmtBank510_300_0kbps, .SystemBank = g_cmt2300SystemBank510_300_0kbps, .FrequencyBank = g_cmt2300FrequencyBank510_300_0kbps, .DataRateBank = g_cmt2300DataRateBank510_300_0kbps, .BasebandBank = g_cmt2300BasebandBank510_300_0kbps, .TxBank = g_cmt2300TxBank510_300_0kbps, }, }, //868频段----------------------------------- { { .CmtBank = g_cmt2300CmtBank868_2_0kbps, .SystemBank = g_cmt2300SystemBank868_2_0kbps, .FrequencyBank = g_cmt2300FrequencyBank868_2_0kbps, .DataRateBank = g_cmt2300DataRateBank868_2_0kbps, .BasebandBank = g_cmt2300BasebandBank868_2_0kbps, .TxBank = g_cmt2300TxBank868_2_0kbps, }, { .CmtBank = g_cmt2300CmtBank868_10_0kbps, .SystemBank = g_cmt2300SystemBank868_10_0kbps, .FrequencyBank = g_cmt2300FrequencyBank868_10_0kbps, .DataRateBank = g_cmt2300DataRateBank868_10_0kbps, .BasebandBank = g_cmt2300BasebandBank868_10_0kbps, .TxBank = g_cmt2300TxBank868_10_0kbps, }, { .CmtBank = g_cmt2300CmtBank868_20_0kbps, .SystemBank = g_cmt2300SystemBank868_20_0kbps, .FrequencyBank = g_cmt2300FrequencyBank868_20_0kbps, .DataRateBank = g_cmt2300DataRateBank868_20_0kbps, .BasebandBank = g_cmt2300BasebandBank868_20_0kbps, .TxBank = g_cmt2300TxBank868_20_0kbps, }, { .CmtBank = g_cmt2300CmtBank868_50_0kbps, .SystemBank = g_cmt2300SystemBank868_50_0kbps, .FrequencyBank = g_cmt2300FrequencyBank868_50_0kbps, .DataRateBank = g_cmt2300DataRateBank868_50_0kbps, .BasebandBank = g_cmt2300BasebandBank868_50_0kbps, .TxBank = g_cmt2300TxBank868_50_0kbps, }, { .CmtBank = g_cmt2300CmtBank868_100_0kbps, .SystemBank = g_cmt2300SystemBank868_100_0kbps, .FrequencyBank = g_cmt2300FrequencyBank868_100_0kbps, .DataRateBank = g_cmt2300DataRateBank868_100_0kbps, .BasebandBank = g_cmt2300BasebandBank868_100_0kbps, .TxBank = g_cmt2300TxBank868_100_0kbps, }, { .CmtBank = g_cmt2300CmtBank868_200_0kbps, .SystemBank = g_cmt2300SystemBank868_200_0kbps, .FrequencyBank = g_cmt2300FrequencyBank868_200_0kbps, .DataRateBank = g_cmt2300DataRateBank868_200_0kbps, .BasebandBank = g_cmt2300BasebandBank868_200_0kbps, .TxBank = g_cmt2300TxBank868_200_0kbps, }, { .CmtBank = g_cmt2300CmtBank868_300_0kbps, .SystemBank = g_cmt2300SystemBank868_300_0kbps, .FrequencyBank = g_cmt2300FrequencyBank868_300_0kbps, .DataRateBank = g_cmt2300DataRateBank868_300_0kbps, .BasebandBank = g_cmt2300BasebandBank868_300_0kbps, .TxBank = g_cmt2300TxBank868_300_0kbps, }, }, //915频段----------------------------------- { { .CmtBank = g_cmt2300CmtBank915_2_0kbps, .SystemBank = g_cmt2300SystemBank915_2_0kbps, .FrequencyBank = g_cmt2300FrequencyBank915_2_0kbps, .DataRateBank = g_cmt2300DataRateBank915_2_0kbps, .BasebandBank = g_cmt2300BasebandBank915_2_0kbps, .TxBank = g_cmt2300TxBank915_2_0kbps, }, { .CmtBank = g_cmt2300CmtBank915_10_0kbps, .SystemBank = g_cmt2300SystemBank915_10_0kbps, .FrequencyBank = g_cmt2300FrequencyBank915_10_0kbps, .DataRateBank = g_cmt2300DataRateBank915_10_0kbps, .BasebandBank = g_cmt2300BasebandBank915_10_0kbps, .TxBank = g_cmt2300TxBank915_10_0kbps, }, { .CmtBank = g_cmt2300CmtBank915_20_0kbps, .SystemBank = g_cmt2300SystemBank915_20_0kbps, .FrequencyBank = g_cmt2300FrequencyBank915_20_0kbps, .DataRateBank = g_cmt2300DataRateBank915_20_0kbps, .BasebandBank = g_cmt2300BasebandBank915_20_0kbps, .TxBank = g_cmt2300TxBank915_20_0kbps, }, { .CmtBank = g_cmt2300CmtBank915_50_0kbps, .SystemBank = g_cmt2300SystemBank915_50_0kbps, .FrequencyBank = g_cmt2300FrequencyBank915_50_0kbps, .DataRateBank = g_cmt2300DataRateBank915_50_0kbps, .BasebandBank = g_cmt2300BasebandBank915_50_0kbps, .TxBank = g_cmt2300TxBank915_50_0kbps, }, { .CmtBank = g_cmt2300CmtBank915_100_0kbps, .SystemBank = g_cmt2300SystemBank915_100_0kbps, .FrequencyBank = g_cmt2300FrequencyBank915_100_0kbps, .DataRateBank = g_cmt2300DataRateBank915_100_0kbps, .BasebandBank = g_cmt2300BasebandBank915_100_0kbps, .TxBank = g_cmt2300TxBank915_100_0kbps, }, { .CmtBank = g_cmt2300CmtBank915_200_0kbps, .SystemBank = g_cmt2300SystemBank915_200_0kbps, .FrequencyBank = g_cmt2300FrequencyBank915_200_0kbps, .DataRateBank = g_cmt2300DataRateBank915_200_0kbps, .BasebandBank = g_cmt2300BasebandBank915_200_0kbps, .TxBank = g_cmt2300TxBank915_200_0kbps, }, { .CmtBank = g_cmt2300CmtBank915_300_0kbps, .SystemBank = g_cmt2300SystemBank915_300_0kbps, .FrequencyBank = g_cmt2300FrequencyBank915_300_0kbps, .DataRateBank = g_cmt2300DataRateBank915_300_0kbps, .BasebandBank = g_cmt2300BasebandBank915_300_0kbps, .TxBank = g_cmt2300TxBank915_300_0kbps, }, }, }; void RF_Init(uint8_t type, uint8_t br) { const uint8_t *_cmt2300CmtBank; const uint8_t *_cmt2300SystemBank; const uint8_t *_cmt2300FrequencyBank; const uint8_t *_cmt2300DataRateBank; const uint8_t *_cmt2300BasebandBank; const uint8_t *_cmt2300TxBank; _cmt2300CmtBank = cmtParamsList433[type][br].CmtBank; _cmt2300SystemBank = cmtParamsList433[type][br].SystemBank; _cmt2300FrequencyBank = cmtParamsList433[type][br].FrequencyBank; _cmt2300DataRateBank = cmtParamsList433[type][br].DataRateBank; _cmt2300BasebandBank = cmtParamsList433[type][br].BasebandBank; _cmt2300TxBank = cmtParamsList433[type][br].TxBank; // Cmt2300_InitGpio(); Cmt2300_Init(); /* Config registers */ Cmt2300_ConfigRegBank(CMT2300_CMT_BANK_ADDR , _cmt2300CmtBank , CMT2300_CMT_BANK_SIZE ); Cmt2300_ConfigRegBank(CMT2300_SYSTEM_BANK_ADDR , _cmt2300SystemBank , CMT2300_SYSTEM_BANK_SIZE ); Cmt2300_ConfigRegBank(CMT2300_FREQUENCY_BANK_ADDR , _cmt2300FrequencyBank , CMT2300_FREQUENCY_BANK_SIZE ); Cmt2300_ConfigRegBank(CMT2300_DATA_RATE_BANK_ADDR , _cmt2300DataRateBank , CMT2300_DATA_RATE_BANK_SIZE ); Cmt2300_ConfigRegBank(CMT2300_BASEBAND_BANK_ADDR , _cmt2300BasebandBank , CMT2300_BASEBAND_BANK_SIZE ); Cmt2300_ConfigRegBank(CMT2300_TX_BANK_ADDR , _cmt2300TxBank , CMT2300_TX_BANK_SIZE ); Cmt2300_SetFrequencyStep(100); Cmt2300_SetCrc(); //设置打开crc Cmt2300_SetPacketType(true); //设置数据包为可变包 Cmt2300_SetRssiDetMode(RDS_AT_SYNC_OK); Cmt2300_SetGfskGsnBt(GSNBT_0_5); Cmt2300_SetRxPreamLengSize(PLU_8BIT, 8); Cmt2300_SetSyncWord(syncWord, 4); // Cmt2300_SetRfBandWidth(BINDWIDTH_100);//屏蔽不调用,根据配置工具自动选择接收带宽 RF_Config(); } void RF_Config(void) { #ifdef ENABLE_ANTENNA_SWITCH /* If you enable antenna switch, GPIO1/GPIO2 will output RX_ACTIVE/TX_ACTIVE, and it can't output INT1/INT2 via GPIO1/GPIO2 */ Cmt2300_EnableAntennaSwitch(0); #else /* Config GPIOs */ Cmt2300_ConfigGpio( CMT2300_GPIO1_SEL_INT1 | /* INT1 > GPIO1 */ CMT2300_GPIO2_SEL_INT2 | /* INT2 > GPIO2 */ CMT2300_GPIO3_SEL_DOUT ); /* Config interrupt */ Cmt2300_ConfigInterrupt( CMT2300_INT_SEL_TX_DONE, /* Config INT1 */ CMT2300_INT_SEL_PKT_OK /* Config INT2 */ ); #endif /* Enable interrupt */ Cmt2300_EnableInterrupt( CMT2300_MASK_TX_DONE_EN | CMT2300_MASK_PREAM_OK_EN | CMT2300_MASK_SYNC_OK_EN | CMT2300_MASK_NODE_OK_EN | CMT2300_MASK_CRC_OK_EN | CMT2300_MASK_PKT_DONE_EN ); Cmt2300_EnableLfosc(false); /* Use a single 64-byte FIFO for either Tx or Rx */ Cmt2300_EnableFifoMerge(true); //Cmt2300_SetFifoThreshold(16); /* Go to sleep for configuration to take effect */ Cmt2300_GoSleep(); } void RF_SetStatus(EnumRFStatus nStatus) { g_nNextRFState = nStatus; } EnumRFStatus RF_GetStatus(void) { return g_nNextRFState; } uint8_t RF_GetInterruptFlags(void) { return g_nInterrutFlags; } void RF_StartRx(uint8_t buf[], uint16_t len, uint32_t timeout) { // g_pRxBuffer = buf; // g_nRxLength = len; // g_nRxTimeout = timeout; // memset(g_pRxBuffer, 0, g_nRxLength); g_nNextRFState = RF_STATE_RX_START; Cmt2300_GoStby(); Cmt2300_ClearInterruptFlags(); // /* Must clear FIFO after enable SPI to read or write the FIFO */ Cmt2300_EnableReadFifo(); Cmt2300_ClearFifo(); Cmt2300_GoRx(); } void RF_StartTx(uint8_t buf[], uint16_t len, uint32_t timeout) { // g_pTxBuffer = buf; // g_nTxLength = len; // g_nTxTimeout = timeout; // g_nNextRFState = RF_STATE_TX_START; Cmt2300_GoStby(); Cmt2300_ClearInterruptFlags(); /* Must clear FIFO after enable SPI to read or write the FIFO */ Cmt2300_EnableWriteFifo(); Cmt2300_ClearFifo(); Cmt2300_SetPayloadLength(len); /* The length need be smaller than 32 */ Cmt2300_WriteFifo(buf, len); Cmt2300_GoTx(); } int RF_GetPacketRssi(void) { return packetRssi; } EnumRFResult RF_Process(void) { EnumRFResult nRes = RF_BUSY; switch(g_nNextRFState) { case RF_STATE_IDLE: { nRes = RF_IDLE; break; } case RF_STATE_RX_START: { Cmt2300_GoStby(); Cmt2300_ClearInterruptFlags(); /* Must clear FIFO after enable SPI to read or write the FIFO */ Cmt2300_EnableReadFifo(); Cmt2300_ClearFifo(); if(false==Cmt2300_GoRx()) g_nNextRFState = RF_STATE_ERROR; else g_nNextRFState = RF_STATE_RX_WAIT; g_nRxTimeCount = Cmt2300_GetTickCount(); break; } case RF_STATE_RX_WAIT: { #ifdef ENABLE_ANTENNA_SWITCH if(CMT2300_MASK_PKT_OK_FLG & Cmt2300_ReadReg(CMT2300_CUS_INT_FLAG)) /* Read PKT_OK flag */ #else if(Cmt2300_ReadGpio2()) /* Read INT2, PKT_OK */ #endif { getIntFlag.value = Cmt2300_ClearInterruptFlags(); if (getIntFlag.bits.crc_ok) { g_nNextRFState = RF_STATE_RX_DONE; } } // if( (0xFFFFFFFF != g_nRxTimeout) && ((g_nSysTickCount-g_nRxTimeCount) > g_nRxTimeout) ) // g_nNextRFState = RF_STATE_RX_TIMEOUT; break; } case RF_STATE_RX_DONE: { uint8_t variableLen=255; packetRssi = Cmt2300_GetRssiDBm(); Cmt2300_GoStby(); Cmt2300_ReadFifo(&variableLen, 1); /* The length need be smaller than 32 */ Cmt2300_ReadFifo(g_pRxBuffer, variableLen); // memcpy(g_pRxBuffer, &g_pRxBuffer[1], variableLen); Cmt2300_GoSleep(); g_nNextRFState = RF_STATE_IDLE; nRes = RF_RX_DONE; break; } case RF_STATE_RX_TIMEOUT: { Cmt2300_GoSleep(); g_nNextRFState = RF_STATE_IDLE; nRes = RF_RX_TIMEOUT; break; } case RF_STATE_TX_START: { Cmt2300_GoStby(); Cmt2300_ClearInterruptFlags(); /* Must clear FIFO after enable SPI to read or write the FIFO */ Cmt2300_EnableWriteFifo(); Cmt2300_ClearFifo(); Cmt2300_SetPayloadLength(g_nTxLength); /* The length need be smaller than 32 */ Cmt2300_WriteFifo(g_pTxBuffer, g_nTxLength); if( 0==(CMT2300_MASK_TX_FIFO_NMTY_FLG & Cmt2300_ReadReg(CMT2300_CUS_FIFO_FLAG)) ) g_nNextRFState = RF_STATE_ERROR; if(false==Cmt2300_GoTx()) g_nNextRFState = RF_STATE_ERROR; else g_nNextRFState = RF_STATE_TX_WAIT; g_nTxTimeCount = Cmt2300_GetTickCount(); break; } case RF_STATE_TX_WAIT: { #ifdef ENABLE_ANTENNA_SWITCH if(CMT2300_MASK_TX_DONE_FLG & Cmt2300_ReadReg(CMT2300_CUS_INT_CLR1)) /* Read TX_DONE flag */ #else if(Cmt2300_ReadGpio1()) /* Read INT1, TX_DONE */ #endif { g_nNextRFState = RF_STATE_TX_DONE; } // if( (0xFFFFFFFF != g_nTxTimeout) && ((g_nSysTickCount-g_nTxTimeCount) > g_nTxTimeout) ) // g_nNextRFState = RF_STATE_TX_TIMEOUT; break; } case RF_STATE_TX_DONE: { Cmt2300_ClearInterruptFlags(); Cmt2300_GoSleep(); g_nNextRFState = RF_STATE_IDLE; nRes = RF_TX_DONE; break; } case RF_STATE_TX_TIMEOUT: { Cmt2300_GoSleep(); g_nNextRFState = RF_STATE_IDLE; nRes = RF_TX_TIMEOUT; break; } case RF_STATE_ERROR: { Cmt2300_SoftReset(); Cmt2300_DelayMs(20); Cmt2300_GoStby(); RF_Config(); g_nNextRFState = RF_STATE_IDLE; nRes = RF_ERROR; break; } default: break; } return nRes; }