2 * -------------------------------------------
3 * CC3220 SDK - v0.10.00.00
4 * -------------------------------------------
6 * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
12 * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
15 * Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the
20 * Neither the name of Texas Instruments Incorporated nor the names of
21 * its contributors may be used to endorse or promote products derived
22 * from this software without specific prior written permission.
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //*****************************************************************************
41 // Prototypes for the PRCM control driver.
43 //*****************************************************************************
48 //*****************************************************************************
50 // If building with a C++ compiler, make all of the definitions in this header
53 //*****************************************************************************
59 //*****************************************************************************
61 // Peripheral clock and reset control registers
63 //*****************************************************************************
64 typedef struct _PRCM_PeripheralRegs_
67 unsigned long ulClkReg;
68 unsigned long ulRstReg;
72 //*****************************************************************************
73 // Values that can be passed to PRCMPeripheralEnable() and
74 // PRCMPeripheralDisable()
75 //*****************************************************************************
76 #define PRCM_RUN_MODE_CLK 0x00000001
77 #define PRCM_SLP_MODE_CLK 0x00000100
79 //*****************************************************************************
80 // Values that can be passed to PRCMSRAMRetentionEnable() and
81 // PRCMSRAMRetentionDisable() as ulSramColSel.
82 //*****************************************************************************
83 #define PRCM_SRAM_COL_1 0x00000001
84 #define PRCM_SRAM_COL_2 0x00000002
85 #define PRCM_SRAM_COL_3 0x00000004
86 #define PRCM_SRAM_COL_4 0x00000008
88 //*****************************************************************************
89 // Values that can be passed to PRCMSRAMRetentionEnable() and
90 // PRCMSRAMRetentionDisable() as ulModeFlags.
91 //*****************************************************************************
92 #define PRCM_SRAM_LPDS_RET 0x00000002
94 //*****************************************************************************
95 // Values that can be passed to PRCMLPDSWakeupSourceEnable(),
96 // PRCMLPDSWakeupCauseGet() and PRCMLPDSWakeupSourceDisable().
97 //*****************************************************************************
98 #define PRCM_LPDS_HOST_IRQ 0x00000080
99 #define PRCM_LPDS_GPIO 0x00000010
100 #define PRCM_LPDS_TIMER 0x00000001
102 //*****************************************************************************
103 // Values that can be passed to PRCMLPDSWakeUpGPIOSelect() as Type
104 //*****************************************************************************
105 #define PRCM_LPDS_LOW_LEVEL 0x00000002
106 #define PRCM_LPDS_HIGH_LEVEL 0x00000000
107 #define PRCM_LPDS_FALL_EDGE 0x00000001
108 #define PRCM_LPDS_RISE_EDGE 0x00000003
110 //*****************************************************************************
111 // Values that can be passed to PRCMLPDSWakeUpGPIOSelect()
112 //*****************************************************************************
113 #define PRCM_LPDS_GPIO2 0x00000000
114 #define PRCM_LPDS_GPIO4 0x00000001
115 #define PRCM_LPDS_GPIO13 0x00000002
116 #define PRCM_LPDS_GPIO17 0x00000003
117 #define PRCM_LPDS_GPIO11 0x00000004
118 #define PRCM_LPDS_GPIO24 0x00000005
119 #define PRCM_LPDS_GPIO26 0x00000006
121 //*****************************************************************************
122 // Values that can be passed to PRCMHibernateWakeupSourceEnable(),
123 // PRCMHibernateWakeupSourceDisable().
124 //*****************************************************************************
125 #define PRCM_HIB_SLOW_CLK_CTR 0x00000001
127 //*****************************************************************************
128 // Values that can be passed to PRCMHibernateWakeUpGPIOSelect() as ulType
129 //*****************************************************************************
130 #define PRCM_HIB_LOW_LEVEL 0x00000000
131 #define PRCM_HIB_HIGH_LEVEL 0x00000001
132 #define PRCM_HIB_FALL_EDGE 0x00000002
133 #define PRCM_HIB_RISE_EDGE 0x00000003
135 //*****************************************************************************
136 // Values that can be passed to PRCMHibernateWakeupSourceEnable(),
137 // PRCMHibernateWakeupSourceDisable(), PRCMHibernateWakeUpGPIOSelect()
138 //*****************************************************************************
139 #define PRCM_HIB_GPIO2 0x00010000
140 #define PRCM_HIB_GPIO4 0x00020000
141 #define PRCM_HIB_GPIO13 0x00040000
142 #define PRCM_HIB_GPIO17 0x00080000
143 #define PRCM_HIB_GPIO11 0x00100000
144 #define PRCM_HIB_GPIO24 0x00200000
145 #define PRCM_HIB_GPIO26 0x00400000
147 //*****************************************************************************
148 // Values that will be returned from PRCMSysResetCauseGet().
149 //*****************************************************************************
150 #define PRCM_POWER_ON 0x00000000
151 #define PRCM_LPDS_EXIT 0x00000001
152 #define PRCM_CORE_RESET 0x00000003
153 #define PRCM_MCU_RESET 0x00000004
154 #define PRCM_WDT_RESET 0x00000005
155 #define PRCM_SOC_RESET 0x00000006
156 #define PRCM_HIB_EXIT 0x00000007
158 //*****************************************************************************
159 // Values that can be passed to PRCMHibernateWakeupCauseGet().
160 //*****************************************************************************
161 #define PRCM_HIB_WAKEUP_CAUSE_SLOW_CLOCK 0x00000002
162 #define PRCM_HIB_WAKEUP_CAUSE_GPIO 0x00000004
164 //*****************************************************************************
165 // Values that can be passed to PRCMSEnableInterrupt
166 //*****************************************************************************
167 #define PRCM_INT_SLOW_CLK_CTR 0x00004000
169 //*****************************************************************************
170 // Values that can be passed to PRCMPeripheralClkEnable(),
171 // PRCMPeripheralClkDisable(), PRCMPeripheralReset()
172 //*****************************************************************************
173 #define PRCM_CAMERA 0x00000000
174 #define PRCM_I2S 0x00000001
175 #define PRCM_SDHOST 0x00000002
176 #define PRCM_GSPI 0x00000003
177 #define PRCM_LSPI 0x00000004
178 #define PRCM_UDMA 0x00000005
179 #define PRCM_GPIOA0 0x00000006
180 #define PRCM_GPIOA1 0x00000007
181 #define PRCM_GPIOA2 0x00000008
182 #define PRCM_GPIOA3 0x00000009
183 #define PRCM_GPIOA4 0x0000000A
184 #define PRCM_WDT 0x0000000B
185 #define PRCM_UARTA0 0x0000000C
186 #define PRCM_UARTA1 0x0000000D
187 #define PRCM_TIMERA0 0x0000000E
188 #define PRCM_TIMERA1 0x0000000F
189 #define PRCM_TIMERA2 0x00000010
190 #define PRCM_TIMERA3 0x00000011
191 #define PRCM_DTHE 0x00000012
192 #define PRCM_SSPI 0x00000013
193 #define PRCM_I2CA0 0x00000014
194 // Note : PRCM_ADC is a dummy define for pinmux utility code generation
195 // PRCM_ADC should never be used in any user code.
196 #define PRCM_ADC 0x000000FF
199 //*****************************************************************************
200 // Values that can be passed to PRCMIORetEnable() and PRCMIORetDisable()
201 //*****************************************************************************
202 #define PRCM_IO_RET_GRP_0 0x00000001
203 #define PRCM_IO_RET_GRP_1 0x00000002
204 #define PRCM_IO_RET_GRP_2 0x00000004
205 #define PRCM_IO_RET_GRP_3 0x00000008
207 //*****************************************************************************
208 // Macros definig the device type
209 //*****************************************************************************
210 #define PRCM_DEV_TYPE_FLAG_R 0x00000001
211 #define PRCM_DEV_TYPE_FLAG_F 0x00000002
212 #define PRCM_DEV_TYPE_FLAG_Z 0x00000004
213 #define PRCM_DEV_TYPE_FLAG_SECURE 0x00000008
214 #define PRCM_DEV_TYPE_FLAG_PRE_PROD 0x00000010
215 #define PRCM_DEV_TYPE_FLAG_3200 0x00000020
216 #define PRCM_DEV_TYPE_FLAG_3220 0x00000040
217 #define PRCM_DEV_TYPE_FLAG_REV1 0x00010000
218 #define PRCM_DEV_TYPE_FLAG_REV2 0x00020000
220 //*****************************************************************************
221 // Pre-defined helper macros
222 //*****************************************************************************
223 #define PRCM_DEV_TYPE_PRE_CC3200R (PRCM_DEV_TYPE_FLAG_PRE_PROD| \
224 PRCM_DEV_TYPE_FLAG_3200| \
225 PRCM_DEV_TYPE_FLAG_R)
227 #define PRCM_DEV_TYPE_PRE_CC3200F (PRCM_DEV_TYPE_FLAG_PRE_PROD| \
228 PRCM_DEV_TYPE_FLAG_3200| \
229 PRCM_DEV_TYPE_FLAG_F)
231 #define PRCM_DEV_TYPE_PRE_CC3200Z (PRCM_DEV_TYPE_FLAG_PRE_PROD| \
232 PRCM_DEV_TYPE_FLAG_3200| \
233 PRCM_DEV_TYPE_FLAG_Z)
235 #define PRCM_DEV_TYPE_CC3200R (PRCM_DEV_TYPE_FLAG_PRE_PROD| \
236 PRCM_DEV_TYPE_FLAG_3200| \
237 PRCM_DEV_TYPE_FLAG_R)
239 #define PRCM_DEV_TYPE_PRE_CC3220R (PRCM_DEV_TYPE_FLAG_PRE_PROD| \
240 PRCM_DEV_TYPE_FLAG_3220| \
241 PRCM_DEV_TYPE_FLAG_R)
243 #define PRCM_DEV_TYPE_PRE_CC3220F (PRCM_DEV_TYPE_FLAG_PRE_PROD| \
244 PRCM_DEV_TYPE_FLAG_3220| \
245 PRCM_DEV_TYPE_FLAG_F)
247 #define PRCM_DEV_TYPE_PRE_CC3220Z (PRCM_DEV_TYPE_FLAG_PRE_PROD| \
248 PRCM_DEV_TYPE_FLAG_3220| \
249 PRCM_DEV_TYPE_FLAG_Z)
251 #define PRCM_DEV_TYPE_CC3220R (PRCM_DEV_TYPE_FLAG_3220| \
252 PRCM_DEV_TYPE_FLAG_R)
255 #define PRCM_DEV_TYPE_PRE_CC3220RS (PRCM_DEV_TYPE_FLAG_PRE_PROD| \
256 PRCM_DEV_TYPE_FLAG_3220| \
257 PRCM_DEV_TYPE_FLAG_R| \
258 PRCM_DEV_TYPE_FLAG_SECURE)
260 #define PRCM_DEV_TYPE_PRE_CC3220FS (PRCM_DEV_TYPE_FLAG_PRE_PROD| \
261 PRCM_DEV_TYPE_FLAG_3220| \
262 PRCM_DEV_TYPE_FLAG_F| \
263 PRCM_DEV_TYPE_FLAG_SECURE)
265 #define PRCM_DEV_TYPE_PRE_CC3220ZS (PRCM_DEV_TYPE_FLAG_PRE_PROD| \
266 PRCM_DEV_TYPE_FLAG_3220| \
267 PRCM_DEV_TYPE_FLAG_Z| \
268 PRCM_DEV_TYPE_FLAG_SECURE)
270 #define PRCM_DEV_TYPE_CC3220RS (PRCM_DEV_TYPE_FLAG_3220| \
271 PRCM_DEV_TYPE_FLAG_R| \
272 PRCM_DEV_TYPE_FLAG_SECURE)
274 #define PRCM_DEV_TYPE_CC3220FS (PRCM_DEV_TYPE_FLAG_3220| \
275 PRCM_DEV_TYPE_FLAG_F| \
276 PRCM_DEV_TYPE_FLAG_SECURE)
279 #define PRCM_DEV_TYPE_PRE_CC3220Z1 (PRCM_DEV_TYPE_FLAG_PRE_PROD| \
280 PRCM_DEV_TYPE_FLAG_3220| \
281 PRCM_DEV_TYPE_FLAG_Z| \
282 PRCM_DEV_TYPE_FLAG_REV1)
284 #define PRCM_DEV_TYPE_PRE_CC3220Z2 (PRCM_DEV_TYPE_FLAG_PRE_PROD| \
285 PRCM_DEV_TYPE_FLAG_3220| \
286 PRCM_DEV_TYPE_FLAG_Z| \
287 PRCM_DEV_TYPE_FLAG_REV2)
289 //*****************************************************************************
291 // API Function prototypes
293 //*****************************************************************************
294 extern void PRCMMCUReset(tBoolean bIncludeSubsystem);
295 extern unsigned long PRCMSysResetCauseGet(void);
297 extern void PRCMPeripheralClkEnable(unsigned long ulPeripheral,
298 unsigned long ulClkFlags);
299 extern void PRCMPeripheralClkDisable(unsigned long ulPeripheral,
300 unsigned long ulClkFlags);
301 extern void PRCMPeripheralReset(unsigned long ulPeripheral);
302 extern tBoolean PRCMPeripheralStatusGet(unsigned long ulPeripheral);
304 extern void PRCMI2SClockFreqSet(unsigned long ulI2CClkFreq);
305 extern unsigned long PRCMPeripheralClockGet(unsigned long ulPeripheral);
307 extern void PRCMSleepEnter(void);
309 extern void PRCMSRAMRetentionEnable(unsigned long ulSramColSel,
310 unsigned long ulFlags);
311 extern void PRCMSRAMRetentionDisable(unsigned long ulSramColSel,
312 unsigned long ulFlags);
313 extern void PRCMLPDSRestoreInfoSet(unsigned long ulRestoreSP,
314 unsigned long ulRestorePC);
315 extern void PRCMLPDSEnter(void);
316 extern void PRCMLPDSIntervalSet(unsigned long ulTicks);
317 extern void PRCMLPDSWakeupSourceEnable(unsigned long ulLpdsWakeupSrc);
318 extern unsigned long PRCMLPDSWakeupCauseGet(void);
319 extern void PRCMLPDSWakeUpGPIOSelect(unsigned long ulGPIOPin,
320 unsigned long ulType);
321 extern void PRCMLPDSWakeupSourceDisable(unsigned long ulLpdsWakeupSrc);
323 extern void PRCMHibernateEnter(void);
324 extern void PRCMHibernateWakeupSourceEnable(unsigned long ulHIBWakupSrc);
325 extern unsigned long PRCMHibernateWakeupCauseGet(void);
326 extern void PRCMHibernateWakeUpGPIOSelect(unsigned long ulMultiGPIOBitMap,
327 unsigned long ulType);
328 extern void PRCMHibernateWakeupSourceDisable(unsigned long ulHIBWakupSrc);
329 extern void PRCMHibernateIntervalSet(unsigned long long ullTicks);
331 extern unsigned long long PRCMSlowClkCtrGet(void);
332 extern unsigned long long PRCMSlowClkCtrFastGet(void);
333 extern void PRCMSlowClkCtrMatchSet(unsigned long long ullTicks);
334 extern unsigned long long PRCMSlowClkCtrMatchGet(void);
336 extern void PRCMOCRRegisterWrite(unsigned char ucIndex,
337 unsigned long ulRegValue);
338 extern unsigned long PRCMOCRRegisterRead(unsigned char ucIndex);
340 extern void PRCMIntRegister(void (*pfnHandler)(void));
341 extern void PRCMIntUnregister(void);
342 extern void PRCMIntEnable(unsigned long ulIntFlags);
343 extern void PRCMIntDisable(unsigned long ulIntFlags);
344 extern unsigned long PRCMIntStatus(void);
345 extern void PRCMRTCInUseSet(void);
346 extern tBoolean PRCMRTCInUseGet(void);
347 extern void PRCMRTCSet(unsigned long ulSecs, unsigned short usMsec);
348 extern void PRCMRTCGet(unsigned long *ulSecs, unsigned short *usMsec);
349 extern void PRCMRTCMatchSet(unsigned long ulSecs, unsigned short usMsec);
350 extern void PRCMRTCMatchGet(unsigned long *ulSecs, unsigned short *usMsec);
351 extern void PRCMCC3200MCUInit(void);
352 extern unsigned long PRCMHIBRegRead(unsigned long ulRegAddr);
353 extern void PRCMHIBRegWrite(unsigned long ulRegAddr, unsigned long ulValue);
354 extern unsigned long PRCMCameraFreqSet(unsigned char ulDivider,
355 unsigned char ulWidth);
356 extern void PRCMIORetentionEnable(unsigned long ulIORetGrpFlags);
357 extern void PRCMIORetentionDisable(unsigned long ulIORetGrpFlags);
358 extern unsigned long PRCMDeviceTypeGet(void);
359 extern void PRCMLPDSEnterKeepDebugIf(void);
360 extern void PRCMHibernateCycleTrigger(void);
363 //*****************************************************************************
365 // Mark the end of the C bindings section for C++ compilers.
367 //*****************************************************************************