Просмотр исходного кода

避免RW007硬件错误影响程序执行

gitee 4 лет назад
Родитель
Сommit
2a91fd2d32
1 измененных файлов с 19 добавлено и 4 удалено
  1. 19 4
      bsp/imx6ull-artpi-smart/drivers/drv_rw007_port.c

+ 19 - 4
bsp/imx6ull-artpi-smart/drivers/drv_rw007_port.c

@@ -22,8 +22,10 @@
 
 
 extern void spi_wifi_isr(int vector);
 extern void spi_wifi_isr(int vector);
 
 
-static void rw007_gpio_init(void)
+static int rw007_gpio_init(void)
 {
 {
+    int ret = 0;
+    uint8_t errorCnt = 10;
     /* Configure IO */
     /* Configure IO */
     rt_pin_mode(RW007_RST_PIN, PIN_MODE_OUTPUT);
     rt_pin_mode(RW007_RST_PIN, PIN_MODE_OUTPUT);
     rt_pin_mode(RW007_INT_BUSY_PIN, PIN_MODE_INPUT_PULLDOWN);
     rt_pin_mode(RW007_INT_BUSY_PIN, PIN_MODE_INPUT_PULLDOWN);
@@ -36,19 +38,32 @@ static void rw007_gpio_init(void)
     /* Wait rw007 ready(exit busy stat) */
     /* Wait rw007 ready(exit busy stat) */
     while(!rt_pin_read(RW007_INT_BUSY_PIN))
     while(!rt_pin_read(RW007_INT_BUSY_PIN))
     {
     {
-        rt_thread_delay(5);
+        rt_thread_delay(rt_tick_from_millisecond(100));
+        if (errorCnt)
+        {
+            errorCnt--;
+        }
+        else
+        {
+            ret = -1;
+            break;
+        }
     }
     }
 
 
     rt_thread_delay(rt_tick_from_millisecond(200));
     rt_thread_delay(rt_tick_from_millisecond(200));
     rt_pin_mode(RW007_INT_BUSY_PIN, PIN_MODE_INPUT_PULLUP);
     rt_pin_mode(RW007_INT_BUSY_PIN, PIN_MODE_INPUT_PULLUP);
+    return ret;
 }
 }
 
 
 int wifi_spi_device_init(void)
 int wifi_spi_device_init(void)
 {
 {
     char sn_version[32];
     char sn_version[32];
     
     
-    rw007_gpio_init();
-    
+    if (rw007_gpio_init() == -1)
+    {
+        rt_hw_wifi_init("rw007 gpio init fault!\n");
+        return -1;
+    }
     rt_hw_spi_device_attach(RW007_SPI_BUS_NAME, "rw007", RW007_CS_PIN);
     rt_hw_spi_device_attach(RW007_SPI_BUS_NAME, "rw007", RW007_CS_PIN);
     rt_hw_wifi_init("rw007");
     rt_hw_wifi_init("rw007");