1 //*****************************************************************************
2 //
3 // hibernate.h - API definition for the Hibernation module.
4 //
5 // Copyright (c) 2007-2020 Texas Instruments Incorporated.  All rights reserved.
6 // Software License Agreement
7 //
8 //   Redistribution and use in source and binary forms, with or without
9 //   modification, are permitted provided that the following conditions
10 //   are met:
11 //
12 //   Redistributions of source code must retain the above copyright
13 //   notice, this list of conditions and the following disclaimer.
14 //
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
18 //   distribution.
19 //
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.
23 //
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.
35 //
36 // This is part of revision 2.2.0.295 of the Tiva Peripheral Driver Library.
37 //
38 //*****************************************************************************
39 
40 #ifndef __DRIVERLIB_HIBERNATE_H__
41 #define __DRIVERLIB_HIBERNATE_H__
42 
43 //*****************************************************************************
44 //
45 // If building with a C++ compiler, make all of the definitions in this header
46 // have a C binding.
47 //
48 //*****************************************************************************
49 #ifdef __cplusplus
50 extern "C"
51 {
52 #endif
53 
54 //*****************************************************************************
55 //
56 // Macros need to configure wake events for HibernateWakeSet()
57 //
58 //*****************************************************************************
59 #define HIBERNATE_WAKE_PIN      0x00000010
60 #define HIBERNATE_WAKE_RTC      0x00000008
61 #define HIBERNATE_WAKE_LOW_BAT  0x00000200
62 #define HIBERNATE_WAKE_GPIO     0x00000010
63 #define HIBERNATE_WAKE_RESET    0x00100010
64 #define HIBERNATE_WAKE_TAMPER   0x08000010
65 
66 //*****************************************************************************
67 //
68 // Macros needed to configure low battery detect for HibernateLowBatSet()
69 //
70 //*****************************************************************************
71 #define HIBERNATE_LOW_BAT_DETECT                                              \
72                                 0x00000020
73 #define HIBERNATE_LOW_BAT_ABORT 0x000000A0
74 #define HIBERNATE_LOW_BAT_1_9V  0x00000000
75 #define HIBERNATE_LOW_BAT_2_1V  0x00002000
76 #define HIBERNATE_LOW_BAT_2_3V  0x00004000
77 #define HIBERNATE_LOW_BAT_2_5V  0x00006000
78 
79 //*****************************************************************************
80 //
81 // Macros defining interrupt source bits for the interrupt functions.
82 //
83 //*****************************************************************************
84 #define HIBERNATE_INT_VDDFAIL   0x00000080
85 #define HIBERNATE_INT_RESET_WAKE                                              \
86                                 0x00000040
87 #define HIBERNATE_INT_GPIO_WAKE 0x00000020
88 #define HIBERNATE_INT_WR_COMPLETE                                             \
89                                 0x00000010
90 #define HIBERNATE_INT_PIN_WAKE  0x00000008
91 #define HIBERNATE_INT_LOW_BAT   0x00000004
92 #define HIBERNATE_INT_RTC_MATCH_0                                             \
93                                 0x00000001
94 
95 //*****************************************************************************
96 //
97 // Macros defining oscillator configuration options for the
98 // HibernateClockConfig() function.
99 //
100 //*****************************************************************************
101 #define HIBERNATE_OSC_LFIOSC    0x00080000
102 #define HIBERNATE_OSC_LOWDRIVE  0x00000000
103 #define HIBERNATE_OSC_HIGHDRIVE 0x00020000
104 #define HIBERNATE_OSC_DISABLE   0x00010000
105 #define HIBERNATE_OUT_WRSTALL   0x20000000
106 #define HIBERNATE_OUT_SYSCLK    0x00000001
107 
108 //*****************************************************************************
109 //
110 // The following defines are used with the HibernateCounterMode() API.
111 //
112 //*****************************************************************************
113 #define HIBERNATE_COUNTER_RTC   0x00000000
114 #define HIBERNATE_COUNTER_12HR  0x00000001
115 #define HIBERNATE_COUNTER_24HR  0x00000005
116 
117 //*****************************************************************************
118 //
119 // Tamper event configuration options used with HibernateTamperEventsConfig().
120 //
121 //*****************************************************************************
122 #define HIBERNATE_TAMPER_EVENTS_NO_HIB_WAKE                                   \
123                                 0x00000000
124 #define HIBERNATE_TAMPER_EVENTS_HIB_WAKE                                      \
125                                 0x00000800
126 #define HIBERNATE_TAMPER_EVENTS_NO_ERASE_HIB_MEM                              \
127                                 0x00000000
128 #define HIBERNATE_TAMPER_EVENTS_ERASE_LOW_HIB_MEM                             \
129                                 0x00000100
130 #define HIBERNATE_TAMPER_EVENTS_ERASE_HIGH_HIB_MEM                            \
131                                 0x00000200
132 #define HIBERNATE_TAMPER_EVENTS_ERASE_ALL_HIB_MEM                             \
133                                 0x00000300
134 
135 //*****************************************************************************
136 //
137 // Status flags returned by the HibernateTamperStatus() function.
138 //
139 //*****************************************************************************
140 #define HIBERNATE_TAMPER_STATUS_INACTIVE                                      \
141                                 0x00000010
142 #define HIBERNATE_TAMPER_STATUS_ACTIVE                                        \
143                                 0x00000020
144 #define HIBERNATE_TAMPER_STATUS_EVENT                                         \
145                                 0x00000040
146 #define HIBERNATE_TAMPER_STATUS_EXT_OSC_ACTIVE                                \
147                                 0x00000008
148 #define HIBERNATE_TAMPER_STATUS_EXT_OSC_INACTIVE                              \
149                                 0x00000002
150 #define HIBERNATE_TAMPER_STATUS_EXT_OSC_VALID                                 \
151                                 0x00000004
152 #define HIBERNATE_TAMPER_STATUS_EXT_OSC_FAILED                                \
153                                 0x00000001
154 
155 //*****************************************************************************
156 //
157 // Configuration options used with HibernateTamperIOEnable().
158 //
159 //*****************************************************************************
160 #define HIBERNATE_TAMPER_IO_TRIGGER_LOW                                       \
161                                 0x00000000
162 #define HIBERNATE_TAMPER_IO_TRIGGER_HIGH                                      \
163                                 0x00000002
164 #define HIBERNATE_TAMPER_IO_WPU_DISABLED                                      \
165                                 0x00000000
166 #define HIBERNATE_TAMPER_IO_WPU_ENABLED                                       \
167                                 0x00000004
168 #define HIBERNATE_TAMPER_IO_MATCH_SHORT                                       \
169                                 0x00000000
170 #define HIBERNATE_TAMPER_IO_MATCH_LONG                                        \
171                                 0x00000008
172 
173 //*****************************************************************************
174 //
175 // Tamper log event flags.
176 //
177 //*****************************************************************************
178 #define HIBERNATE_TAMPER_EVENT_0                                              \
179                                 0x00000001
180 #define HIBERNATE_TAMPER_EVENT_1                                              \
181                                 0x00000002
182 #define HIBERNATE_TAMPER_EVENT_2                                              \
183                                 0x00000004
184 #define HIBERNATE_TAMPER_EVENT_3                                              \
185                                 0x00000008
186 #define HIBERNATE_TAMPER_EVENT_EXT_OSC                                        \
187                                 0x00010000
188 
189 //*****************************************************************************
190 //
191 // API Function prototypes
192 //
193 //*****************************************************************************
194 extern void HibernateGPIORetentionEnable(void);
195 extern void HibernateGPIORetentionDisable(void);
196 extern bool HibernateGPIORetentionGet(void);
197 extern void HibernateEnableExpClk(uint32_t ui32HibClk);
198 extern void HibernateDisable(void);
199 extern void HibernateRTCEnable(void);
200 extern void HibernateRTCDisable(void);
201 extern void HibernateWakeSet(uint32_t ui32WakeFlags);
202 extern uint32_t HibernateWakeGet(void);
203 extern void HibernateLowBatSet(uint32_t ui32LowBatFlags);
204 extern uint32_t HibernateLowBatGet(void);
205 extern void HibernateRTCSet(uint32_t ui32RTCValue);
206 extern uint32_t HibernateRTCGet(void);
207 extern void HibernateRTCMatchSet(uint32_t ui32Match, uint32_t ui32Value);
208 extern uint32_t HibernateRTCMatchGet(uint32_t ui32Match);
209 extern void HibernateRTCTrimSet(uint32_t ui32Trim);
210 extern uint32_t HibernateRTCTrimGet(void);
211 extern void HibernateDataSet(uint32_t *pui32Data, uint32_t ui32Count);
212 extern void HibernateDataGet(uint32_t *pui32Data, uint32_t ui32Count);
213 extern void HibernateRequest(void);
214 extern void HibernateIntEnable(uint32_t ui32IntFlags);
215 extern void HibernateIntDisable(uint32_t ui32IntFlags);
216 extern void HibernateIntRegister(void (*pfnHandler)(void));
217 extern void HibernateIntUnregister(void);
218 extern uint32_t HibernateIntStatus(bool bMasked);
219 extern void HibernateIntClear(uint32_t ui32IntFlags);
220 extern uint32_t HibernateIsActive(void);
221 extern void HibernateRTCSSMatchSet(uint32_t ui32Match, uint32_t ui32Value);
222 extern uint32_t HibernateRTCSSMatchGet(uint32_t ui32Match);
223 extern uint32_t HibernateRTCSSGet(void);
224 extern void HibernateClockConfig(uint32_t ui32Config);
225 extern void HibernateBatCheckStart(void);
226 extern uint32_t HibernateBatCheckDone(void);
227 extern void HibernateCounterMode(uint32_t ui32Config);
228 extern void HibernateCalendarSet(struct tm *psTime);
229 extern int HibernateCalendarGet(struct tm *psTime);
230 extern void HibernateCalendarMatchSet(uint32_t ui32Index, struct tm *psTime);
231 extern void HibernateCalendarMatchGet(uint32_t ui32Index, struct tm *psTime);
232 extern void HibernateTamperEnable(void);
233 extern void HibernateTamperEventsConfig(uint32_t ui32Config);
234 extern bool HibernateTamperEventsGet(uint32_t ui32Index, uint32_t *pui32RTC,
235                                        uint32_t *pui32Event);
236 extern void HibernateTamperEventsClear(void);
237 extern void HibernateTamperEventsClearNoLock(void);
238 extern void HibernateTamperUnLock(void);
239 extern void HibernateTamperLock(void);
240 extern void HibernateTamperDisable(void);
241 extern void HibernateTamperIOEnable(uint32_t ui32Input, uint32_t ui32Config);
242 extern void HibernateTamperIODisable(uint32_t ui32Input);
243 extern uint32_t HibernateTamperStatusGet(void);
244 extern void HibernateTamperExtOscRecover(void);
245 extern bool HibernateTamperExtOscValid(void);
246 
247 //*****************************************************************************
248 //
249 // Mark the end of the C bindings section for C++ compilers.
250 //
251 //*****************************************************************************
252 #ifdef __cplusplus
253 }
254 #endif
255 
256 #endif  // __DRIVERLIB_HIBERNATE_H__
257