]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_CEC_MEC_17xx_Keil_GCC/peripheral_library/pcr/pcr_api.c
Added traceQUEUE_CREATE_FAILED() trace macros into the queue create functions.
[freertos] / FreeRTOS / Demo / CORTEX_MPU_CEC_MEC_17xx_Keil_GCC / peripheral_library / pcr / pcr_api.c
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_api.c\r
29 * \brief Power, Clocks, and Resets API Source file\r
30 * \author jvasanth\r
31\r
32 * This file implements the PCR APIs  \r
33 ******************************************************************************/\r
34 \r
35 /** @defgroup PCR\r
36  *  @{\r
37  */\r
38 \r
39 #include "common_lib.h"\r
40 #include "pcr.h"\r
41 \r
42 \r
43 /* ------------------------------------------------------------------------------- */\r
44 /*  Functions to program Sleep Enable, CLK Reqd Status, Reset Enable for a block   */\r
45 /* ------------------------------------------------------------------------------- */\r
46 \r
47 /** Sets or Clears block specific bit in PCR Sleep Enable Register\r
48  * @param pcr_block_id - pcr block id encoded using PCRx_REGS_BIT \r
49  * @param set_clr_flag - Flag to set (1) or clear (0) bit in the PCR Sleep Enable Register\r
50  */\r
51 void pcr_sleep_enable(uint32_t pcr_block_id, uint8_t set_clr_flag)\r
52 {\r
53     uint32_t bit_mask;\r
54     uint8_t pcr_reg_id; \r
55  \r
56     bit_mask = 1UL<<(pcr_block_id & 0xFFu);\r
57     pcr_reg_id = (uint8_t)((pcr_block_id >> PCRx_REGS_POS_SLEEP_ENABLE) & 0xFFu);\r
58 \r
59     p_pcr_reg_update(pcr_reg_id, bit_mask, set_clr_flag);       \r
60 }\r
61 \r
62 \r
63 /** Get Clock Required Status for the block\r
64  * @param pcr_block_id - pcr block id encoded using PCRx_REGS_BIT \r
65  * @return uint8_t - 1 if Clock Required Status set, else 0\r
66  */\r
67 uint8_t pcr_clock_reqd_status_get(uint32_t pcr_block_id)\r
68 {\r
69     uint32_t bit_mask;\r
70     uint8_t pcr_reg_id, retVal; \r
71  \r
72     bit_mask = 1UL<<(pcr_block_id & 0xFFu);\r
73     pcr_reg_id = (uint8_t)((pcr_block_id >> PCRx_REGS_POS_CLK_REQD_STS) & 0xFFu);\r
74 \r
75     retVal = 0;\r
76     if (p_pcr_reg_get(pcr_reg_id, bit_mask))\r
77     {\r
78         retVal = 1;\r
79     }\r
80     \r
81     return retVal;\r
82 }\r
83 \r
84 /** Sets or Clears Reset Enable register bit for the block\r
85  * @param pcr_block_id - pcr block id encoded using PCRx_REGS_BIT \r
86  * @param set_clr_flag - Flag to set (1) or clear (0) bit in the PCR Reset Enable Register\r
87  */\r
88 void pcr_reset_enable(uint32_t pcr_block_id, uint8_t set_clr_flag)\r
89 {\r
90     uint32_t bit_mask;\r
91     uint8_t pcr_reg_id; \r
92  \r
93     bit_mask = 1UL<<(pcr_block_id & 0xFFu);\r
94     pcr_reg_id = (uint8_t)((pcr_block_id >> PCRx_REGS_POS_RESET_ENABLE) & 0xFFu);\r
95 \r
96     p_pcr_reg_update(pcr_reg_id, bit_mask, set_clr_flag);                                       \r
97 }\r
98 \r
99 \r
100 /* ------------------------------------------------------------------------------- */\r
101 /*                  Functions for entering low power modes                         */\r
102 /* ------------------------------------------------------------------------------- */\r
103 \r
104 /** Instructs all blocks to sleep by setting the Sleep Enable bits */\r
105 void pcr_all_blocks_sleep(void)\r
106 {\r
107         p_pcr_reg_write(PCR_REG_EC_SLEEP_ENABLE_0, 0xFFFFFFFF);\r
108         p_pcr_reg_write(PCR_REG_EC_SLEEP_ENABLE_1, 0xFFFFFFFF);\r
109         p_pcr_reg_write(PCR_REG_EC_SLEEP_ENABLE_2, 0xFFFFFFFF);\r
110         p_pcr_reg_write(PCR_REG_EC_SLEEP_ENABLE_3, 0xFFFFFFFF);         \r
111         p_pcr_reg_write(PCR_REG_EC_SLEEP_ENABLE_4, 0xFFFFFFFF);         \r
112 }\r
113 \r
114 /** Clears the Sleep Enable bits for all blocks */\r
115  void pcr_all_blocks_wake(void)\r
116 {\r
117         p_pcr_reg_write(PCR_REG_EC_SLEEP_ENABLE_0, 0);\r
118         p_pcr_reg_write(PCR_REG_EC_SLEEP_ENABLE_1, 0);\r
119         p_pcr_reg_write(PCR_REG_EC_SLEEP_ENABLE_2, 0);\r
120         p_pcr_reg_write(PCR_REG_EC_SLEEP_ENABLE_3, 0);          \r
121         p_pcr_reg_write(PCR_REG_EC_SLEEP_ENABLE_4, 0);          \r
122 }\r
123 \r
124 /** Programs required sleep mode in System Sleep Control Register\r
125  * @param sleep_mode - see enum SYSTEM_SLEEP_MODES\r
126  */\r
127 void pcr_system_sleep(uint8_t sleep_mode)\r
128 {\r
129     p_pcr_system_sleep_ctrl_write(sleep_mode);\r
130 }\r
131 \r
132 /** Reads the value of Power Reset status register\r
133  * @param none\r
134  * @return Power Reset Status Reg value\r
135  */\r
136 uint16_t pcr_power_reset_status_read(void)\r
137 {\r
138         return (p_pcr_pwr_reset_sts_get());\r
139 }\r
140 \r
141 /** Reads the value of Power Reset control register\r
142  * @param none\r
143  * @return Power reset control Reg value\r
144  */\r
145 uint16_t pcr_power_reset_ctrl_read(void)\r
146 {\r
147         return (p_pcr_pwr_reset_ctrl_read());\r
148 }\r
149 \r
150 /** Sets the value of PWR_INV bit to 1 or 0\r
151 * @param set_clr: 1 or 0\r
152  * @return none\r
153  */\r
154 void pcr_pwr_reset_ctrl_pwr_inv_set_clr(uint8_t set_clr)\r
155 {\r
156         p_pcr_pwr_reset_ctrl_pwr_inv_set_clr(set_clr);\r
157 }\r
158 \r
159 /** Sets the value of HOST_RESET bit to 1 or 0\r
160 * @param set_clr: 1 or 0\r
161  * @return none\r
162  */\r
163 void pcr_pwr_reset_ctrl_host_rst_set_clr(uint8_t set_clr)\r
164 {\r
165         p_pcr_pwr_reset_ctrl_host_rst_set_clr(set_clr);\r
166 }\r
167 \r
168 /** Sets the SOFT SYS RESET bit to 1\r
169 * @param none\r
170  * @return none\r
171  */\r
172 void pcr_system_reset_set()\r
173 {\r
174         p_pcr_system_reset_set();\r
175 }\r
176 \r
177 /** Writes to the PKE Clock register\r
178 * @param clock value\r
179  * @return none\r
180  */\r
181 void pcr_pke_clock_write(uint8_t pke_clk_val)\r
182 {\r
183         p_pcr_pke_clock_write(pke_clk_val);\r
184 }\r
185 \r
186 /** Reads the PKE clock register\r
187 * @param none\r
188  * @return clock value\r
189  */\r
190 uint8_t pcr_pke_clock_read()\r
191 {\r
192         return (p_pcr_pke_clock_read());\r
193 }\r
194 \r
195 /** Writes to the OSC cal register\r
196 * @param calibration value: 1 or 0\r
197  * @return none\r
198  */\r
199 void pcr_osc_cal_write(uint8_t pke_clk_val)\r
200 {\r
201         p_pcr_osc_cal_write(pke_clk_val);\r
202 }\r
203 \r
204 /** Reads the osc cal register\r
205 * @param none\r
206  * @return cal value\r
207  */\r
208 uint8_t pcr_osc_cal_read()\r
209 {\r
210         return (p_pcr_osc_cal_read());\r
211 }\r
212 \r
213 \r
214 /* end pcr_api.c */\r
215 /**   @}\r
216  */\r