]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/drivers/fsl_reset.c
commit 9f316c246baafa15c542a5aea81a94f26e3d6507
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso / NXP_Code / drivers / fsl_reset.c
1 /*\r
2  * Copyright (c) 2016, Freescale Semiconductor, Inc.\r
3  * Copyright 2016, NXP\r
4  * All rights reserved.\r
5  *\r
6  * SPDX-License-Identifier: BSD-3-Clause\r
7  */\r
8 \r
9 #include "fsl_common.h"\r
10 #include "fsl_reset.h"\r
11 \r
12 /*******************************************************************************\r
13  * Definitions\r
14  ******************************************************************************/\r
15 /* Component ID definition, used by tools. */\r
16 #ifndef FSL_COMPONENT_ID\r
17 #define FSL_COMPONENT_ID "platform.drivers.reset"\r
18 #endif\r
19 \r
20 /*******************************************************************************\r
21  * Variables\r
22  ******************************************************************************/\r
23 \r
24 /*******************************************************************************\r
25  * Prototypes\r
26  ******************************************************************************/\r
27 \r
28 /*******************************************************************************\r
29  * Code\r
30  ******************************************************************************/\r
31 \r
32 #if (defined(FSL_FEATURE_SOC_SYSCON_COUNT) && (FSL_FEATURE_SOC_SYSCON_COUNT > 0))\r
33 \r
34 /*!\r
35  * brief Assert reset to peripheral.\r
36  *\r
37  * Asserts reset signal to specified peripheral module.\r
38  *\r
39  * param peripheral Assert reset to this peripheral. The enum argument contains encoding of reset register\r
40  *                   and reset bit position in the reset register.\r
41  */\r
42 void RESET_SetPeripheralReset(reset_ip_name_t peripheral)\r
43 {\r
44     const uint32_t regIndex = ((uint32_t)peripheral & 0xFFFF0000u) >> 16;\r
45     const uint32_t bitPos   = ((uint32_t)peripheral & 0x0000FFFFu);\r
46     const uint32_t bitMask  = 1UL << bitPos;\r
47 \r
48     assert(bitPos < 32u);\r
49 \r
50     /* reset register is in SYSCON */\r
51     /* set bit */\r
52     SYSCON->PRESETCTRLSET[regIndex] = bitMask;\r
53     /* wait until it reads 0b1 */\r
54     while (0u == (SYSCON->PRESETCTRLX[regIndex] & bitMask))\r
55     {\r
56     }\r
57 }\r
58 \r
59 /*!\r
60  * brief Clear reset to peripheral.\r
61  *\r
62  * Clears reset signal to specified peripheral module, allows it to operate.\r
63  *\r
64  * param peripheral Clear reset to this peripheral. The enum argument contains encoding of reset register\r
65  *                   and reset bit position in the reset register.\r
66  */\r
67 void RESET_ClearPeripheralReset(reset_ip_name_t peripheral)\r
68 {\r
69     const uint32_t regIndex = ((uint32_t)peripheral & 0xFFFF0000u) >> 16;\r
70     const uint32_t bitPos   = ((uint32_t)peripheral & 0x0000FFFFu);\r
71     const uint32_t bitMask  = 1UL << bitPos;\r
72 \r
73     assert(bitPos < 32u);\r
74 \r
75     /* reset register is in SYSCON */\r
76 \r
77     /* clear bit */\r
78     SYSCON->PRESETCTRLCLR[regIndex] = bitMask;\r
79     /* wait until it reads 0b0 */\r
80     while (bitMask == (SYSCON->PRESETCTRLX[regIndex] & bitMask))\r
81     {\r
82     }\r
83 }\r
84 \r
85 /*!\r
86  * brief Reset peripheral module.\r
87  *\r
88  * Reset peripheral module.\r
89  *\r
90  * param peripheral Peripheral to reset. The enum argument contains encoding of reset register\r
91  *                   and reset bit position in the reset register.\r
92  */\r
93 void RESET_PeripheralReset(reset_ip_name_t peripheral)\r
94 {\r
95     RESET_SetPeripheralReset(peripheral);\r
96     RESET_ClearPeripheralReset(peripheral);\r
97 }\r
98 \r
99 #endif /* FSL_FEATURE_SOC_SYSCON_COUNT || FSL_FEATURE_SOC_ASYNC_SYSCON_COUNT */\r