prcm.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. //*****************************************************************************
  2. //
  3. // prcm.h
  4. //
  5. // Prototypes for the PRCM control driver.
  6. //
  7. // Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
  8. //
  9. //
  10. // Redistribution and use in source and binary forms, with or without
  11. // modification, are permitted provided that the following conditions
  12. // are met:
  13. //
  14. // Redistributions of source code must retain the above copyright
  15. // notice, this list of conditions and the following disclaimer.
  16. //
  17. // Redistributions in binary form must reproduce the above copyright
  18. // notice, this list of conditions and the following disclaimer in the
  19. // documentation and/or other materials provided with the
  20. // distribution.
  21. //
  22. // Neither the name of Texas Instruments Incorporated nor the names of
  23. // its contributors may be used to endorse or promote products derived
  24. // from this software without specific prior written permission.
  25. //
  26. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  27. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  28. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  29. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  30. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  31. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  32. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  33. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  34. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  35. // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  36. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  37. //
  38. //*****************************************************************************
  39. #ifndef __PRCM_H__
  40. #define __PRCM_H__
  41. //*****************************************************************************
  42. //
  43. // If building with a C++ compiler, make all of the definitions in this header
  44. // have a C binding.
  45. //
  46. //*****************************************************************************
  47. #ifdef __cplusplus
  48. extern "C"
  49. {
  50. #endif
  51. //*****************************************************************************
  52. //
  53. // Peripheral clock and reset control registers
  54. //
  55. //*****************************************************************************
  56. typedef struct _PRCM_PeripheralRegs_
  57. {
  58. unsigned char ulClkReg;
  59. unsigned char ulRstReg;
  60. }PRCM_PeriphRegs_t;
  61. //*****************************************************************************
  62. // Values that can be passed to PRCMPeripheralEnable() and
  63. // PRCMPeripheralDisable()
  64. //*****************************************************************************
  65. #define PRCM_RUN_MODE_CLK 0x00000001
  66. #define PRCM_SLP_MODE_CLK 0x00000100
  67. #define PRCM_DSLP_MODE_CLK 0x00010000
  68. //*****************************************************************************
  69. // Values that can be passed to PRCMSRAMRetentionEnable() and
  70. // PRCMSRAMRetentionDisable() as ulSramColSel.
  71. //*****************************************************************************
  72. #define PRCM_SRAM_COL_1 0x00000001
  73. #define PRCM_SRAM_COL_2 0x00000002
  74. #define PRCM_SRAM_COL_3 0x00000004
  75. #define PRCM_SRAM_COL_4 0x00000008
  76. //*****************************************************************************
  77. // Values that can be passed to PRCMSRAMRetentionEnable() and
  78. // PRCMSRAMRetentionDisable() as ulModeFlags.
  79. //*****************************************************************************
  80. #define PRCM_SRAM_DSLP_RET 0x00000001
  81. #define PRCM_SRAM_LPDS_RET 0x00000002
  82. //*****************************************************************************
  83. // Values that can be passed to PRCMLPDSWakeupSourceEnable(),
  84. // PRCMLPDSWakeupCauseGet() and PRCMLPDSWakeupSourceDisable().
  85. //*****************************************************************************
  86. #define PRCM_LPDS_HOST_IRQ 0x00000080
  87. #define PRCM_LPDS_GPIO 0x00000010
  88. #define PRCM_LPDS_TIMER 0x00000001
  89. //*****************************************************************************
  90. // Values that can be passed to PRCMLPDSWakeUpGPIOSelect() as Type
  91. //*****************************************************************************
  92. #define PRCM_LPDS_LOW_LEVEL 0x00000002
  93. #define PRCM_LPDS_HIGH_LEVEL 0x00000000
  94. #define PRCM_LPDS_FALL_EDGE 0x00000001
  95. #define PRCM_LPDS_RISE_EDGE 0x00000003
  96. //*****************************************************************************
  97. // Values that can be passed to PRCMLPDSWakeUpGPIOSelect()
  98. //*****************************************************************************
  99. #define PRCM_LPDS_GPIO2 0x00000000
  100. #define PRCM_LPDS_GPIO4 0x00000001
  101. #define PRCM_LPDS_GPIO13 0x00000002
  102. #define PRCM_LPDS_GPIO17 0x00000003
  103. #define PRCM_LPDS_GPIO11 0x00000004
  104. #define PRCM_LPDS_GPIO24 0x00000005
  105. #define PRCM_LPDS_GPIO26 0x00000006
  106. //*****************************************************************************
  107. // Values that can be passed to PRCMHibernateWakeupSourceEnable(),
  108. // PRCMHibernateWakeupSourceDisable().
  109. //*****************************************************************************
  110. #define PRCM_HIB_SLOW_CLK_CTR 0x00000001
  111. //*****************************************************************************
  112. // Values that can be passed to PRCMHibernateWakeUpGPIOSelect() as ulType
  113. //*****************************************************************************
  114. #define PRCM_HIB_LOW_LEVEL 0x00000000
  115. #define PRCM_HIB_HIGH_LEVEL 0x00000001
  116. #define PRCM_HIB_FALL_EDGE 0x00000002
  117. #define PRCM_HIB_RISE_EDGE 0x00000003
  118. //*****************************************************************************
  119. // Values that can be passed to PRCMHibernateWakeupSourceEnable(),
  120. // PRCMHibernateWakeupSourceDisable(), PRCMHibernateWakeUpGPIOSelect()
  121. //*****************************************************************************
  122. #define PRCM_HIB_GPIO2 0x00010000
  123. #define PRCM_HIB_GPIO4 0x00020000
  124. #define PRCM_HIB_GPIO13 0x00040000
  125. #define PRCM_HIB_GPIO17 0x00080000
  126. #define PRCM_HIB_GPIO11 0x00100000
  127. #define PRCM_HIB_GPIO24 0x00200000
  128. #define PRCM_HIB_GPIO26 0x00400000
  129. //*****************************************************************************
  130. // Values that will be returned from PRCMSysResetCauseGet().
  131. //*****************************************************************************
  132. #define PRCM_POWER_ON 0x00000000
  133. #define PRCM_LPDS_EXIT 0x00000001
  134. #define PRCM_CORE_RESET 0x00000003
  135. #define PRCM_MCU_RESET 0x00000004
  136. #define PRCM_WDT_RESET 0x00000005
  137. #define PRCM_SOC_RESET 0x00000006
  138. #define PRCM_HIB_EXIT 0x00000007
  139. //*****************************************************************************
  140. // Values that can be passed to PRCMHibernateWakeupCauseGet().
  141. //*****************************************************************************
  142. #define PRCM_HIB_WAKEUP_CAUSE_SLOW_CLOCK 0x00000002
  143. #define PRCM_HIB_WAKEUP_CAUSE_GPIO 0x00000004
  144. //*****************************************************************************
  145. // Values that can be passed to PRCMIntEnable
  146. //*****************************************************************************
  147. #define PRCM_INT_SLOW_CLK_CTR 0x00004000
  148. //*****************************************************************************
  149. // Values that can be passed to PRCMPeripheralClkEnable(),
  150. // PRCMPeripheralClkDisable(), PRCMPeripheralReset()
  151. //*****************************************************************************
  152. #define PRCM_CAMERA 0x00000000
  153. #define PRCM_I2S 0x00000001
  154. #define PRCM_SDHOST 0x00000002
  155. #define PRCM_GSPI 0x00000003
  156. #define PRCM_LSPI 0x00000004
  157. #define PRCM_UDMA 0x00000005
  158. #define PRCM_GPIOA0 0x00000006
  159. #define PRCM_GPIOA1 0x00000007
  160. #define PRCM_GPIOA2 0x00000008
  161. #define PRCM_GPIOA3 0x00000009
  162. #define PRCM_GPIOA4 0x0000000A
  163. #define PRCM_WDT 0x0000000B
  164. #define PRCM_UARTA0 0x0000000C
  165. #define PRCM_UARTA1 0x0000000D
  166. #define PRCM_TIMERA0 0x0000000E
  167. #define PRCM_TIMERA1 0x0000000F
  168. #define PRCM_TIMERA2 0x00000010
  169. #define PRCM_TIMERA3 0x00000011
  170. #define PRCM_DTHE 0x00000012
  171. #define PRCM_SSPI 0x00000013
  172. #define PRCM_I2CA0 0x00000014
  173. // Note : PRCM_ADC is a dummy define for pinmux utility code generation
  174. // PRCM_ADC should never be used in any user code.
  175. #define PRCM_ADC 0x000000FF
  176. //*****************************************************************************
  177. // User bits in the PRCM persistent registers
  178. //*****************************************************************************
  179. #define PRCM_SAFE_BOOT_BIT 30
  180. #define PRCM_WDT_RESET_BIT 29
  181. #define PRCM_FIRST_BOOT_BIT 28
  182. //*****************************************************************************
  183. //
  184. // API Function prototypes
  185. //
  186. //*****************************************************************************
  187. extern void PRCMSetSpecialBit(unsigned char bit);
  188. extern void PRCMClearSpecialBit(unsigned char bit);
  189. extern tBoolean PRCMGetSpecialBit(unsigned char bit);
  190. extern void PRCMSOCReset(void);
  191. extern void PRCMMCUReset(tBoolean bIncludeSubsystem);
  192. extern unsigned long PRCMSysResetCauseGet(void);
  193. extern void PRCMPeripheralClkEnable(unsigned long ulPeripheral,
  194. unsigned long ulClkFlags);
  195. extern void PRCMPeripheralClkDisable(unsigned long ulPeripheral,
  196. unsigned long ulClkFlags);
  197. extern void PRCMPeripheralReset(unsigned long ulPeripheral);
  198. extern tBoolean PRCMPeripheralStatusGet(unsigned long ulPeripheral);
  199. extern void PRCMI2SClockFreqSet(unsigned long ulI2CClkFreq);
  200. extern unsigned long PRCMPeripheralClockGet(unsigned long ulPeripheral);
  201. extern void PRCMSleepEnter(void);
  202. extern void PRCMDeepSleepEnter(void);
  203. extern void PRCMSRAMRetentionEnable(unsigned long ulSramColSel,
  204. unsigned long ulFlags);
  205. extern void PRCMSRAMRetentionDisable(unsigned long ulSramColSel,
  206. unsigned long ulFlags);
  207. extern void PRCMLPDSRestoreInfoSet(unsigned long ulRestoreSP,
  208. unsigned long ulRestorePC);
  209. extern void PRCMLPDSEnter(void);
  210. extern void PRCMLPDSIntervalSet(unsigned long ulTicks);
  211. extern void PRCMLPDSWakeupSourceEnable(unsigned long ulLpdsWakeupSrc);
  212. extern unsigned long PRCMLPDSWakeupCauseGet(void);
  213. extern void PRCMLPDSWakeUpGPIOSelect(unsigned long ulGPIOPin,
  214. unsigned long ulType);
  215. extern void PRCMLPDSWakeupSourceDisable(unsigned long ulLpdsWakeupSrc);
  216. extern void PRCMHibernateEnter(void);
  217. extern void PRCMHibernateWakeupSourceEnable(unsigned long ulHIBWakupSrc);
  218. extern unsigned long PRCMHibernateWakeupCauseGet(void);
  219. extern void PRCMHibernateWakeUpGPIOSelect(unsigned long ulMultiGPIOBitMap,
  220. unsigned long ulType);
  221. extern void PRCMHibernateWakeupSourceDisable(unsigned long ulHIBWakupSrc);
  222. extern void PRCMHibernateIntervalSet(unsigned long long ullTicks);
  223. extern unsigned long long PRCMSlowClkCtrGet(void);
  224. extern unsigned long long PRCMSlowClkCtrFastGet(void);
  225. extern void PRCMSlowClkCtrMatchSet(unsigned long long ullTicks);
  226. extern unsigned long long PRCMSlowClkCtrMatchGet(void);
  227. extern void PRCMOCRRegisterWrite(unsigned char ucIndex,
  228. unsigned long ulRegValue);
  229. extern unsigned long PRCMOCRRegisterRead(unsigned char ucIndex);
  230. extern void PRCMIntRegister(void (*pfnHandler)(void));
  231. extern void PRCMIntUnregister(void);
  232. extern void PRCMIntEnable(unsigned long ulIntFlags);
  233. extern void PRCMIntDisable(unsigned long ulIntFlags);
  234. extern unsigned long PRCMIntStatus(void);
  235. extern void PRCMRTCInUseSet(void);
  236. extern void PRCMRTCInUseClear(void);
  237. extern tBoolean PRCMRTCInUseGet(void);
  238. extern void PRCMRTCSet(unsigned long ulSecs, unsigned short usMsec);
  239. extern void PRCMRTCGet(unsigned long *ulSecs, unsigned short *usMsec);
  240. extern void PRCMRTCMatchSet(unsigned long ulSecs, unsigned short usMsec);
  241. extern void PRCMRTCMatchGet(unsigned long *ulSecs, unsigned short *usMsec);
  242. extern void PRCMCC3200MCUInit(void);
  243. extern unsigned long PRCMHIBRegRead(unsigned long ulRegAddr);
  244. extern void PRCMHIBRegWrite(unsigned long ulRegAddr, unsigned long ulValue);
  245. extern unsigned long PRCMCameraFreqSet(unsigned char ulDivider, unsigned char ulWidth);
  246. //*****************************************************************************
  247. //
  248. // Mark the end of the C bindings section for C++ compilers.
  249. //
  250. //*****************************************************************************
  251. #ifdef __cplusplus
  252. }
  253. #endif
  254. #endif // __PRCM_H__