rtc.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. /**
  2. * \file rtc.h
  3. *
  4. * \brief Header file for RTC driver module. This file contains the
  5. * prototypes of the APIs of RTC module and some related macros.
  6. */
  7. /*
  8. * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
  9. */
  10. /*
  11. * Redistribution and use in source and binary forms, with or without
  12. * modification, are permitted provided that the following conditions
  13. * are met:
  14. *
  15. * Redistributions of source code must retain the above copyright
  16. * notice, this list of conditions and the following disclaimer.
  17. *
  18. * Redistributions in binary form must reproduce the above copyright
  19. * notice, this list of conditions and the following disclaimer in the
  20. * documentation and/or other materials provided with the
  21. * distribution.
  22. *
  23. * Neither the name of Texas Instruments Incorporated nor the names of
  24. * its contributors may be used to endorse or promote products derived
  25. * from this software without specific prior written permission.
  26. *
  27. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  28. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  29. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  30. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  31. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  32. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  33. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  34. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  35. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  36. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  37. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  38. *
  39. */
  40. #ifndef __RTC_H__
  41. #define __RTC_H__
  42. #include "hw_rtc.h"
  43. #ifdef __cplusplus
  44. extern "C" {
  45. #endif
  46. /*****************************************************************************/
  47. /* Either of these macros are returned by the RTCEnableStatus() API.*/
  48. /* Used to disable RTC instance.*/
  49. #define RTC_DISABLED RTC_CTRL_RTCDISABLE
  50. /* Used to indicate that RTC is enabled and functional.*/
  51. #define RTC_ENABLED RTC_CTRL_RUN_SHIFT
  52. /*****************************************************************************/
  53. /* Either of these macros are used as a parameter to RTCHourModeSet() API.*/
  54. /* Used to enable 12 hour mode for hours.*/
  55. #define RTC_12HOUR_MODE (1 << RTC_CTRL_HOURMODE_SHIFT)
  56. /* Used to enable 24 hour mode for hours.*/
  57. #define RTC_24HOUR_MODE (0 << RTC_CTRL_HOURMODE_SHIFT)
  58. /*****************************************************************************/
  59. /*
  60. ** One among the following macros are passed as a parameter to
  61. ** RTCIntTimerEnable() API.
  62. */
  63. /* Used to enable interrupt generation on every second.*/
  64. #define RTC_INT_EVERY_SECOND RTC_INTERRUPTS_EVERY_SECOND
  65. /* Used to enable interrupt generation on every minute.*/
  66. #define RTC_INT_EVERY_MINUTE RTC_INTERRUPTS_EVERY_MINUTE
  67. /* Used to enable interrupt generation on every hour.*/
  68. #define RTC_INT_EVERY_HOUR RTC_INTERRUPTS_EVERY_HOUR
  69. /* Used to enable interrupt generation on every day.*/
  70. #define RTC_INT_EVERY_DAY RTC_INTERRUPTS_EVERY_DAY
  71. /****************************************************************************/
  72. /* Either of these macros are returned by the RTCAlarmIntStatusGet() API. */
  73. /* Used to indicate that a new alarm interrupt has been generated. */
  74. #define RTC_NEW_ALARM_INTERRUPT RTC_STATUS_ALARM
  75. /* Used to indicate that no new alarm interrupt has been generated.*/
  76. #define RTC_NO_NEW_ALARM_INTERRUPT 0x0
  77. /****************************************************************************/
  78. /* Either of these macros are returned by the RTCAlarm2IntStatusGet() API. */
  79. /* Used to indicate that a new alarm interrupt has been generated. */
  80. #define RTC_NEW_ALARM2_INTERRUPT RTC_STATUS_ALARM2
  81. /* Used to indicate that no new alarm interrupt has been generated.*/
  82. #define RTC_NO_NEW_ALARM2_INTERRUPT 0x0
  83. /****************************************************************************/
  84. /*
  85. ** Any one of the following macros or a combination of the same are returned
  86. ** by the RTCEventUpdateGet() API.
  87. */
  88. /*
  89. ** Used to indicate that DAY register was incremented in the latest
  90. ** time update.
  91. */
  92. #define RTC_DAY_EVENT RTC_STATUS_DAYEVT
  93. /*
  94. ** Used to indicate that HOUR register was incremented in the latest
  95. ** time update.
  96. */
  97. #define RTC_HOUR_EVENT RTC_STATUS_HREVT
  98. /*
  99. ** Used to indicate that MINUTE register was incremented in the latest
  100. ** time update.
  101. */
  102. #define RTC_MINUTE_EVENT RTC_STATUS_MINEVT
  103. /*
  104. ** Used to indicate that SECOND register was incremented in the latest
  105. ** time update.
  106. */
  107. #define RTC_SECOND_EVENT RTC_STATUS_SECEVT
  108. /****************************************************************************/
  109. /* These macros are returned by the RTCBusyStatusGet() API. */
  110. /* Used to indicate that RTC is busy in updating its registers.*/
  111. #define RTC_BUSY RTC_STATUS_BUSY
  112. /*
  113. ** Used to indicate that RTC is free and is currently not updating its
  114. ** registers.
  115. */
  116. #define RTC_FREE RTC_STATUS_BUSY_SHIFT
  117. /****************************************************************************/
  118. /* These macros are returned by the function RTCRunStatusGet() API. */
  119. /* Used to indicate that RTC is in running state.*/
  120. #define RTC_STATUS_RUNNING RTC_STATUS_RUN
  121. /* Used to indicate that RTC is in stopped state.*/
  122. #define RTC_STATUS_STOPPED RTC_STATUS_BUSY_SHIFT
  123. /*****************************************************************************/
  124. /*
  125. ** Either of following macros are passed as a parameter to
  126. ** RTCAlarmHourMeridiemSet() and RTCMeridiemSet() APIs. Similarly either of
  127. ** these are returned by RTCAlarmHourMeridiemGet() and RTCMeridiemGet() APIs.
  128. */
  129. /* Used to set the meridiem as post-meridiem(PM).*/
  130. #define RTC_POST_MERIDIEM (1 << RTC_HOUR_MERIDIEM_SHIFT)
  131. /* Used to set the meridiem as ante-meridiem(AM).*/
  132. #define RTC_ANTE_MERIDIEM (0 << RTC_HOUR_MERIDIEM_SHIFT)
  133. /*****************************************************************************/
  134. /*
  135. ** One among the following macros are passed as a parameter to
  136. ** RTCDayOfTheWeekSet() API. Similarly one of these macros are returned by the
  137. ** RTCDayOfTheWeekGet() API.
  138. */
  139. /* Used to indicate the days of the week. */
  140. #define RTC_DOTW_SUN RTC_DOTW_DOTW_SUN
  141. #define RTC_DOTW_MON RTC_DOTW_DOTW_MON
  142. #define RTC_DOTW_TUE RTC_DOTW_DOTW_TUE
  143. #define RTC_DOTW_WED RTC_DOTW_DOTW_WED
  144. #define RTC_DOTW_THU RTC_DOTW_DOTW_THU
  145. #define RTC_DOTW_FRI RTC_DOTW_DOTW_FRI
  146. #define RTC_DOTW_SAT RTC_DOTW_DOTW_SAT
  147. /*****************************************************************************/
  148. /* Definitions specific to RTC IP in AM335X. */
  149. /*
  150. ** RTC Idle Mode Options.
  151. */
  152. #define RTC_IDLEMODE_FORCE_IDLE (RTC_SYSCONFIG_IDLEMODE_FORCE_IDLE_MODE)
  153. #define RTC_IDLEMODE_NO_IDLE (RTC_SYSCONFIG_IDLEMODE_NO_IDLE_MODE)
  154. #define RTC_IDLEMODE_SMART_IDLE (RTC_SYSCONFIG_IDLEMODE_SMART_IDLE_MODE)
  155. #define RTC_IDLEMODE_SMART_IDLE_WAKEUP (RTC_SYSCONFIG_IDLEMODE_SMART_IDLE_WAKEUP_CAPABLE_MODE)
  156. /*
  157. ** Values are used to enable/disable Wakeup generation on Alarm event.
  158. */
  159. #define RTC_ALARM_WAKEUP_ENABLE (RTC_IRQ_WAKEEN_ALARM_WAKEEN_WAKEUP_ENABLED << \
  160. RTC_IRQ_WAKEEN_ALARM_WAKEEN_SHIFT)
  161. #define RTC_ALARM_WAKEUP_DISABLE (RTC_IRQ_WAKEEN_ALARM_WAKEEN_WAKEUP_DISABLED << \
  162. RTC_IRQ_WAKEEN_ALARM_WAKEEN_SHIFT)
  163. /*
  164. ** Values are used to enable/disable Wakeup generation on Timer event.
  165. */
  166. #define RTC_TIMER_WAKEUP_ENABLE (RTC_IRQ_WAKEEN_TIMER_WAKEEN_WAKEUP_ENABLED << \
  167. RTC_IRQ_WAKEEN_TIMER_WAKEEN_SHIFT)
  168. #define RTC_TIMER_WAKEUP_DISABLE (RTC_IRQ_WAKEEN_TIMER_WAKEEN_WAKEUP_DISABLED << \
  169. RTC_IRQ_WAKEEN_TIMER_WAKEEN_SHIFT)
  170. /* Values used to enable/disable Test Mode. */
  171. #define RTC_FUNCTIONAL_MODE_ENABLE (RTC_CTRL_TEST_MODE_FUNCTIONAL_MODE << \
  172. RTC_CTRL_TEST_MODE_SHIFT)
  173. #define RTC_TEST_MODE_ENABLE (RTC_CTRL_TEST_MODE_TEST_MODE << \
  174. RTC_CTRL_TEST_MODE_SHIFT)
  175. /* Values used to select the clock source to the RTC. */
  176. #define RTC_INTERNAL_CLK_SRC_SELECT (RTC_OSC_32KCLK_SEL_SELECT_INTERNAL_CLK_SOURCE << \
  177. RTC_OSC_32KCLK_SEL_SHIFT)
  178. #define RTC_EXTERNAL_CLK_SRC_SELECT (RTC_OSC_32KCLK_SEL_SELECT_EXTERNAL_CLK_SOURCE << \
  179. RTC_OSC_32KCLK_SEL_SHIFT)
  180. /* Values used to enable/disable the RTC to receive clock inputs from the selected source. */
  181. #define RTC_32KCLK_ENABLE (RTC_OSC_32KCLK_EN_ENABLE << \
  182. RTC_OSC_32KCLK_EN_SHIFT)
  183. #define RTC_32KCLK_DISABLE (RTC_OSC_32KCLK_EN_DISABLE << \
  184. RTC_OSC_32KCLK_EN_SHIFT)
  185. /* Values used to enable/disable the Oscillator. */
  186. #define RTC_32KOSC_ENABLE (RTC_OSC_OSC32K_GZ_ENABLE << \
  187. RTC_OSC_OSC32K_GZ_SHIFT)
  188. #define RTC_32KOSC_DISABLE (RTC_OSC_OSC32K_GZ_DISABLE << \
  189. RTC_OSC_OSC32K_GZ_SHIFT)
  190. /* Values used to select the mode of the Oscillator Feedback resistor. */
  191. #define RTC_INTERNAL_FEEDBACK_RES_SEL (RTC_OSC_RES_SELECT_INTERNAL << \
  192. RTC_OSC_RES_SELECT_SHIFT)
  193. #define RTC_EXTERNAL_FEEDBACK_RES_SEL (RTC_OSC_RES_SELECT_EXTERNAL << \
  194. RTC_OSC_RES_SELECT_SHIFT)
  195. /* Values used to enable/disable PMIC Power. Passed as parameters to the API
  196. RTCConfigPmicPowerEnable(). */
  197. #define RTC_PMIC_PWR_ENABLE (RTC_PMIC_PWR_ENABLE_EN)
  198. #define RTC_PMIC_PWR_DISABLE (RTC_PMIC_PWR_ENABLE_EN_DISABLE)
  199. /* Values used to configure polarity of external wake pin. Passed as
  200. parameters to the API RTCConfigPmicExtWakePolarity(). */
  201. #define RTC_EXT_WAKEUP_POL_ACTIVE_HIGH (RTC_PMIC_EXT_WAKEUP_POL_ACTIVE_HIGH)
  202. #define RTC_EXT_WAKEUP_POL_ACTIVE_LOW (RTC_PMIC_EXT_WAKEUP_POL_ACTIVE_LOW)
  203. /* Values used to configure polarity of external wake pin. Passed as
  204. parameters to the API RTCConfigPmicExtWakePolarity(). */
  205. #define RTC_EXT_WAKEUP_ENABLE (RTC_PMIC_EXT_WAKEUP_EN_EXT_WALEUP_ENABLE)
  206. #define RTC_EXT_WAKEUP_DISABLE (RTC_PMIC_EXT_WAKEUP_EN_EXT_WAKEUP_DISABLED)
  207. /* Values used to configure polarity of external wake pin. Passed as
  208. parameters to the API RTCConfigPmicExtWakePolarity(). */
  209. #define RTC_EXT_WAKEUP_DB_ENABLE (RTC_PMIC_EXT_WAKEUP_DB_EN_ENABLE)
  210. #define RTC_EXT_WAKEUP_DB_DISABLE (RTC_PMIC_EXT_WAKEUP_DB_EN_DISABLE)
  211. /*****************************************************************************/
  212. /******************************************************************************
  213. ** DRIVER API FUNCTIONS PROTOTYPES
  214. ******************************************************************************/
  215. /******************************************************************************
  216. ** APIs common to the RTC IPs of both AM1808 and AM335x.
  217. ******************************************************************************/
  218. extern void RTCRun(unsigned int baseAddr);
  219. extern void RTCStop(unsigned int baseAddr);
  220. extern void RTCMinRoundingEnable(unsigned int baseAddr);
  221. extern void RTCMinRoundingDisable(unsigned int baseAddr);
  222. extern void RTCAutoCompEnable(unsigned int baseAddr);
  223. extern void RTCAutoCompDisable(unsigned int baseAddr);
  224. extern void RTCHourModeSet(unsigned int baseAddr, unsigned int hourType);
  225. extern unsigned int RTCHourModeGet(unsigned int baseAddr);
  226. extern void RTCSet32CounterEnable(unsigned int baseAddr);
  227. extern void RTCSet32CounterDisable(unsigned int baseAddr);
  228. extern unsigned int RTCEnableStatus(unsigned int baseAddr);
  229. extern void RTCDisable(unsigned int baseAddr);
  230. extern void RTCEnable(unsigned int baseAddr);
  231. extern void RTCSplitPwrEnable(unsigned int baseAddr);
  232. extern void RTCSplitPwrDisable(unsigned int baseAddr);
  233. extern void RTCWriteProtectEnable(unsigned int baseAddr);
  234. extern void RTCWriteProtectDisable(unsigned int baseAddr);
  235. extern void RTCIntAlarmEnable(unsigned int baseAddr);
  236. extern void RTCIntAlarmDisable(unsigned int baseAddr);
  237. extern void RTCIntTimerEnable(unsigned int baseAddr, unsigned int timerPeriod);
  238. extern void RTCIntTimerDisable(unsigned int baseAddr);
  239. extern unsigned int RTCBusyStatusGet(unsigned int baseAddr);
  240. extern unsigned int RTCRunStatusGet(unsigned int baseAddr);
  241. extern unsigned int RTCAlarmIntStatusGet(unsigned int baseAddr);
  242. extern void RTCAlarmIntStatusClear(unsigned int baseAddr);
  243. extern unsigned int RTCEventUpdateGet(unsigned int baseAddr);
  244. extern void RTCSecondSet(unsigned int baseAddr, unsigned int secValue);
  245. extern unsigned int RTCSecondGet(unsigned int baseAddr);
  246. extern void RTCMinuteSet(unsigned int baseAddr, unsigned int minValue);
  247. extern unsigned int RTCMinuteGet(unsigned int baseAddr);
  248. extern void RTCHourSet(unsigned int baseAddr, unsigned int hourValue);
  249. extern unsigned int RTCHourGet(unsigned int baseAddr);
  250. extern void RTCMeridiemSet(unsigned int baseAddr, unsigned int meridiemType);
  251. extern unsigned int RTCMeridiemGet(unsigned int baseAddr);
  252. extern void RTCDayOfMonthSet(unsigned int baseAddr, unsigned int dayValue);
  253. extern unsigned int RTCDayOfMonthGet(unsigned int baseAddr);
  254. extern void RTCMonthSet(unsigned int baseAddr, unsigned int monthValue);
  255. extern unsigned int RTCMonthGet(unsigned int baseAddr);
  256. extern void RTCYearSet(unsigned int baseAddr, unsigned int yearValue);
  257. extern unsigned int RTCYearGet(unsigned int baseAddr);
  258. extern void RTCDayOfTheWeekSet(unsigned int baseAddr, unsigned int dotwValue);
  259. extern unsigned int RTCDayOfTheWeekGet(unsigned int baseAddr);
  260. extern void RTCTimeSet(unsigned int baseAddr, unsigned int time);
  261. extern unsigned int RTCTimeGet(unsigned int baseAddr);
  262. extern void RTCCalendarSet(unsigned int baseAddr, unsigned int calendar);
  263. extern unsigned int RTCCalendarGet(unsigned int baseAddr);
  264. extern void RTCAlarmSecondSet(unsigned int baseAddr, unsigned int alarmSecValue);
  265. extern unsigned int RTCAlarmSecondGet(unsigned int baseAddr);
  266. extern void RTCAlarmMinuteSet(unsigned int baseAddr, unsigned int alrmMinValue);
  267. extern unsigned int RTCAlarmMinuteGet(unsigned int baseAddr);
  268. extern void RTCAlarmHourSet(unsigned int baseAddr, unsigned int alrmHourVal);
  269. extern unsigned int RTCAlarmHourGet(unsigned int baseAddr);
  270. extern void RTCAlarmHourMeridiemSet(unsigned int baseAddr, unsigned int meridiemType);
  271. extern unsigned int RTCAlarmHourMeridiemGet(unsigned int baseAddr);
  272. extern void RTCAlarmTimeSet(unsigned int baseAddr, unsigned int alarmTime);
  273. extern unsigned int RTCAlarmTimeGet(unsigned int baseAddr);
  274. extern void RTCAlarmDayOfMonthSet(unsigned int baseAddr, unsigned int alarmDayValue);
  275. extern unsigned int RTCAlarmDayOfMonthGet(unsigned int baseAddr);
  276. extern void RTCAlarmMonthSet(unsigned int baseAddr, unsigned int alrmMnthVal);
  277. extern unsigned int RTCAlarmMonthGet(unsigned int baseAddr);
  278. extern void RTCAlarmYearSet(unsigned int baseAddr, unsigned int alrmYrVal);
  279. extern unsigned int RTCAlarmYearGet(unsigned int baseAddr);
  280. extern void RTCAlarmCalendarSet(unsigned int baseAddr, unsigned int calVal);
  281. extern unsigned int RTCAlarmCalendarGet(unsigned int baseAddr);
  282. extern void RTCCompensationSet(unsigned int baseAddr, unsigned int compVal);
  283. extern unsigned int RTCCompensationGet(unsigned int baseAddr);
  284. extern void RTCScratchPadSet(unsigned int baseAddr, unsigned int regNumber,
  285. unsigned int scratchValue);
  286. extern unsigned int RTCScratchPadGet(unsigned int baseAddr, unsigned int regNumber);
  287. /*****************************************************************************
  288. ** APIs specific to RTC IP of AM1808 and not applicable for that in AM335x.
  289. *****************************************************************************/
  290. extern void RTCSoftwareReset(unsigned int baseAddr);
  291. /*****************************************************************************
  292. ** APIs specific to RTC IP of AM335x and not applicable for that in AM1808.
  293. *****************************************************************************/
  294. extern void RTCIdleModeConfigure(unsigned int baseAdd, unsigned int modeFlag);
  295. extern void RTCWakeUpAlarmEventControl(unsigned int baseAdd, unsigned int controlFlag);
  296. extern void RTCWakeUpTimerEventControl(unsigned int baseAdd, unsigned int controlFlag);
  297. extern void RTCTestModeControl(unsigned int baseAdd, unsigned int controlFlag);
  298. extern void RTC32KClkSourceSelect(unsigned int baseAdd, unsigned int clkSrcFlag);
  299. extern void RTC32KClkClockControl(unsigned int baseAdd, unsigned int controlFlag);
  300. extern void RTCOscillatorStateControl(unsigned int baseAdd, unsigned int controlFlag);
  301. extern void RTCFeedbackResistanceSelect(unsigned int baseAdd, unsigned int selectFlag);
  302. extern void RTCConfigPmicPowerEnable(unsigned int baseAdd, unsigned int selectFlag);
  303. extern void RTCConfigPmicExtWakePolarity(unsigned int baseAdd,
  304. unsigned int extInput,
  305. unsigned int selectFlag);
  306. extern void RTCConfigPmicExtWake(unsigned int baseAdd, unsigned int extInput,
  307. unsigned int selectFlag);
  308. extern void RTCConfigPmicExtWakeDebounce(unsigned int baseAdd,
  309. unsigned int extInput,
  310. unsigned int selectFlag);
  311. extern void RTCPmicExtWakeStatusClear(unsigned int baseAdd,
  312. unsigned int extInput);
  313. extern void RTCIntAlarm2Enable(unsigned int baseAddr);
  314. extern void RTCAlarm2IntStatusClear(unsigned int baseAddr);
  315. extern void RTCAlarm2TimeSet(unsigned int baseAddr, unsigned int alarmTime);
  316. extern void RTCAlarm2CalendarSet(unsigned int baseAddr, unsigned int calVal);
  317. extern unsigned int RTCAlarm2IntStatusGet(unsigned int baseAdd);
  318. /*****************************************************************************
  319. ** Prototypes of Miscellaneous and related functions
  320. *****************************************************************************/
  321. /* Function which helps determine the SoC(Platform) in use. */
  322. extern unsigned int RtcVersionGet(void);
  323. #ifdef __cplusplus
  324. }
  325. #endif
  326. #endif