]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M0+_LPC51U68_GCC_IAR_KEIL/drivers/fsl_reset.c
Increase test coverage for queue sets.
[freertos] / FreeRTOS / Demo / CORTEX_M0+_LPC51U68_GCC_IAR_KEIL / 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  * \r
7  * SPDX-License-Identifier: BSD-3-Clause\r
8  */\r
9 \r
10 #include "fsl_common.h"\r
11 #include "fsl_reset.h"\r
12 \r
13 /*******************************************************************************\r
14  * Definitions\r
15  ******************************************************************************/\r
16 /* Component ID definition, used by tools. */\r
17 #ifndef FSL_COMPONENT_ID\r
18 #define FSL_COMPONENT_ID "platform.drivers.reset"\r
19 #endif\r
20 \r
21 /*******************************************************************************\r
22  * Variables\r
23  ******************************************************************************/\r
24 \r
25 /*******************************************************************************\r
26  * Prototypes\r
27  ******************************************************************************/\r
28 \r
29 /*******************************************************************************\r
30  * Code\r
31  ******************************************************************************/\r
32 \r
33 #if ((defined(FSL_FEATURE_SOC_SYSCON_COUNT) && (FSL_FEATURE_SOC_SYSCON_COUNT > 0)) || \\r
34      (defined(FSL_FEATURE_SOC_ASYNC_SYSCON_COUNT) && (FSL_FEATURE_SOC_ASYNC_SYSCON_COUNT > 0)))\r
35 \r
36 /*!\r
37  * brief Assert reset to peripheral.\r
38  *\r
39  * Asserts reset signal to specified peripheral module.\r
40  *\r
41  * param peripheral Assert reset to this peripheral. The enum argument contains encoding of reset register\r
42  *                   and reset bit position in the reset register.\r
43  */\r
44 void RESET_SetPeripheralReset(reset_ip_name_t peripheral)\r
45 {\r
46     const uint32_t regIndex = ((uint32_t)peripheral & 0xFFFF0000u) >> 16;\r
47     const uint32_t bitPos = ((uint32_t)peripheral & 0x0000FFFFu);\r
48     const uint32_t bitMask = 1u << bitPos;\r
49 \r
50     assert(bitPos < 32u);\r
51 \r
52     /* ASYNC_SYSCON registers have offset 1024 */\r
53     if (regIndex >= SYSCON_PRESETCTRL_COUNT)\r
54     {\r
55         /* reset register is in ASYNC_SYSCON */\r
56 \r
57         /* set bit */\r
58         ASYNC_SYSCON->ASYNCPRESETCTRLSET = bitMask;\r
59         /* wait until it reads 0b1 */\r
60         while (0u == (ASYNC_SYSCON->ASYNCPRESETCTRL & bitMask))\r
61         {\r
62         }\r
63     }\r
64     else\r
65     {\r
66         /* reset register is in SYSCON */\r
67 \r
68         /* set bit */\r
69         SYSCON->PRESETCTRLSET[regIndex] = bitMask;\r
70         /* wait until it reads 0b1 */\r
71         while (0u == (SYSCON->PRESETCTRL[regIndex] & bitMask))\r
72         {\r
73         }\r
74     }\r
75 }\r
76 \r
77 /*!\r
78  * brief Clear reset to peripheral.\r
79  *\r
80  * Clears reset signal to specified peripheral module, allows it to operate.\r
81  *\r
82  * param peripheral Clear reset to this peripheral. The enum argument contains encoding of reset register\r
83  *                   and reset bit position in the reset register.\r
84  */\r
85 void RESET_ClearPeripheralReset(reset_ip_name_t peripheral)\r
86 {\r
87     const uint32_t regIndex = ((uint32_t)peripheral & 0xFFFF0000u) >> 16;\r
88     const uint32_t bitPos = ((uint32_t)peripheral & 0x0000FFFFu);\r
89     const uint32_t bitMask = 1u << bitPos;\r
90 \r
91     assert(bitPos < 32u);\r
92 \r
93     /* ASYNC_SYSCON registers have offset 1024 */\r
94     if (regIndex >= SYSCON_PRESETCTRL_COUNT)\r
95     {\r
96         /* reset register is in ASYNC_SYSCON */\r
97 \r
98         /* clear bit */\r
99         ASYNC_SYSCON->ASYNCPRESETCTRLCLR = bitMask;\r
100         /* wait until it reads 0b0 */\r
101         while (bitMask == (ASYNC_SYSCON->ASYNCPRESETCTRL & bitMask))\r
102         {\r
103         }\r
104     }\r
105     else\r
106     {\r
107         /* reset register is in SYSCON */\r
108 \r
109         /* clear bit */\r
110         SYSCON->PRESETCTRLCLR[regIndex] = bitMask;\r
111         /* wait until it reads 0b0 */\r
112         while (bitMask == (SYSCON->PRESETCTRL[regIndex] & bitMask))\r
113         {\r
114         }\r
115     }\r
116 }\r
117 \r
118 /*!\r
119  * brief Reset peripheral module.\r
120  *\r
121  * Reset peripheral module.\r
122  *\r
123  * param peripheral Peripheral to reset. The enum argument contains encoding of reset register\r
124  *                   and reset bit position in the reset register.\r
125  */\r
126 void RESET_PeripheralReset(reset_ip_name_t peripheral)\r
127 {\r
128     RESET_SetPeripheralReset(peripheral);\r
129     RESET_ClearPeripheralReset(peripheral);\r
130 }\r
131 \r
132 #endif /* FSL_FEATURE_SOC_SYSCON_COUNT || FSL_FEATURE_SOC_ASYNC_SYSCON_COUNT */\r