1 //-----------------------------------------------------------------------------
2 // Copyright 2012 (c) Silicon Laboratories Inc.
3 //
4 // SPDX-License-Identifier: Zlib
5 //
6 // This siHAL software is provided 'as-is', without any express or implied
7 // warranty. In no event will the authors be held liable for any damages
8 // arising from the use of this software.
9 //
10 // Permission is granted to anyone to use this software for any purpose,
11 // including commercial applications, and to alter it and redistribute it
12 // freely, subject to the following restrictions:
13 //
14 // 1. The origin of this software must not be misrepresented; you must not
15 //    claim that you wrote the original software. If you use this software
16 //    in a product, an acknowledgment in the product documentation would be
17 //    appreciated but is not required.
18 // 2. Altered source versions must be plainly marked as such, and must not be
19 //    misrepresented as being the original software.
20 // 3. This notice may not be removed or altered from any source distribution.
21 //-----------------------------------------------------------------------------
22 //
23 // Script: 0.61
24 // Version: 1
25 
26 #ifndef __SI32_PCA_A_REGISTERS_H__
27 #define __SI32_PCA_A_REGISTERS_H__
28 
29 #include <stdint.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 struct SI32_PCA_A_MODE_Struct
36 {
37    union
38    {
39       struct
40       {
41          // Input Clock Divisor
42          volatile uint32_t CLKDIV: 10;
43          // Input Clock (F<subscript>CLKIN</subscript>) Select
44          volatile uint32_t CLKSEL: 3;
45                   uint32_t reserved0: 19;
46       };
47       volatile uint32_t U32;
48    };
49 };
50 
51 #define SI32_PCA_A_MODE_CLKDIV_MASK  0x000003FF
52 #define SI32_PCA_A_MODE_CLKDIV_SHIFT  0
53 
54 #define SI32_PCA_A_MODE_CLKSEL_MASK  0x00001C00
55 #define SI32_PCA_A_MODE_CLKSEL_SHIFT  10
56 // Set the APB as the input clock (FCLKIN).
57 #define SI32_PCA_A_MODE_CLKSEL_APB_VALUE  0
58 #define SI32_PCA_A_MODE_CLKSEL_APB_U32 \
59    (SI32_PCA_A_MODE_CLKSEL_APB_VALUE << SI32_PCA_A_MODE_CLKSEL_SHIFT)
60 // Set Timer 0 low overflows divided by 2 as the input clock (FCLKIN).
61 #define SI32_PCA_A_MODE_CLKSEL_TIMER0_VALUE  1
62 #define SI32_PCA_A_MODE_CLKSEL_TIMER0_U32 \
63    (SI32_PCA_A_MODE_CLKSEL_TIMER0_VALUE << SI32_PCA_A_MODE_CLKSEL_SHIFT)
64 // Set high-to-low transitions on ECI divided by 2 as the input clock (FCLKIN).
65 #define SI32_PCA_A_MODE_CLKSEL_HL_ECI_VALUE  2
66 #define SI32_PCA_A_MODE_CLKSEL_HL_ECI_U32 \
67    (SI32_PCA_A_MODE_CLKSEL_HL_ECI_VALUE << SI32_PCA_A_MODE_CLKSEL_SHIFT)
68 // Set the external oscillator module output (EXTOSCn) divided by 2 as the input
69 // clock (FCLKIN).
70 #define SI32_PCA_A_MODE_CLKSEL_EXTOSCN_VALUE  3
71 #define SI32_PCA_A_MODE_CLKSEL_EXTOSCN_U32 \
72    (SI32_PCA_A_MODE_CLKSEL_EXTOSCN_VALUE << SI32_PCA_A_MODE_CLKSEL_SHIFT)
73 // Set ECI transitions divided by 2 as the input clock (FCLKIN).
74 #define SI32_PCA_A_MODE_CLKSEL_ECI_VALUE  4
75 #define SI32_PCA_A_MODE_CLKSEL_ECI_U32 \
76    (SI32_PCA_A_MODE_CLKSEL_ECI_VALUE << SI32_PCA_A_MODE_CLKSEL_SHIFT)
77 
78 
79 
80 struct SI32_PCA_A_CONTROL_Struct
81 {
82    union
83    {
84       struct
85       {
86          // PCA Counter Overflow/Limit Interrupt Enable
87          volatile uint32_t OVFIEN: 1;
88                   uint32_t reserved0: 5;
89          // PCA Debug Mode
90          volatile uint32_t DBGMD: 1;
91                   uint32_t reserved1: 14;
92          // Clock Divider Output State
93          volatile uint32_t DIVST: 1;
94          // Current Clock Divider Count
95          volatile uint32_t DIV: 10;
96       };
97       volatile uint32_t U32;
98    };
99 };
100 
101 #define SI32_PCA_A_CONTROL_OVFIEN_MASK  0x00000001
102 #define SI32_PCA_A_CONTROL_OVFIEN_SHIFT  0
103 // Disable the PCA counter overflow/limit event interrupt.
104 #define SI32_PCA_A_CONTROL_OVFIEN_DISABLED_VALUE  0
105 #define SI32_PCA_A_CONTROL_OVFIEN_DISABLED_U32 \
106    (SI32_PCA_A_CONTROL_OVFIEN_DISABLED_VALUE << SI32_PCA_A_CONTROL_OVFIEN_SHIFT)
107 // Enable the PCA counter overflow/limit event interrupt.
108 #define SI32_PCA_A_CONTROL_OVFIEN_ENABLED_VALUE  1
109 #define SI32_PCA_A_CONTROL_OVFIEN_ENABLED_U32 \
110    (SI32_PCA_A_CONTROL_OVFIEN_ENABLED_VALUE << SI32_PCA_A_CONTROL_OVFIEN_SHIFT)
111 
112 #define SI32_PCA_A_CONTROL_DBGMD_MASK  0x00000040
113 #define SI32_PCA_A_CONTROL_DBGMD_SHIFT  6
114 // A debug breakpoint will cause the PCA to halt.
115 #define SI32_PCA_A_CONTROL_DBGMD_HALT_VALUE  0
116 #define SI32_PCA_A_CONTROL_DBGMD_HALT_U32 \
117    (SI32_PCA_A_CONTROL_DBGMD_HALT_VALUE << SI32_PCA_A_CONTROL_DBGMD_SHIFT)
118 // The PCA will continue to operate while the core is halted in debug mode.
119 #define SI32_PCA_A_CONTROL_DBGMD_RUN_VALUE  1
120 #define SI32_PCA_A_CONTROL_DBGMD_RUN_U32 \
121    (SI32_PCA_A_CONTROL_DBGMD_RUN_VALUE << SI32_PCA_A_CONTROL_DBGMD_SHIFT)
122 
123 #define SI32_PCA_A_CONTROL_DIVST_MASK  0x00200000
124 #define SI32_PCA_A_CONTROL_DIVST_SHIFT  21
125 // The clock divider is currently in the first half-cycle.
126 #define SI32_PCA_A_CONTROL_DIVST_OUTPUT_HIGH_VALUE  0
127 #define SI32_PCA_A_CONTROL_DIVST_OUTPUT_HIGH_U32 \
128    (SI32_PCA_A_CONTROL_DIVST_OUTPUT_HIGH_VALUE << SI32_PCA_A_CONTROL_DIVST_SHIFT)
129 // The clock divider is currently in the second half-cycle.
130 #define SI32_PCA_A_CONTROL_DIVST_OUTPUT_LOW_VALUE  1
131 #define SI32_PCA_A_CONTROL_DIVST_OUTPUT_LOW_U32 \
132    (SI32_PCA_A_CONTROL_DIVST_OUTPUT_LOW_VALUE << SI32_PCA_A_CONTROL_DIVST_SHIFT)
133 
134 #define SI32_PCA_A_CONTROL_DIV_MASK  0xFFC00000
135 #define SI32_PCA_A_CONTROL_DIV_SHIFT  22
136 
137 
138 
139 struct SI32_PCA_A_STATUS_Struct
140 {
141    union
142    {
143       struct
144       {
145          // Channel 0 Capture/Compare Interrupt Flag
146          volatile uint32_t C0CCI: 1;
147          // Channel 1 Capture/Compare Interrupt Flag
148          volatile uint32_t C1CCI: 1;
149                   uint32_t reserved0: 4;
150          // Counter/Timer Run
151          volatile uint32_t RUN: 1;
152          // Counter/Timer Overflow/Limit Interrupt Flag
153          volatile uint32_t OVFI: 1;
154                   uint32_t reserved1: 2;
155          // Channel 0 Intermediate Overflow Interrupt Flag
156          volatile uint32_t C0IOVFI: 1;
157          // Channel 1 Intermediate Overflow Interrupt Flag
158          volatile uint32_t C1IOVFI: 1;
159                   uint32_t reserved2: 20;
160       };
161       volatile uint32_t U32;
162    };
163 };
164 
165 #define SI32_PCA_A_STATUS_C0CCI_MASK  0x00000001
166 #define SI32_PCA_A_STATUS_C0CCI_SHIFT  0
167 // A Channel 0 match or capture event did not occur.
168 #define SI32_PCA_A_STATUS_C0CCI_NOT_SET_VALUE  0
169 #define SI32_PCA_A_STATUS_C0CCI_NOT_SET_U32 \
170    (SI32_PCA_A_STATUS_C0CCI_NOT_SET_VALUE << SI32_PCA_A_STATUS_C0CCI_SHIFT)
171 // A Channel 0 match or capture event occurred.
172 #define SI32_PCA_A_STATUS_C0CCI_SET_VALUE  1
173 #define SI32_PCA_A_STATUS_C0CCI_SET_U32 \
174    (SI32_PCA_A_STATUS_C0CCI_SET_VALUE << SI32_PCA_A_STATUS_C0CCI_SHIFT)
175 
176 #define SI32_PCA_A_STATUS_C1CCI_MASK  0x00000002
177 #define SI32_PCA_A_STATUS_C1CCI_SHIFT  1
178 // A Channel 1 match or capture event did not occur.
179 #define SI32_PCA_A_STATUS_C1CCI_NOT_SET_VALUE  0
180 #define SI32_PCA_A_STATUS_C1CCI_NOT_SET_U32 \
181    (SI32_PCA_A_STATUS_C1CCI_NOT_SET_VALUE << SI32_PCA_A_STATUS_C1CCI_SHIFT)
182 // A Channel 1 match or capture event occurred.
183 #define SI32_PCA_A_STATUS_C1CCI_SET_VALUE  1
184 #define SI32_PCA_A_STATUS_C1CCI_SET_U32 \
185    (SI32_PCA_A_STATUS_C1CCI_SET_VALUE << SI32_PCA_A_STATUS_C1CCI_SHIFT)
186 
187 #define SI32_PCA_A_STATUS_RUN_MASK  0x00000040
188 #define SI32_PCA_A_STATUS_RUN_SHIFT  6
189 // Stop the PCA Counter/Timer.
190 #define SI32_PCA_A_STATUS_RUN_STOP_VALUE  0
191 #define SI32_PCA_A_STATUS_RUN_STOP_U32 \
192    (SI32_PCA_A_STATUS_RUN_STOP_VALUE << SI32_PCA_A_STATUS_RUN_SHIFT)
193 // Start the PCA Counter/Timer.
194 #define SI32_PCA_A_STATUS_RUN_START_VALUE  1
195 #define SI32_PCA_A_STATUS_RUN_START_U32 \
196    (SI32_PCA_A_STATUS_RUN_START_VALUE << SI32_PCA_A_STATUS_RUN_SHIFT)
197 
198 #define SI32_PCA_A_STATUS_OVFI_MASK  0x00000080
199 #define SI32_PCA_A_STATUS_OVFI_SHIFT  7
200 // A PCA Counter/Timer overflow/limit event did not occur.
201 #define SI32_PCA_A_STATUS_OVFI_NOT_SET_VALUE  0
202 #define SI32_PCA_A_STATUS_OVFI_NOT_SET_U32 \
203    (SI32_PCA_A_STATUS_OVFI_NOT_SET_VALUE << SI32_PCA_A_STATUS_OVFI_SHIFT)
204 // A PCA Counter/Timer overflow/limit event occurred.
205 #define SI32_PCA_A_STATUS_OVFI_SET_VALUE  1
206 #define SI32_PCA_A_STATUS_OVFI_SET_U32 \
207    (SI32_PCA_A_STATUS_OVFI_SET_VALUE << SI32_PCA_A_STATUS_OVFI_SHIFT)
208 
209 #define SI32_PCA_A_STATUS_C0IOVFI_MASK  0x00000400
210 #define SI32_PCA_A_STATUS_C0IOVFI_SHIFT  10
211 // Channel 0 did not count past the channel n-bit mode limit.
212 #define SI32_PCA_A_STATUS_C0IOVFI_NOT_SET_VALUE  0
213 #define SI32_PCA_A_STATUS_C0IOVFI_NOT_SET_U32 \
214    (SI32_PCA_A_STATUS_C0IOVFI_NOT_SET_VALUE << SI32_PCA_A_STATUS_C0IOVFI_SHIFT)
215 // Channel 0 counted past the channel n-bit mode limit.
216 #define SI32_PCA_A_STATUS_C0IOVFI_SET_VALUE  1
217 #define SI32_PCA_A_STATUS_C0IOVFI_SET_U32 \
218    (SI32_PCA_A_STATUS_C0IOVFI_SET_VALUE << SI32_PCA_A_STATUS_C0IOVFI_SHIFT)
219 
220 #define SI32_PCA_A_STATUS_C1IOVFI_MASK  0x00000800
221 #define SI32_PCA_A_STATUS_C1IOVFI_SHIFT  11
222 // Channel 1 did not count past the channel n-bit mode limit.
223 #define SI32_PCA_A_STATUS_C1IOVFI_NOT_SET_VALUE  0
224 #define SI32_PCA_A_STATUS_C1IOVFI_NOT_SET_U32 \
225    (SI32_PCA_A_STATUS_C1IOVFI_NOT_SET_VALUE << SI32_PCA_A_STATUS_C1IOVFI_SHIFT)
226 // Channel 1 counted past the channel n-bit mode limit.
227 #define SI32_PCA_A_STATUS_C1IOVFI_SET_VALUE  1
228 #define SI32_PCA_A_STATUS_C1IOVFI_SET_U32 \
229    (SI32_PCA_A_STATUS_C1IOVFI_SET_VALUE << SI32_PCA_A_STATUS_C1IOVFI_SHIFT)
230 
231 
232 
233 struct SI32_PCA_A_COUNTER_Struct
234 {
235    union
236    {
237       struct
238       {
239          // Counter/Timer
240          volatile uint16_t COUNTER_BITS;
241                   uint32_t reserved0: 16;
242       };
243       volatile uint32_t U32;
244    };
245 };
246 
247 #define SI32_PCA_A_COUNTER_COUNTER_MASK  0x0000FFFF
248 #define SI32_PCA_A_COUNTER_COUNTER_SHIFT  0
249 
250 
251 
252 struct SI32_PCA_A_LIMIT_Struct
253 {
254    union
255    {
256       struct
257       {
258          // Upper Limit
259          volatile uint16_t LIMIT_BITS;
260                   uint32_t reserved0: 16;
261       };
262       volatile uint32_t U32;
263    };
264 };
265 
266 #define SI32_PCA_A_LIMIT_LIMIT_MASK  0x0000FFFF
267 #define SI32_PCA_A_LIMIT_LIMIT_SHIFT  0
268 
269 
270 
271 typedef struct SI32_PCA_A_Struct
272 {
273    struct SI32_PCA_A_MODE_Struct                   MODE           ; // Base Address + 0x0
274    uint32_t                                        reserved0;
275    uint32_t                                        reserved1;
276    uint32_t                                        reserved2;
277    struct SI32_PCA_A_CONTROL_Struct                CONTROL        ; // Base Address + 0x10
278    volatile uint32_t                               CONTROL_SET;
279    volatile uint32_t                               CONTROL_CLR;
280    uint32_t                                        reserved3;
281    struct SI32_PCA_A_STATUS_Struct                 STATUS         ; // Base Address + 0x20
282    volatile uint32_t                               STATUS_SET;
283    volatile uint32_t                               STATUS_CLR;
284    uint32_t                                        reserved4;
285    struct SI32_PCA_A_COUNTER_Struct                COUNTER        ; // Base Address + 0x30
286    uint32_t                                        reserved5;
287    uint32_t                                        reserved6;
288    uint32_t                                        reserved7;
289    struct SI32_PCA_A_LIMIT_Struct                  LIMIT          ; // Base Address + 0x40
290    uint32_t                                        reserved8;
291    uint32_t                                        reserved9;
292    uint32_t                                        reserved10;
293 } SI32_PCA_A_Type;
294 
295 #ifdef __cplusplus
296 }
297 #endif
298 
299 #endif // __SI32_PCA_A_REGISTERS_H__
300 
301 //-eof--------------------------------------------------------------------------
302 
303