123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- #include <stdint.h>
- #include <stdbool.h>
- #include "nrf.h"
- #include "nrf_erratas.h"
- #include "system_nrf5340_application.h"
- #define __SYSTEM_CLOCK_MAX (128000000UL)
- #define __SYSTEM_CLOCK_INITIAL ( 64000000UL)
- #define TRACE_PIN_CNF_VALUE ( (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos) | \
- (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | \
- (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | \
- (GPIO_PIN_CNF_DRIVE_H0H1 << GPIO_PIN_CNF_DRIVE_Pos) | \
- (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) | \
- (GPIO_PIN_CNF_MCUSEL_TND << GPIO_PIN_CNF_MCUSEL_Pos))
- #define TRACE_TRACECLK_PIN TAD_PSEL_TRACECLK_PIN_Traceclk
- #define TRACE_TRACEDATA0_PIN TAD_PSEL_TRACEDATA0_PIN_Tracedata0
- #define TRACE_TRACEDATA1_PIN TAD_PSEL_TRACEDATA1_PIN_Tracedata1
- #define TRACE_TRACEDATA2_PIN TAD_PSEL_TRACEDATA2_PIN_Tracedata2
- #define TRACE_TRACEDATA3_PIN TAD_PSEL_TRACEDATA3_PIN_Tracedata3
- #if defined ( __CC_ARM )
- uint32_t SystemCoreClock __attribute__((used)) = __SYSTEM_CLOCK_INITIAL;
- #elif defined ( __ICCARM__ )
- __root uint32_t SystemCoreClock = __SYSTEM_CLOCK_INITIAL;
- #elif defined ( __GNUC__ )
- uint32_t SystemCoreClock __attribute__((used)) = __SYSTEM_CLOCK_INITIAL;
- #endif
- void SystemCoreClockUpdate(void)
- {
- #if defined(NRF_TRUSTZONE_NONSECURE)
- SystemCoreClock = __SYSTEM_CLOCK_MAX >> (NRF_CLOCK_NS->HFCLKCTRL & (CLOCK_HFCLKCTRL_HCLK_Msk));
- #else
- SystemCoreClock = __SYSTEM_CLOCK_MAX >> (NRF_CLOCK_S->HFCLKCTRL & (CLOCK_HFCLKCTRL_HCLK_Msk));
- #endif
- }
- void SystemInit(void)
- {
- #if !defined(NRF_TRUSTZONE_NONSECURE)
-
-
- #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
- SAU->CTRL |= (1 << SAU_CTRL_ALLNS_Pos);
- #endif
-
- if (nrf53_errata_97())
- {
- if (*((volatile uint32_t *)0x50004A20ul) == 0)
- {
- *((volatile uint32_t *)0x50004A20ul) = 0xDul;
- *((volatile uint32_t *)0x5000491Cul) = 0x1ul;
- *((volatile uint32_t *)0x5000491Cul) = 0x0ul;
- }
- }
-
- uint32_t index = 0;
- for (index = 0; index < 32ul && NRF_FICR_S->TRIMCNF[index].ADDR != (uint32_t *)0xFFFFFFFFul; index++){
- #if defined ( __ICCARM__ )
-
- #pragma diag_suppress=Pa082
- #endif
- *NRF_FICR_S->TRIMCNF[index].ADDR = NRF_FICR_S->TRIMCNF[index].DATA;
- #if defined ( __ICCARM__ )
- #pragma diag_default=Pa082
- #endif
- }
-
-
- if (nrf53_errata_64())
- {
- *((volatile uint32_t *)0x5000470Cul) = 0x29ul;
- *((volatile uint32_t *)0x5000473Cul) = 0x3ul;
- }
-
- if (nrf53_errata_42())
- {
- *((volatile uint32_t *)0x50039530ul) = 0xBEEF0044ul;
- NRF_CLOCK_S->HFCLKCTRL = CLOCK_HFCLKCTRL_HCLK_Div2 << CLOCK_HFCLKCTRL_HCLK_Pos;
- }
-
- if (nrf53_errata_46())
- {
- *((volatile uint32_t *)0x5003254Cul) = 0;
- }
-
- if (nrf53_errata_49())
- {
- if (NRF_RESET_S->RESETREAS & RESET_RESETREAS_RESETPIN_Msk)
- {
- NRF_POWER_S->EVENTS_SLEEPENTER = 0;
- NRF_POWER_S->EVENTS_SLEEPEXIT = 0;
- }
- }
-
- if (nrf53_errata_55())
- {
- if (NRF_RESET_S->RESETREAS & RESET_RESETREAS_RESETPIN_Msk){
- NRF_RESET_S->RESETREAS = ~RESET_RESETREAS_RESETPIN_Msk;
- }
- }
-
- if (nrf53_errata_69())
- {
- *((volatile uint32_t *)0x5000470Cul) =0x65ul;
- }
-
- #if defined(CONFIG_NFCT_PINS_AS_GPIOS)
- if ((NRF_UICR_S->NFCPINS & UICR_NFCPINS_PROTECT_Msk) == (UICR_NFCPINS_PROTECT_NFC << UICR_NFCPINS_PROTECT_Pos))
- {
- NRF_NVMC_S->CONFIG = NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos;
- while (NRF_NVMC_S->READY == NVMC_READY_READY_Busy);
- NRF_UICR_S->NFCPINS &= ~UICR_NFCPINS_PROTECT_Msk;
- while (NRF_NVMC_S->READY == NVMC_READY_READY_Busy);
- NRF_NVMC_S->CONFIG = NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos;
- while (NRF_NVMC_S->READY == NVMC_READY_READY_Busy);
- NVIC_SystemReset();
- }
- #endif
-
- #if defined (ENABLE_SWO)
-
- NRF_TAD_S->ENABLE = TAD_ENABLE_ENABLE_Msk;
- NRF_TAD_S->CLOCKSTART = TAD_CLOCKSTART_START_Msk;
-
- NRF_SPU_S->GPIOPORT[0].PERM &= ~(1 << TRACE_TRACEDATA0_PIN);
-
- NRF_P0_S->PIN_CNF[TRACE_TRACEDATA0_PIN] = TRACE_PIN_CNF_VALUE;
-
- NRF_TAD_S->PSEL.TRACEDATA0 = TRACE_TRACEDATA0_PIN;
-
- NRF_TAD_S->TRACEPORTSPEED = TAD_TRACEPORTSPEED_TRACEPORTSPEED_64MHz;
- #endif
-
- #if defined (ENABLE_TRACE)
-
- NRF_TAD_S->ENABLE = TAD_ENABLE_ENABLE_Msk;
- NRF_TAD_S->CLOCKSTART = TAD_CLOCKSTART_START_Msk;
-
- NRF_SPU_S->GPIOPORT[0].PERM &= ~(1 << TRACE_TRACECLK_PIN);
- NRF_SPU_S->GPIOPORT[0].PERM &= ~(1 << TRACE_TRACEDATA0_PIN);
- NRF_SPU_S->GPIOPORT[0].PERM &= ~(1 << TRACE_TRACEDATA1_PIN);
- NRF_SPU_S->GPIOPORT[0].PERM &= ~(1 << TRACE_TRACEDATA2_PIN);
- NRF_SPU_S->GPIOPORT[0].PERM &= ~(1 << TRACE_TRACEDATA3_PIN);
-
- NRF_P0_S->PIN_CNF[TRACE_TRACECLK_PIN] = TRACE_PIN_CNF_VALUE;
- NRF_P0_S->PIN_CNF[TRACE_TRACEDATA0_PIN] = TRACE_PIN_CNF_VALUE;
- NRF_P0_S->PIN_CNF[TRACE_TRACEDATA1_PIN] = TRACE_PIN_CNF_VALUE;
- NRF_P0_S->PIN_CNF[TRACE_TRACEDATA2_PIN] = TRACE_PIN_CNF_VALUE;
- NRF_P0_S->PIN_CNF[TRACE_TRACEDATA3_PIN] = TRACE_PIN_CNF_VALUE;
-
- NRF_TAD_S->PSEL.TRACECLK = TRACE_TRACECLK_PIN;
- NRF_TAD_S->PSEL.TRACEDATA0 = TRACE_TRACEDATA0_PIN;
- NRF_TAD_S->PSEL.TRACEDATA1 = TRACE_TRACEDATA1_PIN;
- NRF_TAD_S->PSEL.TRACEDATA2 = TRACE_TRACEDATA2_PIN;
- NRF_TAD_S->PSEL.TRACEDATA3 = TRACE_TRACEDATA3_PIN;
-
- NRF_TAD_S->TRACEPORTSPEED = TAD_TRACEPORTSPEED_TRACEPORTSPEED_64MHz;
- #endif
-
- SCB->NSACR |= (3UL << 10);
- #endif
-
- #if (__FPU_USED == 1)
- SCB->CPACR |= (3UL << 20) | (3UL << 22);
- __DSB();
- __ISB();
- #endif
- SystemCoreClockUpdate();
- }
|