Explorar o código

myRadio_delay调用嘀嗒延时

dropLin hai 5 meses
pai
achega
c36de09f70
Modificáronse 3 ficheiros con 93 adicións e 12 borrados
  1. 82 0
      project/system_stm32f10x.c
  2. 3 0
      project/system_stm32f10x.h
  3. 8 12
      radio/myRadio.c

+ 82 - 0
project/system_stm32f10x.c

@@ -1079,6 +1079,88 @@ static void SetSysClockTo72(void)
   }
 }
 #endif
+/**
+ * \brief   delay1ms
+ *          delay approximately 1ms.
+ * \param   [in]  u32Cnt
+ * \retval  void
+ */
+void delay1ms(uint32_t u32Cnt)
+{
+    uint32_t u32end;
+    
+    SysTick->LOAD = 0xFFFFFF;
+    SysTick->VAL  = 0;
+    SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
+    
+    while(u32Cnt-- > 0)
+    {
+        SysTick->VAL  = 0;
+        u32end = 0x1000000 - SystemCoreClock/1000;
+        while(SysTick->VAL > u32end)
+        {
+            ;
+        }
+    }
+    
+    SysTick->CTRL = (SysTick->CTRL & (~SysTick_CTRL_ENABLE_Msk));
+}
+
+/**
+ * \brief   delay100us
+ *          delay approximately 100us.
+ * \param   [in]  u32Cnt
+ * \retval  void
+ */
+void delay100us(uint32_t u32Cnt)
+{
+    uint32_t u32end;
+    
+    SysTick->LOAD = 0xFFFFFF;
+    SysTick->VAL  = 0;
+    SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
+    
+    while(u32Cnt-- > 0)
+    {
+        SysTick->VAL = 0;
+
+        u32end = 0x1000000 - SystemCoreClock/10000;
+        while(SysTick->VAL > u32end)
+        {
+            ;
+        }
+    }
+    
+    SysTick->CTRL = (SysTick->CTRL & (~SysTick_CTRL_ENABLE_Msk));
+}
+
+/**
+ * \brief   delay10us
+ *          delay approximately 10us.
+ * \param   [in]  u32Cnt
+ * \retval  void
+ */
+void delay10us(uint32_t u32Cnt)
+{
+    uint32_t u32end;
+    
+    SysTick->LOAD = 0xFFFFFF;
+    SysTick->VAL  = 0;
+    SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
+    
+    while(u32Cnt-- > 0)
+    {
+        SysTick->VAL = 0;
+
+        u32end = 0x1000000 - SystemCoreClock/100000;
+        while(SysTick->VAL > u32end)
+        {
+            ;
+        }
+    }
+    
+    SysTick->CTRL = (SysTick->CTRL & (~SysTick_CTRL_ENABLE_Msk));
+}
 
 /**
   * @}

+ 3 - 0
project/system_stm32f10x.h

@@ -78,6 +78,9 @@ extern uint32_t SystemCoreClock;          /*!< System Clock Frequency (Core Cloc
   
 extern void SystemInit(void);
 extern void SystemCoreClockUpdate(void);
+void delay1ms(uint32_t u32Cnt);
+void delay10us(uint32_t u32Cnt);
+void delay100us(uint32_t u32Cnt);
 /**
   * @}
   */

+ 8 - 12
radio/myRadio.c

@@ -12,18 +12,7 @@ rfRxPacket_ts rfRxPacket;
 
 void myRadio_delay(uint32_t time_ms)
 {
-    uint32_t i, j;
-    float periodUnit_ms;
-    i = time_ms;
-    periodUnit_ms = 1/SystemCoreClock * 1.25 * 1000 * 6;
-    while (i --)
-    {
-        j = 1000 / periodUnit_ms;
-        while (j --)
-        {
-            ;
-        }
-    }
+    delay1ms(time_ms);
 }
 void myRadio_init(int agr0, void *agr1_ptr)
 {
@@ -79,11 +68,13 @@ void myRadio_setCtrl(controlMode_te mode, uint32_t value)
     {
     case RADIO_EXT_CONTROL_TX_UNMODULATED:
     {
+        rfMode = 3;
         RF_Carrier(0);
     }
     break;
     case RADIO_EXT_CONTROL_RX_SENSITIVITY:
     {
+        rfMode = 4;
 
     }
     break;
@@ -94,6 +85,11 @@ void myRadio_setCtrl(controlMode_te mode, uint32_t value)
 }
 void myRadio_process(void)
 {
+    if (rfMode >= 3)
+    {
+        return;
+    }
+    
     uint8_t status = RF_GetStatus();
     if ((!status) || (status == 0xff))
     {