Browse Source

add nrf errata check temporarily part of hal_nrf

hathach 7 years ago
parent
commit
a0849fee9f
2 changed files with 44 additions and 2 deletions
  1. 0 1
      src/portable/nordic/nrf5x/dcd_nrf5x.c
  2. 44 1
      src/portable/nordic/nrf5x/hal_nrf5x.c

+ 0 - 1
src/portable/nordic/nrf5x/dcd_nrf5x.c

@@ -42,7 +42,6 @@
 #include "nrf_power.h"
 #include "nrf_usbd.h"
 #include "nrf_clock.h"
-#include "nrf_drv_usbd_errata.h"
 
 #include "device/dcd.h"
 #include "device/usbd_pvt.h" // to use defer function helper

+ 44 - 1
src/portable/nordic/nrf5x/hal_nrf5x.c

@@ -42,7 +42,6 @@
 #include "nrf_gpio.h"
 #include "nrf_clock.h"
 #include "nrf_usbd.h"
-#include "nrf_drv_usbd_errata.h"
 
 #ifdef SOFTDEVICE_PRESENT
 #include "nrf_sdm.h"
@@ -70,6 +69,50 @@ enum {
  *------------------------------------------------------------------*/
 void tusb_hal_nrf_power_event(uint32_t event);
 
+
+/*------------------------------------------------------------------*/
+/* Errata check from nrf_drv_usbd_errata.h
+ *------------------------------------------------------------------*/
+
+/**
+ * @brief Internal auxiliary function to check if the program is running on NRF52840 chip
+ * @retval true  It is NRF52480 chip
+ * @retval false It is other chip
+ */
+static inline bool nrf_drv_usbd_errata_type_52840(void)
+{
+    return ((((*(uint32_t *)0xF0000FE0) & 0xFF) == 0x08) &&
+        (((*(uint32_t *)0xF0000FE4) & 0x0F) == 0x0));
+}
+
+/**
+ * @brief Internal auxiliary function to check if the program is running on first final product of
+ *        NRF52840 chip
+ * @retval true  It is NRF52480 chip and it is first final product
+ * @retval false It is other chip
+ */
+static inline bool nrf_drv_usbd_errata_type_52840_fp1(void)
+{
+    return ( nrf_drv_usbd_errata_type_52840() &&
+               ( ((*(uint32_t *)0xF0000FE8) & 0xF0) == 0x20 ) &&
+               ( ((*(uint32_t *)0xF0000FEC) & 0xF0) == 0x00 ) );
+}
+
+static inline bool nrf_drv_usbd_errata_166(void)
+{
+  return true;
+}
+
+static inline bool nrf_drv_usbd_errata_171(void)
+{
+  return true;
+}
+
+static inline bool nrf_drv_usbd_errata_187(void)
+{
+  return nrf_drv_usbd_errata_type_52840_fp1();
+}
+
 /*------------------------------------------------------------------*/
 /* HFCLK helper
  *------------------------------------------------------------------*/