瀏覽代碼

[bsp/nrf5x] add the softdevice config

supperthomas 5 年之前
父節點
當前提交
2446ee8b95

+ 1 - 1
bsp/nrf5x/libraries/drivers/drv_gpio.c

@@ -371,5 +371,5 @@ int rt_hw_pin_init(void)
     }
     
 }
-
+INIT_BOARD_EXPORT(rt_hw_pin_init);
 #endif /* RT_USING_PIN */

+ 3 - 0
bsp/nrf5x/nrf52840/.config

@@ -353,6 +353,8 @@ CONFIG_RT_USING_LIBC=y
 # CONFIG_PKG_USING_LITTLED is not set
 # CONFIG_PKG_USING_LKDGUI is not set
 # CONFIG_PKG_USING_NRF5X_SDK is not set
+# CONFIG_PKG_USING_NRF5X_SDK_V1300 is not set
+# CONFIG_PKG_USING_NRF5X_SDK_LATEST_VERSION is not set
 CONFIG_PKG_USING_NRFX=y
 CONFIG_PKG_NRFX_PATH="/packages/peripherals/nrfx"
 CONFIG_PKG_USING_NRFX_V210=y
@@ -438,6 +440,7 @@ CONFIG_SOC_NRF52840=y
 # On-chip Peripheral Drivers
 #
 CONFIG_BSP_USING_GPIO=y
+# CONFIG_BSP_USING_SOFTDEVICE is not set
 CONFIG_BSP_USING_UART=y
 CONFIG_BSP_USING_UART0=y
 CONFIG_BSP_UART0_RX_PIN=8

+ 6 - 21
bsp/nrf5x/nrf52840/applications/application.c

@@ -1,32 +1,18 @@
 /*
- * File      : application.c
- * This file is part of RT-Thread RTOS
- * COPYRIGHT (C) 2015, RT-Thread Development Team
+ * Copyright (c) 2006-2020, RT-Thread Development Team
  *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rt-thread.org/license/LICENSE
+ * SPDX-License-Identifier: Apache-2.0
  *
  * Change Logs:
  * Date           Author       Notes
- * 2015-03-01     Yangfs       the first version
- * 2015-03-27     Bernard      code cleanup.
- */
-
-/**
- * @addtogroup NRF52832
+ * 2020-04-29     supperthomas first version
+ *
  */
-/*@{*/
 
 #include <rtthread.h>
-
-#ifdef RT_USING_FINSH
-#include <finsh.h>
-#include <shell.h>
-#endif
-
-#include <drv_gpio.h>
+#include <rtdevice.h>
 #define DK_BOARD_LED_1  13
+#define DK_BOARD_LED_2  14
 
 int main(void)
 {
@@ -44,4 +30,3 @@ int main(void)
     return RT_EOK;
 }
 
-/*@}*/

+ 31 - 0
bsp/nrf5x/nrf52840/board/Kconfig

@@ -55,6 +55,37 @@ menu "On-chip Peripheral Drivers"
         bool "Enable GPIO"
         select RT_USING_PIN
         default y
+    menuconfig BSP_USING_SOFTDEVICE
+        bool "Enable NRF SOFTDEVICE"
+        select PKG_USING_NRF5X_SDK
+        default n
+if BSP_USING_SOFTDEVICE
+    config NRFX_CLOCK_ENABLED
+	int "NRFX_CLOCK_ENABLED"
+    default 1
+	config NRFX_CLOCK_DEFAULT_CONFIG_IRQ_PRIORITY
+	int "NRFX_CLOCK_DEFAULT_CONFIG_IRQ_PRIORITY"
+    default 7
+	config NRFX_CLOCK_DEFAULT_CONFIG_IRQ_PRIORITY
+	int "NRFX_CLOCK_DEFAULT_CONFIG_IRQ_PRIORITY"
+    default 7
+	config NRFX_RTC_ENABLED
+	int "NRFX_RTC_ENABLED"
+    default 1
+	config NRF_CLOCK_ENABLED
+	int "NRF_CLOCK_ENABLED"
+    default 1
+	config NRF_SDH_BLE_ENABLED
+	int "NRF_SDH_BLE_ENABLED"
+    default 1
+	config NRF_SDH_ENABLED
+	int "NRF_SDH_ENABLED"
+    default 1
+	config NRF_SDH_SOC_ENABLED
+	int "NRF_SDH_SOC_ENABLED"
+    default 1
+	
+endif
 
     menuconfig BSP_USING_UART
         bool "Enable UART"

+ 82 - 19
bsp/nrf5x/nrf52840/board/board.c

@@ -1,23 +1,38 @@
+/*
+ * Copyright (c) 2006-2020, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2020-04-29     supperthomas first version
+ *
+ */
 #include <rtthread.h>
 #include <rthw.h>
 #include <nrfx_systick.h>
 
 #include "board.h"
-#include "drv_gpio.h"
 #include "drv_uart.h"
+#ifdef BSP_USING_SOFTDEVICE
+#include <nrfx_rtc.h>
+#include <nrfx_clock.h>
+#include "app_error.h"
+#include "nrf_drv_clock.h"
+const nrfx_rtc_t rtc = NRFX_RTC_INSTANCE(1); /**< Declaring an instance of nrf_drv_rtc for RTC0. */
 
-void SysTick_Configuration(void)
+static void rtc_handler(nrfx_rtc_int_type_t int_type)
 {
-    /* Set interrupt priority */
-    NVIC_SetPriority(SysTick_IRQn, 0xf);
-    
-    /* Configure SysTick to interrupt at the requested rate. */   
-    nrf_systick_load_set(SystemCoreClock / RT_TICK_PER_SECOND);
-    nrf_systick_val_clear();
-    nrf_systick_csr_set(NRF_SYSTICK_CSR_CLKSOURCE_CPU | NRF_SYSTICK_CSR_TICKINT_ENABLE
-                        | NRF_SYSTICK_CSR_ENABLE);
-}
+    if (int_type == NRFX_RTC_INT_TICK)
+    {
+        rt_interrupt_enter();
 
+        rt_tick_increase();
+
+        rt_interrupt_leave();
+    }
+}
+#else
 /**
  * This is the timer interrupt service routine.
  *
@@ -32,27 +47,61 @@ void SysTick_Handler(void)
     /* leave interrupt */
     rt_interrupt_leave();
 }
+#endif
+void SysTick_Configuration(void)
+{
+#ifdef BSP_USING_SOFTDEVICE
+    nrf_drv_clock_init();
+    nrf_drv_clock_lfclk_request(NULL);
+
+    uint32_t err_code;
+#define TICK_RATE_HZ  RT_TICK_PER_SECOND
+#define SYSTICK_CLOCK_HZ  ( 32768UL )
 
+#define NRF_RTC_REG        NRF_RTC1
+    /* IRQn used by the selected RTC */
+#define NRF_RTC_IRQn       RTC1_IRQn
+    /* Constants required to manipulate the NVIC. */
+#define NRF_RTC_PRESCALER  ( (uint32_t) (NRFX_ROUNDED_DIV(SYSTICK_CLOCK_HZ, TICK_RATE_HZ) - 1) )
+    nrfx_rtc_config_t config = NRFX_RTC_DEFAULT_CONFIG;
+    config.prescaler = NRF_RTC_PRESCALER;
+
+    err_code = nrfx_rtc_init(&rtc, &config, rtc_handler);
+    // APP_ERROR_CHECK(err_code);
+    nrfx_rtc_tick_enable(&rtc, true);
+#define COMPARE_COUNTERTIME  (3UL)                                        /**< Get Compare event COMPARE_TIME seconds after the counter starts from 0. */
+    //Set compare channel to trigger interrupt after COMPARE_COUNTERTIME seconds
+    err_code = nrfx_rtc_cc_set(&rtc, 0, COMPARE_COUNTERTIME * 8, true);
+    // APP_ERROR_CHECK(err_code);
+
+    //Power on RTC instance
+    nrfx_rtc_enable(&rtc);
+#else
+    /* Set interrupt priority */
+    NVIC_SetPriority(SysTick_IRQn, 0xf);
+
+    /* Configure SysTick to interrupt at the requested rate. */
+    nrf_systick_load_set(SystemCoreClock / RT_TICK_PER_SECOND);
+    nrf_systick_val_clear();
+    nrf_systick_csr_set(NRF_SYSTICK_CSR_CLKSOURCE_CPU | NRF_SYSTICK_CSR_TICKINT_ENABLE
+                        | NRF_SYSTICK_CSR_ENABLE);
+#endif
+}
 
 
 void rt_hw_board_init(void)
 {
+    rt_hw_interrupt_enable(0);
     // sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE);
     /* Activate deep sleep mode */
     SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
 
-
     SysTick_Configuration();
-    
+
 #if defined(RT_USING_HEAP)
     rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);
 #endif
-    
-/* Pin driver initialization is open by default */
-#ifdef RT_USING_PIN
-    rt_hw_pin_init();
-#endif
-	
+
 #ifdef RT_USING_SERIAL
     rt_hw_uart_init();
 #endif
@@ -65,5 +114,19 @@ void rt_hw_board_init(void)
     rt_components_board_init();
 #endif
 
+#ifdef BSP_USING_SOFTDEVICE
+    extern uint32_t  Image$$RW_IRAM1$$Base;
+    uint32_t const *const m_ram_start  = &Image$$RW_IRAM1$$Base;
+    if ((uint32_t)m_ram_start == 0x20000000)
+    {
+        rt_kprintf("\r\n using softdevice the RAM couldn't be %p,please use the templete from package\r\n", m_ram_start);
+        while (1);
+    }
+    else
+    {
+        rt_kprintf("\r\n using softdevice the RAM at %p\r\n", m_ram_start);
+    }
+#endif
+
 }
 

+ 1 - 1
bsp/nrf5x/nrf52840/board/sdk_config.h

@@ -48,6 +48,7 @@
 #endif
 // <h> nRF_BLE 
 
+#include <rtconfig.h>
 //==========================================================
 // <q> BLE_ADVERTISING_ENABLED  - ble_advertising - Advertising module
  
@@ -11694,7 +11695,6 @@
 #endif
 // </e>
 
-// </h>
 //==========================================================
 #ifndef NRFX_SYSTICK_ENABLED
 #define NRFX_SYSTICK_ENABLED 1