1 /******************************************************************************
2 *  Filename:       event.h
3 *  Revised:        2015-07-16 12:12:04 +0200 (Thu, 16 Jul 2015)
4 *  Revision:       44151
5 *
6 *  Description:    Defines and prototypes for the Event Handler.
7 *
8 *  Copyright (c) 2015, Texas Instruments Incorporated
9 *  All rights reserved.
10 *
11 *  Redistribution and use in source and binary forms, with or without
12 *  modification, are permitted provided that the following conditions are met:
13 *
14 *  1) Redistributions of source code must retain the above copyright notice,
15 *     this list of conditions and the following disclaimer.
16 *
17 *  2) Redistributions in binary form must reproduce the above copyright notice,
18 *     this list of conditions and the following disclaimer in the documentation
19 *     and/or other materials provided with the distribution.
20 *
21 *  3) Neither the name of the ORGANIZATION nor the names of its contributors may
22 *     be used to endorse or promote products derived from this software without
23 *     specific prior written permission.
24 *
25 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
26 *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
29 *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31 *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32 *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33 *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34 *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 *  POSSIBILITY OF SUCH DAMAGE.
36 *
37 ******************************************************************************/
38 
39 //*****************************************************************************
40 //
41 //! \addtogroup peripheral_group
42 //! @{
43 //! \addtogroup event_api
44 //! @{
45 //
46 //*****************************************************************************
47 
48 #ifndef __EVENT_H__
49 #define __EVENT_H__
50 
51 //*****************************************************************************
52 //
53 // If building with a C++ compiler, make all of the definitions in this header
54 // have a C binding.
55 //
56 //*****************************************************************************
57 #ifdef __cplusplus
58 extern "C"
59 {
60 #endif
61 
62 #include <stdbool.h>
63 #include <stdint.h>
64 #include <inc/hw_types.h>
65 #include <inc/hw_memmap.h>
66 #include <inc/hw_event.h>
67 #include <driverlib/debug.h>
68 
69 
70 //*****************************************************************************
71 //
72 // API Functions and prototypes
73 //
74 //*****************************************************************************
75 
76 //*****************************************************************************
77 //
78 //! \brief Connects an event to an event subscriber via Event Fabric.
79 //!
80 //! This function connects event sources to event subscribers.
81 //!
82 //! It is not possible to read event status in this module (except software events).
83 //! Event status must be read in the module that contains the event source. How a
84 //! specific event subscriber reacts to an event is configured and documented in
85 //! the respective modules.
86 //!
87 //! For a full list of configurable and constant mapped event sources to event
88 //! subscribers see the register descriptions for
89 //! <a href="../register_descriptions/CPU_MMAP/EVENT.html" target="_blank">Event Fabric</a>.
90 //!
91 //! Defines for event subscriber argument (\c ui32EventSubscriber) have the format:
92 //! - \ti_code{EVENT_O_[subscriber_name]}
93 //!
94 //! Defines for event source argument (\c ui32EventSource) must have the
95 //! following format where valid \c event_enum values are found in the
96 //! register description :
97 //! - \ti_code{EVENT_[subscriber_name]_EV_[event_enum]}
98 //!
99 //! Examples of valid defines for \c ui32EventSource:
100 //! - EVENT_CPUIRQSEL30_EV_AUX_TDC_DONE
101 //! - EVENT_RFCSEL9_EV_AUX_COMPA
102 //! - EVENT_GPT0ACAPTSEL_EV_AON_RTC_UPD
103 //!
104 //! \note Each event subscriber can only receive a sub-set of the event sources!
105 //!
106 //! \note Switching the event source is not glitch free, so it is imperative
107 //! that the subscriber is disabled for interrupts when switching the event
108 //! source. The behavior is undefined if not disabled.
109 //!
110 //! \param ui32EventSubscriber is the \b configurable event subscriber to receive the event.
111 //! Click the event subscriber to see the list of valid event sources in the
112 //! register description.
113 //! - EVENT_O_CPUIRQSEL30  : System CPU interrupt 30
114 //! - EVENT_O_RFCSEL9      : RF Core event 9
115 //! - EVENT_O_GPT0ACAPTSEL : GPT 0A capture event
116 //! - EVENT_O_GPT0BCAPTSEL : GPT 0B capture event
117 //! - EVENT_O_GPT1ACAPTSEL : GPT 1A capture event
118 //! - EVENT_O_GPT1BCAPTSEL : GPT 1B capture event
119 //! - EVENT_O_GPT2ACAPTSEL : GPT 2A capture event
120 //! - EVENT_O_GPT2BCAPTSEL : GPT 2B capture event
121 //! - EVENT_O_GPT3ACAPTSEL : GPT 3A capture event
122 //! - EVENT_O_GPT3BCAPTSEL : GPT 3B capture event
123 //! - EVENT_O_UDMACH9SSEL  : uDMA channel 9 single request
124 //! - EVENT_O_UDMACH9BSEL  : uDMA channel 9 burst request
125 //! - EVENT_O_UDMACH10SSEL : uDMA channel 10 single request
126 //! - EVENT_O_UDMACH10BSEL : uDMA channel 10 burst request
127 //! - EVENT_O_UDMACH11SSEL : uDMA channel 11 single request
128 //! - EVENT_O_UDMACH11BSEL : uDMA channel 11 burst request
129 //! - EVENT_O_UDMACH12SSEL : uDMA channel 12 single request
130 //! - EVENT_O_UDMACH12BSEL : uDMA channel 12 burst request
131 //! - EVENT_O_UDMACH14BSEL : uDMA channel 14 single request
132 //! - EVENT_O_AUXSEL0      : AUX
133 //! - EVENT_O_I2SSTMPSEL0  : I2S
134 //! - EVENT_O_FRZSEL0      : Freeze modules (some modules can freeze on CPU Halt)
135 //! \param ui32EventSource is the specific event that must be acted upon.
136 //! - Format: \ti_code{EVENT_[subscriber_name]_EV_[event_enum]} (see explanation above)
137 //!
138 //! \return None
139 //
140 //*****************************************************************************
141 __STATIC_INLINE void
EventRegister(uint32_t ui32EventSubscriber,uint32_t ui32EventSource)142 EventRegister(uint32_t ui32EventSubscriber, uint32_t ui32EventSource)
143 {
144     // Check the arguments.
145     ASSERT(( ui32EventSubscriber == EVENT_O_CPUIRQSEL30  ) ||
146            ( ui32EventSubscriber == EVENT_O_RFCSEL9      ) ||
147            ( ui32EventSubscriber == EVENT_O_GPT0ACAPTSEL ) ||
148            ( ui32EventSubscriber == EVENT_O_GPT0BCAPTSEL ) ||
149            ( ui32EventSubscriber == EVENT_O_GPT1ACAPTSEL ) ||
150            ( ui32EventSubscriber == EVENT_O_GPT1BCAPTSEL ) ||
151            ( ui32EventSubscriber == EVENT_O_GPT2ACAPTSEL ) ||
152            ( ui32EventSubscriber == EVENT_O_GPT2BCAPTSEL ) ||
153            ( ui32EventSubscriber == EVENT_O_GPT3ACAPTSEL ) ||
154            ( ui32EventSubscriber == EVENT_O_GPT3BCAPTSEL ) ||
155            ( ui32EventSubscriber == EVENT_O_UDMACH9SSEL  ) ||
156            ( ui32EventSubscriber == EVENT_O_UDMACH9BSEL  ) ||
157            ( ui32EventSubscriber == EVENT_O_UDMACH10SSEL ) ||
158            ( ui32EventSubscriber == EVENT_O_UDMACH10BSEL ) ||
159            ( ui32EventSubscriber == EVENT_O_UDMACH11SSEL ) ||
160            ( ui32EventSubscriber == EVENT_O_UDMACH11BSEL ) ||
161            ( ui32EventSubscriber == EVENT_O_UDMACH12SSEL ) ||
162            ( ui32EventSubscriber == EVENT_O_UDMACH12BSEL ) ||
163            ( ui32EventSubscriber == EVENT_O_UDMACH14BSEL ) ||
164            ( ui32EventSubscriber == EVENT_O_AUXSEL0      ) ||
165            ( ui32EventSubscriber == EVENT_O_I2SSTMPSEL0  ) ||
166            ( ui32EventSubscriber == EVENT_O_FRZSEL0      ) );
167 
168     // Map the event source to the event subscriber
169     HWREG(EVENT_BASE + ui32EventSubscriber) = ui32EventSource;
170 }
171 
172 //*****************************************************************************
173 //
174 //! \brief Sets software event.
175 //!
176 //! Setting a software event triggers the event if the value was 0 before.
177 //!
178 //! \note The software event must be cleared manually after the event has
179 //! triggered the event subscriber.
180 //!
181 //! \param ui32SwEvent is the software event number.
182 //! - 0 : SW Event 0
183 //! - 1 : SW Event 1
184 //! - 2 : SW Event 2
185 //! - 3 : SW Event 3
186 //!
187 //! \return None
188 //!
189 //! \sa \ref EventSwEventClear()
190 //
191 //*****************************************************************************
192 __STATIC_INLINE void
EventSwEventSet(uint32_t ui32SwEvent)193 EventSwEventSet(uint32_t ui32SwEvent)
194 {
195     // Check the arguments.
196     ASSERT( ui32SwEvent <= 3 );
197 
198     // Each software event is byte accessible
199     HWREGB(EVENT_BASE + EVENT_O_SWEV + ui32SwEvent) = 1;
200 }
201 
202 //*****************************************************************************
203 //
204 //! \brief Clears software event.
205 //!
206 //! \param ui32SwEvent is the software event number.
207 //! - 0 : SW Event 0
208 //! - 1 : SW Event 1
209 //! - 2 : SW Event 2
210 //! - 3 : SW Event 3
211 //!
212 //! \return None
213 //
214 //*****************************************************************************
215 __STATIC_INLINE void
EventSwEventClear(uint32_t ui32SwEvent)216 EventSwEventClear(uint32_t ui32SwEvent)
217 {
218     // Check the arguments.
219     ASSERT( ui32SwEvent <= 3 );
220 
221     // Each software event is byte accessible
222     HWREGB(EVENT_BASE + EVENT_O_SWEV + ui32SwEvent) = 0;
223 }
224 
225 //*****************************************************************************
226 //
227 //! \brief Gets software event status.
228 //!
229 //! \param ui32SwEvent is the software event number.
230 //! - 0 : SW Event 0
231 //! - 1 : SW Event 1
232 //! - 2 : SW Event 2
233 //! - 3 : SW Event 3
234 //!
235 //! \return Returns current value of requested software event.
236 //! - 0 : Software event is de-asserted.
237 //! - 1 : Software event is asserted.
238 //
239 //*****************************************************************************
240 __STATIC_INLINE uint32_t
EventSwEventGet(uint32_t ui32SwEvent)241 EventSwEventGet(uint32_t ui32SwEvent)
242 {
243     // Check the arguments.
244     ASSERT( ui32SwEvent <= 3 );
245 
246     // Each software event is byte accessible
247     return( HWREGB(EVENT_BASE + EVENT_O_SWEV + ui32SwEvent));
248 }
249 
250 //*****************************************************************************
251 //
252 // Mark the end of the C bindings section for C++ compilers.
253 //
254 //*****************************************************************************
255 #ifdef __cplusplus
256 }
257 #endif
258 
259 #endif // __EVENT_H__
260 
261 //*****************************************************************************
262 //
263 //! Close the Doxygen group.
264 //! @}
265 //! @}
266 //
267 //*****************************************************************************
268