]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_MEC17xx_Keil_GCC/peripheral_library/pcr/pcr.h
Add MPU project for multiple MEC17xx devices.
[freertos] / FreeRTOS / Demo / CORTEX_MPU_MEC17xx_Keil_GCC / peripheral_library / pcr / pcr.h
1 /*****************************************************************************\r
2 * © 2015 Microchip Technology Inc. and its subsidiaries.\r
3 * You may use this software and any derivatives exclusively with\r
4 * Microchip products.\r
5 * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS".\r
6 * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,\r
7 * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,\r
8 * AND FITNESS FOR A PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP\r
9 * PRODUCTS, COMBINATION WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION.\r
10 * IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,\r
11 * INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND\r
12 * WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS\r
13 * BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE.\r
14 * TO THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL\r
15 * CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF\r
16 * FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.\r
17 * MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE\r
18 * OF THESE TERMS.\r
19 ******************************************************************************\r
20 \r
21 Version Control Information (Perforce)\r
22 ******************************************************************************\r
23 $Revision: #1 $ \r
24 $DateTime: 2016/09/22 08:03:49 $ \r
25 $Author: pramans $\r
26 Last Change:    Updated for tabs\r
27 ******************************************************************************/\r
28 /** @file pcr.h\r
29 * \brief Power, Clocks, and Resets Header file\r
30 * \author jvasanth\r
31\r
32 * This file is the PCR header file  \r
33 ******************************************************************************/\r
34 \r
35 /** @defgroup PCR\r
36  *  @{\r
37  */\r
38 \r
39 #ifndef _PCR_H\r
40 #define _PCR_H\r
41 \r
42 \r
43 /******************************************************************************/\r
44 /**  PCR Register IDS \r
45  *******************************************************************************/\r
46 enum _PCR_REGSET_ID_\r
47 {\r
48         PCR_REG_SYSTEM_SLEEP_CTRL = 0,  \r
49   PCR_REG_PROCESSOR_CLK_CTRL,   \r
50         PCR_REG_SLOW_CLK_CTRL,\r
51         PCR_REG_OSCILLATOR_ID,\r
52         PCR_REG_PWR_RESET_STS,\r
53         PCR_REG_PWR_RESET_CTRL,\r
54         PCR_REG_SYSTEM_RESET,\r
55         PCR_TEST0,\r
56         PCR_TEST1,\r
57         PCR_REG_EC_SLEEP_ENABLE_0 = 12,\r
58         PCR_REG_EC_SLEEP_ENABLE_1,\r
59         PCR_REG_EC_SLEEP_ENABLE_2,\r
60         PCR_REG_EC_SLEEP_ENABLE_3,      \r
61         PCR_REG_EC_SLEEP_ENABLE_4,      \r
62         PCR_REG_EC_CLK_REQD_STS_0 = 20,\r
63         PCR_REG_EC_CLK_REQD_STS_1,\r
64         PCR_REG_EC_CLK_REQD_STS_2,\r
65         PCR_REG_EC_CLK_REQD_STS_3,\r
66         PCR_REG_EC_CLK_REQD_STS_4,\r
67         PCR_REG_EC_RESET_ENABLE_0 = 28,\r
68         PCR_REG_EC_RESET_ENABLE_1,\r
69         PCR_REG_EC_RESET_ENABLE_2,\r
70         PCR_REG_EC_RESET_ENABLE_3,\r
71         PCR_REG_EC_RESET_ENABLE_4,\r
72         \r
73 };\r
74 /* ---------------------------------------------------------------------- */\r
75 \r
76 // Encode the Register ids for Sleep Enable, Clock Required, Reset Enable\r
77 //PCR register group 0 - EC 0\r
78 #define PCR0_REGS_EC            (((uint32_t)(PCR_REG_EC_SLEEP_ENABLE_0) & 0xFF) + \\r
79                                                         (((uint32_t)(PCR_REG_EC_CLK_REQD_STS_0) & 0xFF)<<8u) + \\r
80                                                         (((uint32_t)(PCR_REG_EC_RESET_ENABLE_0) & 0xFF)<<16u))\r
81 \r
82 //PCR register group 1 - EC 1\r
83 #define PCR1_REGS_EC            (((uint32_t)(PCR_REG_EC_SLEEP_ENABLE_1) & 0xFF) + \\r
84                                                         (((uint32_t)(PCR_REG_EC_CLK_REQD_STS_1) & 0xFF)<<8u) + \\r
85                                                         (((uint32_t)(PCR_REG_EC_RESET_ENABLE_1) & 0xFF)<<16u))\r
86 \r
87 //PCR register group 2 - EC 2\r
88 #define PCR2_REGS_EC            (((uint32_t)(PCR_REG_EC_SLEEP_ENABLE_2) & 0xFF) + \\r
89                                                         (((uint32_t)(PCR_REG_EC_CLK_REQD_STS_2) & 0xFF)<<8u) + \\r
90                                                         (((uint32_t)(PCR_REG_EC_RESET_ENABLE_2) & 0xFF)<<16u))\r
91 \r
92 //PCR register group 3 - EC 3\r
93 #define PCR3_REGS_EC            (((uint32_t)(PCR_REG_EC_SLEEP_ENABLE_3) & 0xFF) + \\r
94                                                         (((uint32_t)(PCR_REG_EC_CLK_REQD_STS_3) & 0xFF)<<8u) + \\r
95                                                         (((uint32_t)(PCR_REG_EC_RESET_ENABLE_3) & 0xFF)<<16u))\r
96                                                         \r
97 //PCR register group 4 - EC 4\r
98 #define PCR4_REGS_EC            (((uint32_t)(PCR_REG_EC_SLEEP_ENABLE_4) & 0xFF) + \\r
99                                                         (((uint32_t)(PCR_REG_EC_CLK_REQD_STS_4) & 0xFF)<<8u) + \\r
100                                                         (((uint32_t)(PCR_REG_EC_RESET_ENABLE_4) & 0xFF)<<16u))\r
101                                                                                                         \r
102 //PCR0_EC -> SLEEP_ENABLE, CLK REQD STS, RESET_ENABLE Bit Positions\r
103 #define PCR0_EC_JTAG_STAP_BITPOS     (0u)\r
104 #define PCR0_EC_EFUSE_BITPOS         (1u)\r
105 #define PCR0_EC_ISPI_BITPOS          (2u)\r
106 \r
107 //PCR1_EC -> SLEEP_ENABLE, CLK REQD STS, RESET_ENABLE Bit Positions\r
108 #define PCR1_EC_INT_BITPOS           (0u)\r
109 #define PCR1_EC_PECI_BITPOS          (1u)\r
110 #define PCR1_EC_TACH0_BITPOS         (2u)\r
111 #define PCR1_EC_PWM0_BITPOS          (4u)\r
112 #define PCR1_EC_PMC_BITPOS           (5u)\r
113 #define PCR1_EC_DMA_BITPOS           (6u)\r
114 #define PCR1_EC_TFDP_BITPOS          (7u)\r
115 #define PCR1_EC_CPU_BITPOS           (8u)\r
116 #define PCR1_EC_WDT_BITPOS           (9u)\r
117 #define PCR1_EC_SMB0_BITPOS          (10u)\r
118 #define PCR1_EC_TACH1_BITPOS         (11u)\r
119 #define PCR1_EC_TACH2_BITPOS         (12u)\r
120 #define PCR1_EC_PWM1_BITPOS          (20u)\r
121 #define PCR1_EC_PWM2_BITPOS          (21u)\r
122 #define PCR1_EC_PWM3_BITPOS          (22u)\r
123 #define PCR1_EC_PWM4_BITPOS          (23u)\r
124 #define PCR1_EC_PWM5_BITPOS          (24u)\r
125 #define PCR1_EC_PWM6_BITPOS          (25u)\r
126 #define PCR1_EC_PWM7_BITPOS          (26u)\r
127 #define PCR1_EC_PWM8_BITPOS          (27u)\r
128 #define PCR1_EC_REG_BITPOS           (29u)\r
129 #define PCR1_EC_BTIMER0_BITPOS       (30u)\r
130 #define PCR1_EC_BTIMER1_BITPOS       (31u)\r
131 \r
132 //PCR2_EC -> SLEEP_ENABLE, CLK REQD STS, RESET_ENABLE Bit Positions\r
133 #define PCR2_EC_LPC_BITPOS                        (0u)\r
134 #define PCR2_EC_UART0_BITPOS                      (1u)\r
135 #define PCR2_EC_UART1_BITPOS                      (2u)\r
136 #define PCR2_EC_GLBL_CFG_BITPOS                   (12u)\r
137 #define PCR2_EC_ACPI_EC0_BITPOS                   (13u)\r
138 #define PCR2_EC_ACPI_EC1_BITPOS                   (14u)\r
139 #define PCR2_EC_ACPI_PM1_BITPOS                   (15u)\r
140 #define PCR2_EC_8042EM_BITPOS                     (16u)\r
141 #define PCR2_EC_MBOX_BITPOS                       (17u)\r
142 #define PCR2_EC_RTC_BITPOS                        (18u)\r
143 #define PCR2_EC_ESPI_BITPOS                       (19u)\r
144 #define PCR2_EC_ACPI_EC_2_BITPOS                  (21u)\r
145 #define PCR2_EC_ACPI_EC_3_BITPOS                  (22u)\r
146 #define PCR2_EC_ACPI_EC_BITPOS              (23u)\r
147 #define PCR2_EC_PORT80_0_BITPOS                   (25u)\r
148 #define PCR2_EC_PORT80_1_BITPOS                   (26u)\r
149 \r
150 //PCR3_EC -> SLEEP_ENABLE, CLK REQD STS, RESET_ENABLE Bit Positions\r
151 #define PCR3_EC_ADC_BITPOS                         (3u)\r
152 #define PCR3_EC_PS2_0_BITPOS                       (5u)\r
153 #define PCR3_EC_PS2_1_BITPOS                       (6u)\r
154 #define PCR3_EC_PS2_2_BITPOS                       (7u)\r
155 #define PCR3_EC_SPI0_BITPOS                        (9u)\r
156 #define PCR3_EC_HTIMER_BITPOS                      (10u)\r
157 #define PCR3_EC_KEYSCAN_BITPOS                     (11u)\r
158 #define PCR3_EC_RPM_PWM_BITPOS                     (12u)\r
159 #define PCR3_EC_SMB1_BITPOS                        (13u)\r
160 #define PCR3_EC_SMB2_BITPOS                        (14u)\r
161 #define PCR3_EC_SMB3_BITPOS                        (15u)\r
162 #define PCR3_EC_LED0_BITPOS                        (16u)\r
163 #define PCR3_EC_LED1_BITPOS                        (17u)\r
164 #define PCR3_EC_LED2_BITPOS                        (18u)\r
165 #define PCR3_EC_BCM_BITPOS                         (19u)\r
166 #define PCR3_EC_SPI1_BITPOS                        (20u)\r
167 #define PCR3_EC_BTIMER2_BITPOS                     (21u)\r
168 #define PCR3_EC_BTIMER3_BITPOS                     (22u)\r
169 #define PCR3_EC_BTIMER4_BITPOS                     (23u)\r
170 #define PCR3_EC_BTIMER5_BITPOS                     (24u)\r
171 #define PCR3_EC_LED3_BITPOS                        (25u)\r
172 #define PCR3_EC_PKE_BITPOS                   (26u)\r
173 #define PCR3_EC_RNG_BITPOS                   (27u)\r
174 #define PCR3_EC_AES_BITPOS                   (28u)\r
175 #define PCR3_EC_HTIMER_1_BITPOS                    (29u)\r
176 #define PCR3_EC_C_C_TIMER_BITPOS                   (30u)\r
177 #define PCR3_EC_PWM9_BITPOS            (31u)\r
178 \r
179 \r
180 //PCR4_EC -> SLEEP_ENABLE, CLK REQD STS, RESET_ENABLE Bit Positions\r
181 #define PCR4_EC_PWM10_BITPOS                     (0u)\r
182 #define PCR4_EC_PWM11_BITPOS                     (1u)\r
183 #define PCR4_EC_CTIMER0_BITPOS                     (2u)\r
184 #define PCR4_EC_CTIMER1_BITPOS                     (3u)\r
185 #define PCR4_EC_CTIMER2_BITPOS                     (4u)\r
186 #define PCR4_EC_CTIMER3_BITPOS                     (5u)\r
187 #define PCR4_EC_RTOS_TIMER_BITPOS                (6u)\r
188 #define PCR4_EC_RPM2_PWM_BITPOS                    (7u)\r
189 #define PCR4_EC_QMSPI_BITPOS                 (8u)\r
190 #define PCR4_EC_BCM_1_BITPOS                       (9u)\r
191 #define PCR4_EC_RC_ID0_BITPOS                (10u)\r
192 #define PCR4_EC_RC_ID1_BITPOS                (11u)\r
193 #define PCR4_EC_RC_ID2_BITPOS                (12u)\r
194 #define PCR4_EC_PROCHOT_BITPOS                     (13u)\r
195 #define PCR4_EC_EEPROM_BITPOS                (14u)\r
196 #define PCR4_EC_CUST_LOG_BITPOS                    (15u)\r
197 \r
198 \r
199 /*\r
200  *  n = b[7:0]   = PCR Reg Bit Position\r
201  *  m = b[31:8]  = PCRx Regs IDs\r
202  */\r
203 //#define PCRx_REGS_BIT(m,n) ((((uint32_t)(m)&0xFFFFFFul)<<8u) + ((uint32_t)(n)&0xFFul)) \r
204 \r
205 //PCRx_REGS_BIT positions                                                                                                       \r
206 #define PCRx_REGS_POS_SLEEP_ENABLE                              (8u)\r
207 #define PCRx_REGS_POS_CLK_REQD_STS                              (16u)\r
208 #define PCRx_REGS_POS_RESET_ENABLE                              (24u)                                                                                                   \r
209 \r
210 \r
211 /******************************************************************************/\r
212 /**  PCR Block IDS. \r
213  * These IDs are used to directly refer to a block \r
214  *******************************************************************************/\r
215 typedef enum {\r
216         PCR_JTAG                        = (((uint32_t)(PCR0_REGS_EC) << 8) + (uint32_t)(PCR0_EC_JTAG_STAP_BITPOS & 0xFFu)),\r
217         PCR_EFUSE                       = (((uint32_t)(PCR0_REGS_EC) << 8) + (uint32_t)(PCR0_EC_EFUSE_BITPOS & 0xFFu)),\r
218   PCR_ISPI                      = (((uint32_t)(PCR0_REGS_EC) << 8) + (uint32_t)(PCR0_EC_ISPI_BITPOS & 0xFFu)),\r
219         \r
220         PCR_INT                         = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_INT_BITPOS & 0xFFu)),   \r
221         PCR_PECI                        = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_PECI_BITPOS & 0xFFu)),  \r
222         PCR_TACH0                       = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_TACH0_BITPOS & 0xFFu)),         \r
223         PCR_PWM0                        = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_PWM0_BITPOS & 0xFFu)),          \r
224         PCR_PMC                         = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_PMC_BITPOS & 0xFFu)),           \r
225         PCR_DMA                         = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_DMA_BITPOS & 0xFFu)),   \r
226         PCR_TFDP                        = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_TFDP_BITPOS & 0xFFu)),          \r
227         PCR_CPU                         = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_CPU_BITPOS & 0xFFu)),           \r
228         PCR_WDT                         = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_WDT_BITPOS & 0xFFu)),           \r
229         PCR_SMB0                        = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_SMB0_BITPOS & 0xFFu)),  \r
230         PCR_TACH1                       = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_TACH1_BITPOS & 0xFFu)),\r
231         PCR_TACH2                       = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_TACH2_BITPOS & 0xFFu)),         \r
232         PCR_PWM1                        = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_PWM1_BITPOS & 0xFFu)),          \r
233         PCR_PWM2                        = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_PWM2_BITPOS & 0xFFu)),          \r
234         PCR_PWM3                        = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_PWM3_BITPOS & 0xFFu)),          \r
235         PCR_PWM4                        = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_PWM4_BITPOS & 0xFFu)),          \r
236         PCR_PWM5                        = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_PWM5_BITPOS & 0xFFu)),          \r
237         PCR_PWM6                        = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_PWM6_BITPOS & 0xFFu)),          \r
238         PCR_PWM7                        = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_PWM7_BITPOS & 0xFFu)),          \r
239         PCR_PWM8                        = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_PWM8_BITPOS & 0xFFu)),          \r
240         PCR_REG                         = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_REG_BITPOS & 0xFFu)),           \r
241         PCR_BTIMER0             = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_BTIMER0_BITPOS & 0xFFu)),       \r
242         PCR_BTIMER1             = (((uint32_t)(PCR1_REGS_EC) << 8) + (uint32_t)(PCR1_EC_BTIMER1_BITPOS & 0xFFu)),       \r
243         \r
244         PCR_LPC                         = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_LPC_BITPOS & 0xFFu)),\r
245         PCR_UART0                       = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_UART0_BITPOS & 0xFFu)),\r
246         PCR_UART1                       = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_UART1_BITPOS & 0xFFu)),\r
247         PCR_GLBL_CFG    = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_GLBL_CFG_BITPOS & 0xFFu)),\r
248         PCR_ACPI_EC0    = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_ACPI_EC0_BITPOS & 0xFFu)),\r
249         PCR_ACPI_EC1    = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_ACPI_EC1_BITPOS & 0xFFu)),\r
250         PCR_ACPI_PM1    = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_ACPI_PM1_BITPOS & 0xFFu)),\r
251         PCR_8042EM              = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_8042EM_BITPOS & 0xFFu)),\r
252         PCR_MBOX                = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_MBOX_BITPOS & 0xFFu)),\r
253         PCR_RTC                         = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_RTC_BITPOS & 0xFFu)),\r
254         PCR_ESPI                        = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_ESPI_BITPOS & 0xFFu)),\r
255         PCR_ACPI_EC2    = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_ACPI_EC_2_BITPOS & 0xFFu)),\r
256         PCR_ACPI_EC3    = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_ACPI_EC_3_BITPOS & 0xFFu)),\r
257         PCR_ACPI_EC       = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_ACPI_EC_BITPOS & 0xFFu)),\r
258         PCR_PORT80_0  = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_PORT80_0_BITPOS & 0xFFu)),\r
259         PCR_PORT80_1  = (((uint32_t)(PCR2_REGS_EC) << 8) + (uint32_t)(PCR2_EC_PORT80_1_BITPOS & 0xFFu)),\r
260                 \r
261         PCR_ADC                         = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_ADC_BITPOS & 0xFFu)),\r
262         PCR_PS2_0                       = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_PS2_0_BITPOS & 0xFFu)),         \r
263         PCR_PS2_1                       = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_PS2_1_BITPOS & 0xFFu)),         \r
264         PCR_PS2_2                       = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_PS2_2_BITPOS & 0xFFu)),                 \r
265         PCR_SPI0                        = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_SPI0_BITPOS & 0xFFu)),          \r
266         PCR_HTIMER              = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_HTIMER_BITPOS & 0xFFu)),        \r
267         PCR_KEYSCAN             = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_KEYSCAN_BITPOS & 0xFFu)),       \r
268         PCR_RPM_PWM             = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_RPM_PWM_BITPOS & 0xFFu)),       \r
269         PCR_SMB1                        = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_SMB1_BITPOS & 0xFFu)),          \r
270         PCR_SMB2                        = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_SMB2_BITPOS & 0xFFu)),          \r
271         PCR_SMB3                        = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_SMB3_BITPOS & 0xFFu)),          \r
272         PCR_LED0                        = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_LED0_BITPOS & 0xFFu)),          \r
273         PCR_LED1                        = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_LED1_BITPOS & 0xFFu)),          \r
274         PCR_LED2                        = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_LED2_BITPOS & 0xFFu)),          \r
275         PCR_BCM                         = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_BCM_BITPOS & 0xFFu)),   \r
276         PCR_SPI1                        = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_SPI1_BITPOS & 0xFFu)),          \r
277         PCR_BTIMER2             = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_BTIMER2_BITPOS & 0xFFu)),       \r
278         PCR_BTIMER3             = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_BTIMER3_BITPOS & 0xFFu)),       \r
279         PCR_BTIMER4             = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_BTIMER4_BITPOS & 0xFFu)),       \r
280         PCR_BTIMER5             = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_BTIMER5_BITPOS & 0xFFu)),       \r
281         PCR_LED3                        = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_LED3_BITPOS & 0xFFu)),  \r
282         PCR_PKE                         = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_PKE_BITPOS & 0xFFu)),   \r
283         PCR_RNG                         = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_RNG_BITPOS & 0xFFu)),   \r
284         PCR_AES                         = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_AES_BITPOS & 0xFFu)),   \r
285         PCR_HTIMER_1    = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_HTIMER_1_BITPOS & 0xFFu)),              \r
286         PCR_C_C_TIMER   = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_C_C_TIMER_BITPOS & 0xFFu)),             \r
287         PCR_PWM9                = (((uint32_t)(PCR3_REGS_EC) << 8) + (uint32_t)(PCR3_EC_PWM9_BITPOS & 0xFFu)),\r
288         \r
289   PCR_PWM10             = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_PWM10_BITPOS & 0xFFu)),                 \r
290         PCR_PWM11               = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_PWM11_BITPOS & 0xFFu)),                 \r
291         PCR_CTIMER0     = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_CTIMER0_BITPOS & 0xFFu)),               \r
292         PCR_CTIMER1     = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_CTIMER1_BITPOS & 0xFFu)), \r
293         PCR_CTIMER2     = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_CTIMER2_BITPOS & 0xFFu)), \r
294         PCR_CTIMER3     = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_CTIMER3_BITPOS & 0xFFu)), \r
295         PCR_RTOS_TIMER = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_RTOS_TIMER_BITPOS & 0xFFu)), \r
296         PCR_RPM2_PWM    = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_RPM2_PWM_BITPOS & 0xFFu)),              \r
297         PCR_QMSPI           = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_QMSPI_BITPOS & 0xFFu)),             \r
298         PCR_BCM1        = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_BCM_1_BITPOS & 0xFFu)),         \r
299         PCR_RCID0       = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_RC_ID0_BITPOS & 0xFFu)),        \r
300         PCR_RCID1       = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_RC_ID1_BITPOS & 0xFFu)),        \r
301         PCR_RCID2       = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_RC_ID2_BITPOS & 0xFFu)),        \r
302         PCR_PROCHOT     = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_PROCHOT_BITPOS & 0xFFu)),       \r
303         PCR_EEPROM      = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_EEPROM_BITPOS & 0xFFu)),        \r
304         PCR_CUST_LOG    = (((uint32_t)(PCR4_REGS_EC) << 8) + (uint32_t)(PCR4_EC_CUST_LOG_BITPOS & 0xFFu)),              \r
305 } PCR_BLK_ID;\r
306 \r
307 \r
308 /******************************************************************************/\r
309 /**  PCR Processor ClK Divide Values \r
310  *******************************************************************************/\r
311 enum PROCESSOR_CLK_DIVIDE_VALUE\r
312 {\r
313         PCR_CPU_CLK_DIVIDE_1 = 1,\r
314         PCR_CPU_CLK_DIVIDE_2 = 2,\r
315         PCR_CPU_CLK_DIVIDE_3 = 3,\r
316         PCR_CPU_CLK_DIVIDE_4 = 4,\r
317         PCR_CPU_CLK_DIVIDE_16 = 16,\r
318         PCR_CPU_CLK_DIVIDE_48 = 48      \r
319 };\r
320 \r
321 /******************************************************************************/\r
322 /**  System Sleep Modes \r
323  *******************************************************************************/\r
324 enum SYSTEM_SLEEP_MODES\r
325 {\r
326         SYSTEM_LIGHT_SLEEP = 0, \r
327         SYSTEM_HEAVY_SLEEP = 1,\r
328         SYSTEM_SLEEP_ALL = 4\r
329 };\r
330 \r
331 /* Bitmask for Power Reset Status Register */\r
332 #define PCR_PWR_RESET_STS_VCC_PWRGD_RESET_STS_BITMASK   (1UL<<2)\r
333 #define PCR_PWR_RESET_STS_HOST_RESET_STS_BITMASK                        (1UL<<3)\r
334 #define PCR_PWR_RESET_STS_VBAT_RESET_STS_BITMASK                        (1UL<<5)\r
335 #define PCR_PWR_RESET_STS_VTR_RESET_STS_BITMASK                   (1UL<<6)\r
336 #define PCR_PWR_RESET_STS_JTAG_RESET_STS_BITMASK                  (1UL<<7)\r
337 #define PCR_PWR_RESET_STS_32K_ACTIVE_STS_BITMASK                        (1UL<<10)\r
338 #define PCR_PWR_RESET_STS_PCICLK_ACTIVE_STS_BITMASK             (1UL<<11)\r
339 #define PCR_PWR_RESET_STS_ESPICLK_ACTIVE_STS_BITMASK            (1UL<<12)\r
340 \r
341 /* Bitmask for Processor Clock Control Register */\r
342 #define PCR_OSCILLATOR_LOCK_STATUS_BITMASK                                      (1UL<<8)\r
343 \r
344 /* Bitmask for Power Reset Control Register */\r
345 #define PCR_PWR_RESET_CTRL_PWR_INV_BITMASK               (1UL<<0)\r
346 #define PCR_PWR_RESET_CTRL_HOST_RST_SELECT_BITMASK       (1UL<<8)\r
347 \r
348 /* Bitmask for OScillator ID register */\r
349 #define PCR_OSCILLATOR_ID_FOUNDARY_BITMASK          (3UL<<5)\r
350 #define PCR_OSCILLATOR_ID_REVISION_BITMASK          (0xFUL)\r
351 \r
352 #define PCR_OSCILLATOR_ID_FOUNDARY_CHART_TSMC        (0UL)\r
353 #define PCR_OSCILLATOR_ID_FOUNDARY_TSMC              (0x10u)\r
354 #define PCR_OSCILLATOR_ID_FOUNDARY_CHART             (0x20u)\r
355 #define PCR_OSCILLATOR_ID_FOUNDARY_GRACE             (0x30u)\r
356 \r
357 /* Bitmask for PKE Clock register */\r
358 #define PCR_PKE_CLOCK_REG_PKE_CLK_BITMASK         (1UL<<1)\r
359 #define PCR_PKE_CLOCK_REG_AUTO_SWITCH_BITMASK     (1UL<<0)\r
360 \r
361 #define PCR_PKE_CLOCK_REG_PKE_CLK_48MHZ           (1UL<<1)\r
362 #define PCR_PKE_CLOCK_REG_PKE_CLK_96MHZ           (0UL<<0)\r
363 #define PCR_PKE_CLOCK_REG_AUTO_SWITCH_EN          (1UL<<0)\r
364 #define PCR_PKE_CLOCK_REG_AUTO_SWITCH_DIS         (0UL<<0)\r
365 \r
366 /* ---------------------------------------------------------------------- */\r
367 /*  API - Functions to program Sleep Enable, CLK Reqd Status,             *\r
368  *  Reset Enable for a block                                              *\r
369  * ---------------------------------------------------------------------- */\r
370  /** Sets or Clears block specific bit in PCR Sleep Enable Register\r
371  * @param pcr_block_id - pcr block id encoded using PCRx_REGS_BIT \r
372  * @param set_clr_flag - Flag to set (1) or clear (0) bit in the PCR Sleep Enable Register\r
373  */\r
374 void pcr_sleep_enable(uint32_t pcr_block_id, uint8_t set_clr_flag);\r
375 \r
376 /** Get Clock Required Status for the block\r
377  * @param pcr_block_id - pcr block id encoded using PCRx_REGS_BIT \r
378  * @return uint8_t - 1 if Clock Required Status set, else 0\r
379  */\r
380 uint8_t pcr_clock_reqd_status_get(uint32_t pcr_block_id);\r
381 \r
382 /** Sets or Clears Reset Enable register bit for the block\r
383  * @param pcr_block_id - pcr block id encoded using PCRx_REGS_BIT \r
384  * @param set_clr_flag - Flag to set (1) or clear (0) bit in the PCR Reset Enable Register\r
385  */\r
386 void pcr_reset_enable(uint32_t pcr_block_id, uint8_t set_clr_flag);\r
387 \r
388 /* ---------------------------------------------------------------------- */\r
389 /*  API -   Functions for entering low power modes                        */\r
390 /* ---------------------------------------------------------------------- */\r
391 /** Instructs all blocks to sleep by setting the Sleep Enable bits */\r
392 void pcr_all_blocks_sleep(void);\r
393 \r
394 /** Clears the Sleep Enable bits for all blocks */\r
395 void pcr_all_blocks_wake(void);\r
396 \r
397 /** Programs required sleep mode in System Sleep Control Register\r
398  * @param sleep_mode - see enum SYSTEM_SLEEP_MODES\r
399  */\r
400 void pcr_system_sleep(uint8_t sleep_mode);\r
401 \r
402 /** Reads the value of Power Reset status register\r
403  * @param none\r
404  * @return Power Status Reg value\r
405  */\r
406 uint16_t pcr_power_reset_status_read(void);\r
407 \r
408 /** Reads the value of Power Reset control register\r
409  * @param none\r
410  * @return Power reset control Reg value\r
411  */\r
412 uint16_t pcr_power_reset_ctrl_read(void);\r
413 \r
414 /** Sets the value of PWR_INV bit to 1 or 0\r
415 * @param set_clr: 1 or 0\r
416  * @return none\r
417  */\r
418 void pcr_pwr_reset_ctrl_pwr_inv_set_clr(uint8_t set_clr);\r
419 \r
420 /** Sets the value of HOST_RESET bit to 1 or 0\r
421 * @param set_clr: 1 or 0\r
422  * @return none\r
423  */\r
424 void pcr_pwr_reset_ctrl_host_rst_set_clr(uint8_t set_clr);\r
425 \r
426 /** Sets the SOFT SYS RESET bit to 1\r
427 * @param none\r
428  * @return none\r
429  */\r
430 void pcr_system_reset_set(void);\r
431 \r
432 /** Writes to the PKE Clock register\r
433 * @param clock value\r
434  * @return none\r
435  */\r
436 void pcr_pke_clock_write(uint8_t pke_clk_val);\r
437 \r
438 /** Reads the PKE clock register\r
439 * @param none\r
440  * @return clock value\r
441  */\r
442 uint8_t pcr_pke_clock_read(void);\r
443 \r
444 /** Writes to the OSC cal register\r
445 * @param calibration value: 1 or 0\r
446  * @return none\r
447  */\r
448 void pcr_osc_cal_write(uint8_t pke_clk_val);\r
449 \r
450 /** Reads the osc cal register\r
451 * @param none\r
452  * @return cal value\r
453  */\r
454 uint8_t pcr_osc_cal_read(void);\r
455 \r
456 \r
457 /* ---------------------------------------------------------------------- */\r
458 /* Peripheral Function - Functions to program and read 32-bit values      *\r
459  * from PCR Registers                                                     *\r
460  * ---------------------------------------------------------------------- */\r
461  /** Write 32-bit value in the PCR Register\r
462  * @param pcr_reg_id - pcr register id \r
463  * @param value - 32-bit value\r
464  */\r
465 void p_pcr_reg_write(uint8_t pcr_reg_id, uint32_t value);\r
466 \r
467 /** Reads 32-bit value from the PCR Register\r
468  * @param pcr_reg_id - pcr register id \r
469  * @return value - 32-bit value\r
470  */\r
471 uint32_t p_pcr_reg_read(uint8_t pcr_reg_id);\r
472 \r
473 /* ---------------------------------------------------------------------- */\r
474 /* Peripheral Function - Functions to set, clr and get bits in            *\r
475  * PCR Registers                                                          * \r
476  * ---------------------------------------------------------------------- */\r
477  /** Sets bits in a PCR Register\r
478  * @param pcr_reg_id - pcr register id \r
479  * @param bit_mask - Bit mask of bits to set \r
480  */\r
481 void p_pcr_reg_set(uint8_t pcr_reg_id, uint32_t bit_mask);\r
482 \r
483 /** Clears bits in a PCR Register\r
484  * @param pcr_reg_id - pcr register id \r
485  * @param bit_mask - Bit mask of bits to clear \r
486  */\r
487 void p_pcr_reg_clr(uint8_t pcr_reg_id, uint32_t bit_mask);\r
488 \r
489 /** Read bits in a PCR Register\r
490  * @param pcr_reg_id - pcr register id \r
491  * @param bit_mask - Bit mask of bits to read \r
492  * @return value - 32-bit value\r
493  */\r
494 uint32_t p_pcr_reg_get(uint8_t pcr_reg_id, uint32_t bit_mask);\r
495 \r
496 /** Sets or Clears bits in a PCR Register - Helper Function\r
497  * @param pcr_reg_id - pcr register id \r
498  * @param bit_mask - Bit mask of bits to set or clear\r
499  * @param set_clr_flag - Flag to set (1) or clear (0) bits in the PCR Register\r
500  */\r
501 void p_pcr_reg_update(uint8_t pcr_reg_id, uint32_t bit_mask, uint8_t set_clr_flag);\r
502         \r
503 //Functions to operate on System Sleep Control Register \r
504 \r
505 /* ---------------------------------------------------------------------- */\r
506 /* Peripheral Function - Functions to operate on System Sleep Control     *\r
507  * Register                                                               * \r
508  * ---------------------------------------------------------------------- */\r
509 /** Writes required sleep mode in System Sleep Control Register\r
510  * @param sleep_value - System Sleep control value - [D2, D1, D0]\r
511  */\r
512 void p_pcr_system_sleep_ctrl_write(uint8_t sleep_value);\r
513 \r
514 /** Reads the System Sleep Control PCR Register\r
515  * @return value - byte 0 of the system sleep control PCR register\r
516  */\r
517 uint8_t p_pcr_system_sleep_ctrl_read(void);\r
518 \r
519 /* ---------------------------------------------------------------------- */\r
520 /* Peripheral Function - Function to program to CLK Divide Value          * \r
521  * ---------------------------------------------------------------------- */\r
522  /** Writes the clock divide value in the Processor Clock Control Register\r
523  * @param clk_divide_value - clk divide values, valid values in enum PROCESSOR_CLK_DIVIDE_VALUE\r
524  */\r
525 void p_pcr_processor_clk_ctrl_write(uint8_t clk_divide_value);\r
526 \r
527 /* ---------------------------------------------------------------------- */\r
528 /* Peripheral Function - Function to program the Slow Clock Control       *\r
529  * Register                                                               *\r
530  * ---------------------------------------------------------------------- */\r
531  /** Write the slow clock divide value in the Slow Clock Control Register\r
532  * @param slow_clk_divide_value - slow clk divide value\r
533  */\r
534 void p_pcr_slow_clk_ctrl_write(uint16_t slow_clk_divide_value);\r
535 \r
536 /* ---------------------------------------------------------------------- */\r
537 /* Peripheral Function - Function to read the Oscillator Lock Status      */ \r
538 /* ---------------------------------------------------------------------- */\r
539 /** Reads the Oscillator Lock status bit in the Oscillator ID Register\r
540  * @return 1 if Oscillator Lock Status bit is set, else 0\r
541  */\r
542 uint8_t p_pcr_oscillator_lock_sts_get(void);\r
543 \r
544 /** Reads the Oscillator ID Register\r
545  * @return oscillator ID value\r
546  */\r
547 uint16_t p_pcr_oscillator_id_reg_read(void);\r
548 \r
549 /* ---------------------------------------------------------------------- */\r
550 /* Peripheral Function - Functions to read various power status in        *\r
551  * Power Reset register                                               *\r
552  * ---------------------------------------------------------------------- */\r
553  /** Reads the VCC Reset Status bit \r
554  *        in the Power Reset Status Register\r
555  * @return 1 if VCC Reset Status bit is set, else 0\r
556  */\r
557 uint8_t p_pcr_pwr_reset_vcc_reset_sts_get(void);\r
558 \r
559 /** Reads the Host Reset Status bit \r
560  *        in the Power Reset Status Register\r
561  * @return 1 if Host Reset Status bit is set, else 0\r
562  */\r
563 uint8_t p_pcr_pwr_reset_host_reset_sts_get(void);\r
564 \r
565 /** Reads the VBAT Reset Status bit \r
566  *        in the Power Reset Status Register\r
567  * @return 1 if VBAT Reset Status bit is set, else 0\r
568  */\r
569 uint8_t p_pcr_pwr_reset_vbat_reset_sts_get(void);\r
570 \r
571 /** Clears the VBAT Reset Status bit \r
572  *        in the Power Reset Status Register \r
573  */\r
574 void p_pcr_pwr_reset_vbat_reset_sts_clr(void);\r
575 \r
576 /** Reads the VTR Reset Status bit \r
577  *        in the Power Reset Status Register\r
578  * @return 1 if VCC1 Reset Status bit is set, else 0\r
579  */\r
580 uint8_t p_pcr_pwr_reset_vtr_reset_sts_get(void);\r
581 \r
582 /** Clears the VTR Reset Status bit \r
583  *        in the Power Reset Status Register \r
584  */\r
585 void p_pcr_chip_subsystem_vtr_reset_sts_clr(void);\r
586 \r
587 /** Reads the 32K_ACTIVE status bit \r
588  *        in the Chip Subsystem Power Reset Status Register\r
589  * @return 1 if 32_ACTIVE bit is set, else 0\r
590  */\r
591 uint8_t p_pcr_pwr_reset_32K_active_sts_get(void);\r
592 \r
593 /** Reads the PCICLK_ACTIVE status bit \r
594  *        in the Power Reset Status Register\r
595  * @return 1 if CICLK_ACTIVE bit is set, else 0\r
596  */\r
597 uint8_t p_pcr_pwr_reset_pciclk_active_sts_get(void);\r
598 \r
599 /** Reads the ESPICLK_ACTIVE status bit \r
600  *        in the Power Reset Status Register\r
601  * @return 1 if ESPICLK_ACTIVE bit is set, else 0\r
602  */\r
603 uint8_t p_pcr_pwr_reset_espiclk_active_sts_get(void);\r
604 \r
605 /** Reads the Power status reg\r
606  * @return Power Status Reg value\r
607  */\r
608 uint16_t p_pcr_pwr_reset_sts_get(void);\r
609 \r
610 /* ---------------------------------------------------------------------- */\r
611 /* Peripheral Function - Functions for Power Reset Control Register       */ \r
612 /* ---------------------------------------------------------------------- */\r
613 \r
614 /** Reads the Power Reset Control Register\r
615  * @return Power Reset Control Register value\r
616  */\r
617 uint16_t p_pcr_pwr_reset_ctrl_read(void);\r
618 \r
619 /** Set the PWR_INV bit in the Power Reset Control Register\r
620  * @param set_clr value 1 or 0\r
621  * @return none\r
622  */\r
623 void p_pcr_pwr_reset_ctrl_pwr_inv_set_clr(uint8_t set_clr);\r
624 \r
625 /** Set the HOST RESET SELECT bit in the Power Reset Control Register\r
626  * @param set_clr value 1 or 0\r
627  * @return none\r
628  */\r
629 void p_pcr_pwr_reset_ctrl_host_rst_set_clr(uint8_t set_clr);\r
630 \r
631 /* ---------------------------------------------------------------------- */\r
632 /* Peripheral Function - Functions for System Reset Register       */ \r
633 /* ---------------------------------------------------------------------- */\r
634 /** Set the SOFT_SYS_RESET bit in the System Reset Register\r
635  * @param none\r
636  * @return none\r
637  */\r
638 void p_pcr_system_reset_set(void);\r
639 \r
640 \r
641 /** Set the value in PKE CLOCK Register\r
642  * @param PKE Clock value \r
643  * @return none\r
644  */\r
645 void p_pcr_pke_clock_write(uint8_t pke_clk_val);\r
646 \r
647 /** Read the value in PKE CLOCK Register\r
648  * @none \r
649  * @return PKE Clock value \r
650  */\r
651 uint8_t p_pcr_pke_clock_read(void);\r
652 \r
653 /** Set the value in Oscillator calibration Register\r
654  * @param Oscillator calibration value \r
655  * @return none\r
656  */\r
657 void p_pcr_osc_cal_write(uint8_t osc_cal_val);\r
658 \r
659 /** Read the value in Osc cal Register\r
660  * @none \r
661  * @return Osc cal value \r
662  */\r
663 uint8_t p_pcr_osc_cal_read(void);\r
664 \r
665 #endif // #ifndef _PCR_H\r
666 /* end pcr.h */\r
667 /**   @}\r
668  */\r
669 \r
670 \r
671 \r