xref: /nrf52832-nimble/nordic/nrfx/mdk/system_nrf52810.c (revision 150812a83cab50279bd772ef6db1bfaf255f2c5b)
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*150812a8SEvalZero void SystemCoreClockUpdate(void)
61*150812a8SEvalZero {
62*150812a8SEvalZero     SystemCoreClock = __SYSTEM_CLOCK_64M;
63*150812a8SEvalZero }
64*150812a8SEvalZero 
SystemInit(void)65*150812a8SEvalZero void 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*150812a8SEvalZero static 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*150812a8SEvalZero static 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*150812a8SEvalZero static 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*150812a8SEvalZero static 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*150812a8SEvalZero static 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*150812a8SEvalZero static 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*150812a8SEvalZero static 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*150812a8SEvalZero static 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*150812a8SEvalZero static 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*150812a8SEvalZero static 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*150812a8SEvalZero static 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*150812a8SEvalZero static 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