board.c 3.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
/*
 * 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
 *
 */
S
supperthomas 已提交
11 12
#include <rtthread.h>
#include <rthw.h>
13
#include <nrfx_systick.h>
S
supperthomas 已提交
14

15 16
#include "board.h"
#include "drv_uart.h"
17 18 19 20 21 22
#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. */
S
supperthomas 已提交
23

24
static void rtc_handler(nrfx_rtc_int_type_t int_type)
S
supperthomas 已提交
25
{
26 27 28
    if (int_type == NRFX_RTC_INT_TICK)
    {
        rt_interrupt_enter();
S
supperthomas 已提交
29

30 31 32 33 34 35
        rt_tick_increase();

        rt_interrupt_leave();
    }
}
#else
36 37 38 39 40
/**
 * This is the timer interrupt service routine.
 *
 */
void SysTick_Handler(void)
S
supperthomas 已提交
41
{
42
    /* enter interrupt */
S
supperthomas 已提交
43 44
    rt_interrupt_enter();

45 46
    rt_tick_increase();

S
supperthomas 已提交
47 48 49
    /* leave interrupt */
    rt_interrupt_leave();
}
50 51 52 53 54 55 56 57 58 59
#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 )
S
supperthomas 已提交
60

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
#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
}
S
supperthomas 已提交
90 91 92 93


void rt_hw_board_init(void)
{
94
    rt_hw_interrupt_enable(0);
S
supperthomas 已提交
95 96 97 98 99
    // sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE);
    /* Activate deep sleep mode */
    SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;

    SysTick_Configuration();
100

101 102 103
#if defined(RT_USING_HEAP)
    rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);
#endif
104

105
#ifdef RT_USING_SERIAL
S
supperthomas 已提交
106
    rt_hw_uart_init();
107
#endif
S
supperthomas 已提交
108 109 110 111 112 113 114 115

#ifdef RT_USING_CONSOLE
    rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
#endif

#ifdef RT_USING_COMPONENTS_INIT
    rt_components_board_init();
#endif
116

117 118 119 120 121 122 123 124 125 126 127 128 129 130
#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

S
supperthomas 已提交
131 132
}