From 2446ee8b95eb0b937a5464b110f5e9266b772561 Mon Sep 17 00:00:00 2001 From: supperthomas <78900636@qq.com> Date: Wed, 22 Jul 2020 22:47:27 +0800 Subject: [PATCH] [bsp/nrf5x] add the softdevice config --- bsp/nrf5x/libraries/drivers/drv_gpio.c | 2 +- bsp/nrf5x/nrf52840/.config | 3 + bsp/nrf5x/nrf52840/applications/application.c | 27 ++--- bsp/nrf5x/nrf52840/board/Kconfig | 31 ++++++ bsp/nrf5x/nrf52840/board/board.c | 101 ++++++++++++++---- bsp/nrf5x/nrf52840/board/sdk_config.h | 2 +- 6 files changed, 124 insertions(+), 42 deletions(-) diff --git a/bsp/nrf5x/libraries/drivers/drv_gpio.c b/bsp/nrf5x/libraries/drivers/drv_gpio.c index f320fb81f2..001839b2b4 100644 --- a/bsp/nrf5x/libraries/drivers/drv_gpio.c +++ b/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 */ diff --git a/bsp/nrf5x/nrf52840/.config b/bsp/nrf5x/nrf52840/.config index 202a9af908..3c4fb174f4 100644 --- a/bsp/nrf5x/nrf52840/.config +++ b/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 diff --git a/bsp/nrf5x/nrf52840/applications/application.c b/bsp/nrf5x/nrf52840/applications/application.c index e11be12225..69def315c7 100644 --- a/bsp/nrf5x/nrf52840/applications/application.c +++ b/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. + * 2020-04-29 supperthomas first version + * */ -/** - * @addtogroup NRF52832 - */ -/*@{*/ - #include - -#ifdef RT_USING_FINSH -#include -#include -#endif - -#include +#include #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; } -/*@}*/ diff --git a/bsp/nrf5x/nrf52840/board/Kconfig b/bsp/nrf5x/nrf52840/board/Kconfig index cc4b8ee92f..9f95a9177e 100644 --- a/bsp/nrf5x/nrf52840/board/Kconfig +++ b/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" diff --git a/bsp/nrf5x/nrf52840/board/board.c b/bsp/nrf5x/nrf52840/board/board.c index 18723be78d..d1e55f4c49 100644 --- a/bsp/nrf5x/nrf52840/board/board.c +++ b/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 #include #include #include "board.h" -#include "drv_gpio.h" #include "drv_uart.h" +#ifdef BSP_USING_SOFTDEVICE +#include +#include +#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 + } diff --git a/bsp/nrf5x/nrf52840/board/sdk_config.h b/bsp/nrf5x/nrf52840/board/sdk_config.h index 619e06d23f..172e0ccc2c 100644 --- a/bsp/nrf5x/nrf52840/board/sdk_config.h +++ b/bsp/nrf5x/nrf52840/board/sdk_config.h @@ -48,6 +48,7 @@ #endif // nRF_BLE +#include //========================================================== // BLE_ADVERTISING_ENABLED - ble_advertising - Advertising module @@ -11694,7 +11695,6 @@ #endif // -// //========================================================== #ifndef NRFX_SYSTICK_ENABLED #define NRFX_SYSTICK_ENABLED 1