1*150812a8SEvalZero /* 2*150812a8SEvalZero 3*150812a8SEvalZero Copyright (c) 2009-2018 ARM Limited. All rights reserved. 4*150812a8SEvalZero 5*150812a8SEvalZero SPDX-License-Identifier: Apache-2.0 6*150812a8SEvalZero 7*150812a8SEvalZero Licensed under the Apache License, Version 2.0 (the License); you may 8*150812a8SEvalZero not use this file except in compliance with the License. 9*150812a8SEvalZero You may obtain a copy of the License at 10*150812a8SEvalZero 11*150812a8SEvalZero www.apache.org/licenses/LICENSE-2.0 12*150812a8SEvalZero 13*150812a8SEvalZero Unless required by applicable law or agreed to in writing, software 14*150812a8SEvalZero distributed under the License is distributed on an AS IS BASIS, WITHOUT 15*150812a8SEvalZero WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16*150812a8SEvalZero See the License for the specific language governing permissions and 17*150812a8SEvalZero limitations under the License. 18*150812a8SEvalZero 19*150812a8SEvalZero NOTICE: This file has been modified by Nordic Semiconductor ASA. 20*150812a8SEvalZero 21*150812a8SEvalZero */ 22*150812a8SEvalZero 23*150812a8SEvalZero /* NOTE: Template files (including this one) are application specific and therefore expected to 24*150812a8SEvalZero be copied into the application project folder prior to its use! */ 25*150812a8SEvalZero 26*150812a8SEvalZero #include <stdint.h> 27*150812a8SEvalZero #include <stdbool.h> 28*150812a8SEvalZero #include "nrf.h" 29*150812a8SEvalZero #include "system_nrf52810.h" 30*150812a8SEvalZero 31*150812a8SEvalZero /*lint ++flb "Enter library region" */ 32*150812a8SEvalZero 33*150812a8SEvalZero #define __SYSTEM_CLOCK_64M (64000000UL) 34*150812a8SEvalZero 35*150812a8SEvalZero static bool errata_31(void); 36*150812a8SEvalZero static bool errata_36(void); 37*150812a8SEvalZero static bool errata_66(void); 38*150812a8SEvalZero static bool errata_103(void); 39*150812a8SEvalZero static bool errata_136(void); 40*150812a8SEvalZero 41*150812a8SEvalZero /* Helper functions for Errata workarounds in nRF52832 */ 42*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) 43*150812a8SEvalZero static bool errata_12(void); 44*150812a8SEvalZero static bool errata_16(void); 45*150812a8SEvalZero static bool errata_32(void); 46*150812a8SEvalZero static bool errata_37(void); 47*150812a8SEvalZero static bool errata_57(void); 48*150812a8SEvalZero static bool errata_108(void); 49*150812a8SEvalZero static bool errata_182(void); 50*150812a8SEvalZero #endif 51*150812a8SEvalZero 52*150812a8SEvalZero #if defined ( __CC_ARM ) 53*150812a8SEvalZero uint32_t SystemCoreClock __attribute__((used)) = __SYSTEM_CLOCK_64M; 54*150812a8SEvalZero #elif defined ( __ICCARM__ ) 55*150812a8SEvalZero __root uint32_t SystemCoreClock = __SYSTEM_CLOCK_64M; 56*150812a8SEvalZero #elif defined ( __GNUC__ ) 57*150812a8SEvalZero uint32_t SystemCoreClock __attribute__((used)) = __SYSTEM_CLOCK_64M; 58*150812a8SEvalZero #endif 59*150812a8SEvalZero SystemCoreClockUpdate(void)60*150812a8SEvalZerovoid SystemCoreClockUpdate(void) 61*150812a8SEvalZero { 62*150812a8SEvalZero SystemCoreClock = __SYSTEM_CLOCK_64M; 63*150812a8SEvalZero } 64*150812a8SEvalZero SystemInit(void)65*150812a8SEvalZerovoid SystemInit(void) 66*150812a8SEvalZero { 67*150812a8SEvalZero /* Enable SWO trace functionality. If ENABLE_SWO is not defined, SWO pin will be used as GPIO (see Product 68*150812a8SEvalZero Specification to see which one). Only available if the developing environment is an nRF52832 device. */ 69*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) && defined (ENABLE_SWO) 70*150812a8SEvalZero CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; 71*150812a8SEvalZero NRF_CLOCK->TRACECONFIG |= CLOCK_TRACECONFIG_TRACEMUX_Serial << CLOCK_TRACECONFIG_TRACEMUX_Pos; 72*150812a8SEvalZero NRF_P0->PIN_CNF[18] = (GPIO_PIN_CNF_DRIVE_H0H1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); 73*150812a8SEvalZero #endif 74*150812a8SEvalZero 75*150812a8SEvalZero /* Enable Trace functionality. If ENABLE_TRACE is not defined, TRACE pins will be used as GPIOs (see Product 76*150812a8SEvalZero Specification to see which ones). Only available if the developing environment is an nRF52832 device. */ 77*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) && defined (ENABLE_TRACE) 78*150812a8SEvalZero CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; 79*150812a8SEvalZero NRF_CLOCK->TRACECONFIG |= CLOCK_TRACECONFIG_TRACEMUX_Parallel << CLOCK_TRACECONFIG_TRACEMUX_Pos; 80*150812a8SEvalZero NRF_P0->PIN_CNF[14] = (GPIO_PIN_CNF_DRIVE_H0H1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); 81*150812a8SEvalZero NRF_P0->PIN_CNF[15] = (GPIO_PIN_CNF_DRIVE_H0H1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); 82*150812a8SEvalZero NRF_P0->PIN_CNF[16] = (GPIO_PIN_CNF_DRIVE_H0H1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); 83*150812a8SEvalZero NRF_P0->PIN_CNF[18] = (GPIO_PIN_CNF_DRIVE_H0H1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); 84*150812a8SEvalZero NRF_P0->PIN_CNF[20] = (GPIO_PIN_CNF_DRIVE_H0H1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); 85*150812a8SEvalZero #endif 86*150812a8SEvalZero 87*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) 88*150812a8SEvalZero /* Workaround for Errata 12 "COMP: Reference ladder not correctly calibrated" found at the Errata document 89*150812a8SEvalZero for nRF52832 device located at https://infocenter.nordicsemi.com/ */ 90*150812a8SEvalZero if (errata_12()){ 91*150812a8SEvalZero *(volatile uint32_t *)0x40013540 = (*(uint32_t *)0x10000324 & 0x00001F00) >> 8; 92*150812a8SEvalZero } 93*150812a8SEvalZero #endif 94*150812a8SEvalZero 95*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) 96*150812a8SEvalZero /* Workaround for Errata 16 "System: RAM may be corrupt on wakeup from CPU IDLE" found at the Errata document 97*150812a8SEvalZero for nRF52832 device located at https://infocenter.nordicsemi.com/ */ 98*150812a8SEvalZero if (errata_16()){ 99*150812a8SEvalZero *(volatile uint32_t *)0x4007C074 = 3131961357ul; 100*150812a8SEvalZero } 101*150812a8SEvalZero #endif 102*150812a8SEvalZero 103*150812a8SEvalZero /* Workaround for Errata 31 "CLOCK: Calibration values are not correctly loaded from FICR at reset" found at the Errata document 104*150812a8SEvalZero for your device located at https://infocenter.nordicsemi.com/ */ 105*150812a8SEvalZero if (errata_31()){ 106*150812a8SEvalZero *(volatile uint32_t *)0x4000053C = ((*(volatile uint32_t *)0x10000244) & 0x0000E000) >> 13; 107*150812a8SEvalZero } 108*150812a8SEvalZero 109*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) 110*150812a8SEvalZero /* Workaround for Errata 32 "DIF: Debug session automatically enables TracePort pins" found at the Errata document 111*150812a8SEvalZero for nRF52832 device located at https://infocenter.nordicsemi.com/ */ 112*150812a8SEvalZero if (errata_32()){ 113*150812a8SEvalZero CoreDebug->DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk; 114*150812a8SEvalZero } 115*150812a8SEvalZero #endif 116*150812a8SEvalZero 117*150812a8SEvalZero /* Workaround for Errata 36 "CLOCK: Some registers are not reset when expected" found at the Errata document 118*150812a8SEvalZero for your device located at https://infocenter.nordicsemi.com/ */ 119*150812a8SEvalZero if (errata_36()){ 120*150812a8SEvalZero NRF_CLOCK->EVENTS_DONE = 0; 121*150812a8SEvalZero NRF_CLOCK->EVENTS_CTTO = 0; 122*150812a8SEvalZero NRF_CLOCK->CTIV = 0; 123*150812a8SEvalZero } 124*150812a8SEvalZero 125*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) 126*150812a8SEvalZero /* Workaround for Errata 37 "RADIO: Encryption engine is slow by default" found at the Errata document 127*150812a8SEvalZero for your device located at https://infocenter.nordicsemi.com/ */ 128*150812a8SEvalZero if (errata_37()){ 129*150812a8SEvalZero *(volatile uint32_t *)0x400005A0 = 0x3; 130*150812a8SEvalZero } 131*150812a8SEvalZero #endif 132*150812a8SEvalZero 133*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) 134*150812a8SEvalZero /* Workaround for Errata 57 "NFCT: NFC Modulation amplitude" found at the Errata document 135*150812a8SEvalZero for your device located at https://infocenter.nordicsemi.com/ */ 136*150812a8SEvalZero if (errata_57()){ 137*150812a8SEvalZero *(volatile uint32_t *)0x40005610 = 0x00000005; 138*150812a8SEvalZero *(volatile uint32_t *)0x40005688 = 0x00000001; 139*150812a8SEvalZero *(volatile uint32_t *)0x40005618 = 0x00000000; 140*150812a8SEvalZero *(volatile uint32_t *)0x40005614 = 0x0000003F; 141*150812a8SEvalZero } 142*150812a8SEvalZero #endif 143*150812a8SEvalZero 144*150812a8SEvalZero /* Workaround for Errata 66 "TEMP: Linearity specification not met with default settings" found at the Errata document 145*150812a8SEvalZero for your device located at https://infocenter.nordicsemi.com/ */ 146*150812a8SEvalZero if (errata_66()){ 147*150812a8SEvalZero NRF_TEMP->A0 = NRF_FICR->TEMP.A0; 148*150812a8SEvalZero NRF_TEMP->A1 = NRF_FICR->TEMP.A1; 149*150812a8SEvalZero NRF_TEMP->A2 = NRF_FICR->TEMP.A2; 150*150812a8SEvalZero NRF_TEMP->A3 = NRF_FICR->TEMP.A3; 151*150812a8SEvalZero NRF_TEMP->A4 = NRF_FICR->TEMP.A4; 152*150812a8SEvalZero NRF_TEMP->A5 = NRF_FICR->TEMP.A5; 153*150812a8SEvalZero NRF_TEMP->B0 = NRF_FICR->TEMP.B0; 154*150812a8SEvalZero NRF_TEMP->B1 = NRF_FICR->TEMP.B1; 155*150812a8SEvalZero NRF_TEMP->B2 = NRF_FICR->TEMP.B2; 156*150812a8SEvalZero NRF_TEMP->B3 = NRF_FICR->TEMP.B3; 157*150812a8SEvalZero NRF_TEMP->B4 = NRF_FICR->TEMP.B4; 158*150812a8SEvalZero NRF_TEMP->B5 = NRF_FICR->TEMP.B5; 159*150812a8SEvalZero NRF_TEMP->T0 = NRF_FICR->TEMP.T0; 160*150812a8SEvalZero NRF_TEMP->T1 = NRF_FICR->TEMP.T1; 161*150812a8SEvalZero NRF_TEMP->T2 = NRF_FICR->TEMP.T2; 162*150812a8SEvalZero NRF_TEMP->T3 = NRF_FICR->TEMP.T3; 163*150812a8SEvalZero NRF_TEMP->T4 = NRF_FICR->TEMP.T4; 164*150812a8SEvalZero } 165*150812a8SEvalZero 166*150812a8SEvalZero /* Workaround for Errata 103 "CCM: Wrong reset value of CCM MAXPACKETSIZE" found at the Errata document 167*150812a8SEvalZero for your device located at https://infocenter.nordicsemi.com/ */ 168*150812a8SEvalZero if (errata_103()){ 169*150812a8SEvalZero NRF_CCM->MAXPACKETSIZE = 0xFBul; 170*150812a8SEvalZero } 171*150812a8SEvalZero 172*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) 173*150812a8SEvalZero /* Workaround for Errata 108 "RAM: RAM content cannot be trusted upon waking up from System ON Idle or System OFF mode" found at the Errata document 174*150812a8SEvalZero for your device located at https://infocenter.nordicsemi.com/ */ 175*150812a8SEvalZero if (errata_108()){ 176*150812a8SEvalZero *(volatile uint32_t *)0x40000EE4 = *(volatile uint32_t *)0x10000258 & 0x0000004F; 177*150812a8SEvalZero } 178*150812a8SEvalZero #endif 179*150812a8SEvalZero 180*150812a8SEvalZero /* Workaround for Errata 136 "System: Bits in RESETREAS are set when they should not be" found at the Errata document 181*150812a8SEvalZero for your device located at https://infocenter.nordicsemi.com/ */ 182*150812a8SEvalZero if (errata_136()){ 183*150812a8SEvalZero if (NRF_POWER->RESETREAS & POWER_RESETREAS_RESETPIN_Msk){ 184*150812a8SEvalZero NRF_POWER->RESETREAS = ~POWER_RESETREAS_RESETPIN_Msk; 185*150812a8SEvalZero } 186*150812a8SEvalZero } 187*150812a8SEvalZero 188*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) 189*150812a8SEvalZero /* Workaround for Errata 182 "RADIO: Fixes for anomalies #102, #106, and #107 do not take effect" found at the Errata document 190*150812a8SEvalZero for your device located at https://infocenter.nordicsemi.com/ */ 191*150812a8SEvalZero if (errata_182()){ 192*150812a8SEvalZero *(volatile uint32_t *) 0x4000173C |= (0x1 << 10); 193*150812a8SEvalZero } 194*150812a8SEvalZero #endif 195*150812a8SEvalZero 196*150812a8SEvalZero /* Configure GPIO pads as pPin Reset pin if Pin Reset capabilities desired. If CONFIG_GPIO_AS_PINRESET is not 197*150812a8SEvalZero defined, pin reset will not be available. One GPIO (see Product Specification to see which one) will then be 198*150812a8SEvalZero reserved for PinReset and not available as normal GPIO. */ 199*150812a8SEvalZero #if defined (CONFIG_GPIO_AS_PINRESET) 200*150812a8SEvalZero if (((NRF_UICR->PSELRESET[0] & UICR_PSELRESET_CONNECT_Msk) != (UICR_PSELRESET_CONNECT_Connected << UICR_PSELRESET_CONNECT_Pos)) || 201*150812a8SEvalZero ((NRF_UICR->PSELRESET[1] & UICR_PSELRESET_CONNECT_Msk) != (UICR_PSELRESET_CONNECT_Connected << UICR_PSELRESET_CONNECT_Pos))){ 202*150812a8SEvalZero NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos; 203*150812a8SEvalZero while (NRF_NVMC->READY == NVMC_READY_READY_Busy){} 204*150812a8SEvalZero NRF_UICR->PSELRESET[0] = 21; 205*150812a8SEvalZero while (NRF_NVMC->READY == NVMC_READY_READY_Busy){} 206*150812a8SEvalZero NRF_UICR->PSELRESET[1] = 21; 207*150812a8SEvalZero while (NRF_NVMC->READY == NVMC_READY_READY_Busy){} 208*150812a8SEvalZero NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos; 209*150812a8SEvalZero while (NRF_NVMC->READY == NVMC_READY_READY_Busy){} 210*150812a8SEvalZero NVIC_SystemReset(); 211*150812a8SEvalZero } 212*150812a8SEvalZero #endif 213*150812a8SEvalZero 214*150812a8SEvalZero SystemCoreClockUpdate(); 215*150812a8SEvalZero } 216*150812a8SEvalZero 217*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) errata_12(void)218*150812a8SEvalZerostatic bool errata_12(void) 219*150812a8SEvalZero { 220*150812a8SEvalZero if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 221*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 222*150812a8SEvalZero return true; 223*150812a8SEvalZero } 224*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x40){ 225*150812a8SEvalZero return true; 226*150812a8SEvalZero } 227*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x50){ 228*150812a8SEvalZero return true; 229*150812a8SEvalZero } 230*150812a8SEvalZero } 231*150812a8SEvalZero 232*150812a8SEvalZero return false; 233*150812a8SEvalZero } 234*150812a8SEvalZero #endif 235*150812a8SEvalZero 236*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) errata_16(void)237*150812a8SEvalZerostatic bool errata_16(void) 238*150812a8SEvalZero { 239*150812a8SEvalZero if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 240*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 241*150812a8SEvalZero return true; 242*150812a8SEvalZero } 243*150812a8SEvalZero } 244*150812a8SEvalZero 245*150812a8SEvalZero return false; 246*150812a8SEvalZero } 247*150812a8SEvalZero #endif 248*150812a8SEvalZero errata_31(void)249*150812a8SEvalZerostatic bool errata_31(void) 250*150812a8SEvalZero { 251*150812a8SEvalZero if ((*(uint32_t *)0x10000130ul == 0xAul) && (*(uint32_t *)0x10000134ul == 0x0ul)){ 252*150812a8SEvalZero return true; 253*150812a8SEvalZero } 254*150812a8SEvalZero 255*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) 256*150812a8SEvalZero if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 257*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 258*150812a8SEvalZero return true; 259*150812a8SEvalZero } 260*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x40){ 261*150812a8SEvalZero return true; 262*150812a8SEvalZero } 263*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x50){ 264*150812a8SEvalZero return true; 265*150812a8SEvalZero } 266*150812a8SEvalZero } 267*150812a8SEvalZero #endif 268*150812a8SEvalZero 269*150812a8SEvalZero /* Fix should always apply. */ 270*150812a8SEvalZero return true; 271*150812a8SEvalZero } 272*150812a8SEvalZero 273*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) errata_32(void)274*150812a8SEvalZerostatic bool errata_32(void) 275*150812a8SEvalZero { 276*150812a8SEvalZero if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 277*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 278*150812a8SEvalZero return true; 279*150812a8SEvalZero } 280*150812a8SEvalZero } 281*150812a8SEvalZero 282*150812a8SEvalZero return false; 283*150812a8SEvalZero } 284*150812a8SEvalZero #endif 285*150812a8SEvalZero errata_36(void)286*150812a8SEvalZerostatic bool errata_36(void) 287*150812a8SEvalZero { 288*150812a8SEvalZero if ((*(uint32_t *)0x10000130ul == 0xAul) && (*(uint32_t *)0x10000134ul == 0x0ul)){ 289*150812a8SEvalZero return true; 290*150812a8SEvalZero } 291*150812a8SEvalZero 292*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) 293*150812a8SEvalZero if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 294*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 295*150812a8SEvalZero return true; 296*150812a8SEvalZero } 297*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x40){ 298*150812a8SEvalZero return true; 299*150812a8SEvalZero } 300*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x50){ 301*150812a8SEvalZero return true; 302*150812a8SEvalZero } 303*150812a8SEvalZero } 304*150812a8SEvalZero #endif 305*150812a8SEvalZero 306*150812a8SEvalZero /* Fix should always apply. */ 307*150812a8SEvalZero return true; 308*150812a8SEvalZero } 309*150812a8SEvalZero 310*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) errata_37(void)311*150812a8SEvalZerostatic bool errata_37(void) 312*150812a8SEvalZero { 313*150812a8SEvalZero if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 314*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 315*150812a8SEvalZero return true; 316*150812a8SEvalZero } 317*150812a8SEvalZero } 318*150812a8SEvalZero 319*150812a8SEvalZero return false; 320*150812a8SEvalZero } 321*150812a8SEvalZero #endif 322*150812a8SEvalZero 323*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) errata_57(void)324*150812a8SEvalZerostatic bool errata_57(void) 325*150812a8SEvalZero { 326*150812a8SEvalZero if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 327*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 328*150812a8SEvalZero return true; 329*150812a8SEvalZero } 330*150812a8SEvalZero } 331*150812a8SEvalZero 332*150812a8SEvalZero return false; 333*150812a8SEvalZero } 334*150812a8SEvalZero #endif 335*150812a8SEvalZero errata_66(void)336*150812a8SEvalZerostatic bool errata_66(void) 337*150812a8SEvalZero { 338*150812a8SEvalZero if ((*(uint32_t *)0x10000130ul == 0xAul) && (*(uint32_t *)0x10000134ul == 0x0ul)){ 339*150812a8SEvalZero return true; 340*150812a8SEvalZero } 341*150812a8SEvalZero 342*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) 343*150812a8SEvalZero if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 344*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x50){ 345*150812a8SEvalZero return true; 346*150812a8SEvalZero } 347*150812a8SEvalZero } 348*150812a8SEvalZero #endif 349*150812a8SEvalZero 350*150812a8SEvalZero /* Fix should always apply. */ 351*150812a8SEvalZero return true; 352*150812a8SEvalZero } 353*150812a8SEvalZero errata_103(void)354*150812a8SEvalZerostatic bool errata_103(void) 355*150812a8SEvalZero { 356*150812a8SEvalZero if ((*(uint32_t *)0x10000130ul == 0xAul) && (*(uint32_t *)0x10000134ul == 0x0ul)){ 357*150812a8SEvalZero return true; 358*150812a8SEvalZero } 359*150812a8SEvalZero 360*150812a8SEvalZero /* Fix should always apply. */ 361*150812a8SEvalZero return true; 362*150812a8SEvalZero } 363*150812a8SEvalZero 364*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) errata_108(void)365*150812a8SEvalZerostatic bool errata_108(void) 366*150812a8SEvalZero { 367*150812a8SEvalZero if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 368*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 369*150812a8SEvalZero return true; 370*150812a8SEvalZero } 371*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x40){ 372*150812a8SEvalZero return true; 373*150812a8SEvalZero } 374*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x50){ 375*150812a8SEvalZero return true; 376*150812a8SEvalZero } 377*150812a8SEvalZero } 378*150812a8SEvalZero 379*150812a8SEvalZero return false; 380*150812a8SEvalZero } 381*150812a8SEvalZero #endif 382*150812a8SEvalZero errata_136(void)383*150812a8SEvalZerostatic bool errata_136(void) 384*150812a8SEvalZero { 385*150812a8SEvalZero if ((*(uint32_t *)0x10000130ul == 0xAul) && (*(uint32_t *)0x10000134ul == 0x0ul)){ 386*150812a8SEvalZero return true; 387*150812a8SEvalZero } 388*150812a8SEvalZero 389*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) 390*150812a8SEvalZero if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 391*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 392*150812a8SEvalZero return true; 393*150812a8SEvalZero } 394*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x40){ 395*150812a8SEvalZero return true; 396*150812a8SEvalZero } 397*150812a8SEvalZero if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x50){ 398*150812a8SEvalZero return true; 399*150812a8SEvalZero } 400*150812a8SEvalZero } 401*150812a8SEvalZero #endif 402*150812a8SEvalZero 403*150812a8SEvalZero /* Fix should always apply. */ 404*150812a8SEvalZero return true; 405*150812a8SEvalZero } 406*150812a8SEvalZero 407*150812a8SEvalZero #if defined (DEVELOP_IN_NRF52832) errata_182(void)408*150812a8SEvalZerostatic bool errata_182(void) 409*150812a8SEvalZero { 410*150812a8SEvalZero if (*(uint32_t *)0x10000130ul == 0x6ul){ 411*150812a8SEvalZero if (*(uint32_t *)0x10000134ul == 0x6ul){ 412*150812a8SEvalZero return true; 413*150812a8SEvalZero } 414*150812a8SEvalZero } 415*150812a8SEvalZero 416*150812a8SEvalZero return false; 417*150812a8SEvalZero } 418*150812a8SEvalZero #endif 419*150812a8SEvalZero 420*150812a8SEvalZero 421*150812a8SEvalZero /*lint --flb "Leave library region" */ 422