센서보드 RF IRQ 테스트 중 and bug fix?
Fork of EV-COG-AD3029LZ by
Diff: source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Radio.c
- Revision:
- 84:45b9ff78a066
- Parent:
- 83:54b207156a91
- Child:
- 85:38de5ee78824
--- a/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Radio.c Wed Mar 21 05:06:08 2018 +0000 +++ b/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Radio.c Fri Jun 22 03:42:24 2018 +0000 @@ -42,6 +42,11 @@ #include "MCU_Interface.h" #include <math.h> +//180619 HJM : init 재시작을 위한 카운팅 변수 +static int iSpiritRadioErrorCounting = 0; +#define MAX_ERROR_COUNTING 10 +#define RETURN_ERROR_NUMBER 100 + /** @addtogroup SPIRIT_Libraries * @{ */ @@ -187,6 +192,7 @@ */ uint8_t SpiritRadioInit(SRadioInit* pxSRadioInitStruct) { + printf("[INIT_REVISE]SpiritRadioInit start...\n"); int32_t FOffsetTmp; uint8_t anaRadioRegArray[8], digRadioRegArray[4]; int16_t xtalOffsetFactor; @@ -194,7 +200,8 @@ /* Workaround for Vtune */ printf("test 9-1\n"); - uint8_t value = 0xA0; SpiritSpiWriteRegisters(0x9F, 1, &value); + uint8_t value = 0xA0; + SpiritSpiWriteRegisters(0x9F, 1, &value); /* Calculates the offset respect to RF frequency and according to xtal_ppm parameter: (xtal_ppm*FBase)/10^6 */ printf("test 9-2\n"); @@ -219,7 +226,19 @@ /* Reads the MC_STATUS register */ SpiritRefreshStatus(); printf("test 9-4 g_xStatus.MC_STATE : [0x%02X]\n", g_xStatus.MC_STATE); + ++iSpiritRadioErrorCounting; + if (iSpiritRadioErrorCounting >= MAX_ERROR_COUNTING) + { + iSpiritRadioErrorCounting = 0; +// reset_board(); + return RETURN_ERROR_NUMBER; + } }while(g_xStatus.MC_STATE!=MC_STATE_STANDBY); + iSpiritRadioErrorCounting = 0; + + + + if(s_lXtalFrequency<DOUBLE_XTAL_THR) { @@ -232,6 +251,13 @@ s_assert_param(IS_CH_BW(pxSRadioInitStruct->lBandwidth,(s_lXtalFrequency>>1))); } + + + + + + + /* Goes in READY state */ printf("test 9-5\n"); SpiritSpiCommandStrobes(COMMAND_READY); @@ -242,7 +268,15 @@ /* Reads the MC_STATUS register */ SpiritRefreshStatus(); printf("test 9-5 g_xStatus.MC_STATE : [%d]\n", g_xStatus.MC_STATE); + ++iSpiritRadioErrorCounting; + if (iSpiritRadioErrorCounting >= MAX_ERROR_COUNTING) + { + iSpiritRadioErrorCounting = 0; +// reset_board(); + return RETURN_ERROR_NUMBER; + } }while(g_xStatus.MC_STATE!=MC_STATE_READY); + iSpiritRadioErrorCounting = 0; /* Calculates the FC_OFFSET parameter and cast as signed int: FOffsetTmp = (Fxtal/2^18)*FC_OFFSET */ printf("test 9-6\n"); @@ -256,6 +290,11 @@ SpiritManagementWaTRxFcMem(pxSRadioInitStruct->lFrequencyBase); + + + + + /* 2nd order DEM algorithm enabling */ printf("test 9-8\n"); uint8_t tmpreg; SpiritSpiReadRegisters(0xA3, 1, &tmpreg); @@ -280,16 +319,22 @@ SpiritRadioSearchFreqDevME(pxSRadioInitStruct->lFreqDev, &FdevM, &FdevE); digRadioRegArray[2] = (uint8_t)((FdevE<<4) | (tmpreg&0x08) | FdevM); + /* Calculates the channel filter mantissa and exponent */ printf("test 9-13\n"); SpiritRadioSearchChannelBwME(pxSRadioInitStruct->lBandwidth, &bwM, &bwE); + + digRadioRegArray[3] = (uint8_t)((bwM<<4) | bwE); + float if_off=(3.0*480140)/(s_lXtalFrequency>>12)-64; + uint8_t ifOffsetAna = ROUND(if_off); + if(s_lXtalFrequency<DOUBLE_XTAL_THR) { /* if offset digital is the same in case of single xtal */ @@ -363,8 +408,9 @@ anaRadioRegArray[1]=0xE3; g_xStatus = SpiritSpiWriteRegisters(0x99, 2, anaRadioRegArray); + printf("[INIT_REVISE]SpiritRadioInit end.\n"); + return SpiritRadioSetFrequencyBase(pxSRadioInitStruct->lFrequencyBase); - }