센서보드 RF IRQ 테스트 중 and bug fix?

Fork of EV-COG-AD3029LZ by JunMo Hong

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);
-  
 }