diff --git a/bsp/nrf5x/libraries/drivers/SConscript b/bsp/nrf5x/libraries/drivers/SConscript index e0f2955028..6bbdffce07 100644 --- a/bsp/nrf5x/libraries/drivers/SConscript +++ b/bsp/nrf5x/libraries/drivers/SConscript @@ -19,6 +19,8 @@ if GetDepend(['BSP_USING_QSPI_FLASH']): if GetDepend(['BSP_USING_SPI']): src += ['drv_spi.c'] +if GetDepend(['BSP_USING_GPIO']): + src += ['drv_gpio.c'] path = [cwd] 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 7565108653..3c4fb174f4 100644 --- a/bsp/nrf5x/nrf52840/.config +++ b/bsp/nrf5x/nrf52840/.config @@ -122,6 +122,7 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64 # CONFIG_RT_USING_I2C is not set CONFIG_RT_USING_PIN=y # CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set # CONFIG_RT_USING_PWM is not set # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set @@ -194,7 +195,9 @@ CONFIG_RT_USING_LIBC=y # # IoT - internet of things # +# CONFIG_PKG_USING_LORAWAN_DRIVER is not set # CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_UMQTT is not set # CONFIG_PKG_USING_WEBCLIENT is not set # CONFIG_PKG_USING_WEBNET is not set # CONFIG_PKG_USING_MONGOOSE is not set @@ -240,7 +243,7 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_GAGENT_CLOUD is not set # CONFIG_PKG_USING_ALI_IOTKIT is not set # CONFIG_PKG_USING_AZURE is not set -# CONFIG_PKG_USING_TENCENT_IOTHUB is not set +# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set # CONFIG_PKG_USING_JIOT-C-SDK is not set # CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set # CONFIG_PKG_USING_JOYLINK is not set @@ -270,6 +273,7 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_libsodium is not set # CONFIG_PKG_USING_TINYCRYPT is not set # CONFIG_PKG_USING_TFM is not set +# CONFIG_PKG_USING_YD_CRYPTO is not set # # language packages @@ -315,12 +319,7 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_LWEXT4 is not set # CONFIG_PKG_USING_PARTITION is not set # CONFIG_PKG_USING_FAL is not set -# CONFIG_PKG_USING_FAL_V00500 is not set -# CONFIG_PKG_USING_FAL_V00400 is not set -# CONFIG_PKG_USING_FAL_V00300 is not set -# CONFIG_PKG_USING_FAL_V00200 is not set -# CONFIG_PKG_USING_FAL_V00100 is not set -# CONFIG_PKG_USING_FAL_LATEST_VERSION is not set +# CONFIG_PKG_USING_FLASHDB is not set # CONFIG_PKG_USING_SQLITE is not set # CONFIG_PKG_USING_RTI is not set # CONFIG_PKG_USING_LITTLEVGL2RTT is not set @@ -333,6 +332,8 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_SYSWATCH is not set # CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set # CONFIG_PKG_USING_PLCCORE is not set +# CONFIG_PKG_USING_RAMDISK is not set +# CONFIG_PKG_USING_MININI is not set # # peripheral libraries and drivers @@ -352,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 @@ -381,6 +384,10 @@ CONFIG_PKG_NRFX_VER="v2.1.0" # CONFIG_PKG_USING_BEEP is not set # CONFIG_PKG_USING_EASYBLINK is not set # CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set +# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set +# CONFIG_PKG_USING_QLED is not set +# CONFIG_PKG_USING_PAJ7620 is not set # # miscellaneous packages @@ -427,12 +434,26 @@ CONFIG_SOC_NRF52840=y # Onboard Peripheral Drivers # # CONFIG_BSP_USING_JLINK_TO_USART is not set +# CONFIG_BSP_USING_QSPI_FLASH is not set # # On-chip Peripheral Drivers # -# CONFIG_BSP_USING_GPIO is not set -# CONFIG_BSP_USING_ON_CHIP_FLASH is not set +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 +CONFIG_BSP_UART0_TX_PIN=6 # CONFIG_BSP_USING_UART1 is not set +# CONFIG_BSP_USING_SPI is not set +# CONFIG_BSP_USING_ON_CHIP_FLASH is not set + +# +# On-chip flash config +# +CONFIG_MCU_FLASH_START_ADDRESS=0x00000000 +CONFIG_MCU_FLASH_SIZE_KB=1024 +CONFIG_MCU_SRAM_START_ADDRESS=0x20000000 +CONFIG_MCU_SRAM_SIZE_KB=256 +CONFIG_MCU_FLASH_PAGE_SIZE=0x1000 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 diff --git a/bsp/nrf5x/nrf52840/rtconfig.h b/bsp/nrf5x/nrf52840/rtconfig.h index c63c401e68..225164b8ed 100644 --- a/bsp/nrf5x/nrf52840/rtconfig.h +++ b/bsp/nrf5x/nrf52840/rtconfig.h @@ -155,13 +155,21 @@ /* Onboard Peripheral Drivers */ -#define BSP_USING_JLINK_TO_USART /* On-chip Peripheral Drivers */ +#define BSP_USING_GPIO #define BSP_USING_UART #define BSP_USING_UART0 #define BSP_UART0_RX_PIN 8 #define BSP_UART0_TX_PIN 6 +/* On-chip flash config */ + +#define MCU_FLASH_START_ADDRESS 0x00000000 +#define MCU_FLASH_SIZE_KB 1024 +#define MCU_SRAM_START_ADDRESS 0x20000000 +#define MCU_SRAM_SIZE_KB 256 +#define MCU_FLASH_PAGE_SIZE 0x1000 + #endif