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_EPCACH_A_REGISTERS_H__ 27 #define __SI32_EPCACH_A_REGISTERS_H__ 28 29 #include <stdint.h> 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 struct SI32_EPCACH_A_MODE_Struct 36 { 37 union 38 { 39 struct 40 { 41 // Channel Output Function Select 42 volatile uint32_t COSEL: 2; 43 // PWM N-Bit Mode 44 volatile uint32_t PWMMD: 4; 45 // Differential Signal Generator Enable 46 volatile uint32_t DIFGEN: 1; 47 uint32_t reserved0: 1; 48 // Channel Operating Mode 49 volatile uint32_t CMD: 3; 50 uint32_t reserved1: 21; 51 }; 52 volatile uint32_t U32; 53 }; 54 }; 55 56 #define SI32_EPCACH_A_MODE_COSEL_MASK 0x00000003 57 #define SI32_EPCACH_A_MODE_COSEL_SHIFT 0 58 // Toggle the channel output at the next capture/compare, overflow, or intermediate 59 // event. 60 #define SI32_EPCACH_A_MODE_COSEL_TOGGLE_OUTPUT_VALUE 0 61 #define SI32_EPCACH_A_MODE_COSEL_TOGGLE_OUTPUT_U32 \ 62 (SI32_EPCACH_A_MODE_COSEL_TOGGLE_OUTPUT_VALUE << SI32_EPCACH_A_MODE_COSEL_SHIFT) 63 // Set the channel output at the next capture/compare, overflow, or intermediate 64 // event. 65 #define SI32_EPCACH_A_MODE_COSEL_SET_OUTPUT_VALUE 1 66 #define SI32_EPCACH_A_MODE_COSEL_SET_OUTPUT_U32 \ 67 (SI32_EPCACH_A_MODE_COSEL_SET_OUTPUT_VALUE << SI32_EPCACH_A_MODE_COSEL_SHIFT) 68 // Clear the output at the next capture/compare, overflow, or intermediate event. 69 #define SI32_EPCACH_A_MODE_COSEL_CLEAR_OUTPUT_VALUE 2 70 #define SI32_EPCACH_A_MODE_COSEL_CLEAR_OUTPUT_U32 \ 71 (SI32_EPCACH_A_MODE_COSEL_CLEAR_OUTPUT_VALUE << SI32_EPCACH_A_MODE_COSEL_SHIFT) 72 // Capture/Compare, overflow, or intermediate events do not control the output 73 // state. 74 #define SI32_EPCACH_A_MODE_COSEL_NO_CHANGE_VALUE 3 75 #define SI32_EPCACH_A_MODE_COSEL_NO_CHANGE_U32 \ 76 (SI32_EPCACH_A_MODE_COSEL_NO_CHANGE_VALUE << SI32_EPCACH_A_MODE_COSEL_SHIFT) 77 78 #define SI32_EPCACH_A_MODE_PWMMD_MASK 0x0000003C 79 #define SI32_EPCACH_A_MODE_PWMMD_SHIFT 2 80 81 #define SI32_EPCACH_A_MODE_DIFGEN_MASK 0x00000040 82 #define SI32_EPCACH_A_MODE_DIFGEN_SHIFT 6 83 // Disable the differential signal generator. The channel will output a single non- 84 // differential output. 85 #define SI32_EPCACH_A_MODE_DIFGEN_DISABLED_VALUE 0 86 #define SI32_EPCACH_A_MODE_DIFGEN_DISABLED_U32 \ 87 (SI32_EPCACH_A_MODE_DIFGEN_DISABLED_VALUE << SI32_EPCACH_A_MODE_DIFGEN_SHIFT) 88 // Enable the differential signal generator. The channel will output two 89 // differential outputs: X Phase (XPH) and Y Phase (YPH). 90 #define SI32_EPCACH_A_MODE_DIFGEN_ENABLED_VALUE 1 91 #define SI32_EPCACH_A_MODE_DIFGEN_ENABLED_U32 \ 92 (SI32_EPCACH_A_MODE_DIFGEN_ENABLED_VALUE << SI32_EPCACH_A_MODE_DIFGEN_SHIFT) 93 94 #define SI32_EPCACH_A_MODE_CMD_MASK 0x00000700 95 #define SI32_EPCACH_A_MODE_CMD_SHIFT 8 96 // Configure the channel for edge-aligned PWM mode. 97 #define SI32_EPCACH_A_MODE_CMD_EDGE_PWM_VALUE 0 98 #define SI32_EPCACH_A_MODE_CMD_EDGE_PWM_U32 \ 99 (SI32_EPCACH_A_MODE_CMD_EDGE_PWM_VALUE << SI32_EPCACH_A_MODE_CMD_SHIFT) 100 // Configure the channel for center-aligned PWM mode. 101 #define SI32_EPCACH_A_MODE_CMD_CENTER_ALIGNED_PWM_VALUE 1 102 #define SI32_EPCACH_A_MODE_CMD_CENTER_ALIGNED_PWM_U32 \ 103 (SI32_EPCACH_A_MODE_CMD_CENTER_ALIGNED_PWM_VALUE << SI32_EPCACH_A_MODE_CMD_SHIFT) 104 // Configure the channel for high-frequency/square-wave mode. 105 #define SI32_EPCACH_A_MODE_CMD_HF_SQUARE_WAVE_VALUE 2 106 #define SI32_EPCACH_A_MODE_CMD_HF_SQUARE_WAVE_U32 \ 107 (SI32_EPCACH_A_MODE_CMD_HF_SQUARE_WAVE_VALUE << SI32_EPCACH_A_MODE_CMD_SHIFT) 108 // Configure the channel for timer/capture mode. 109 #define SI32_EPCACH_A_MODE_CMD_TIMER_CAPTURE_VALUE 3 110 #define SI32_EPCACH_A_MODE_CMD_TIMER_CAPTURE_U32 \ 111 (SI32_EPCACH_A_MODE_CMD_TIMER_CAPTURE_VALUE << SI32_EPCACH_A_MODE_CMD_SHIFT) 112 // Configure the channel for n-bit edge-aligned PWM mode. 113 #define SI32_EPCACH_A_MODE_CMD_N_BIT_PWM_VALUE 4 114 #define SI32_EPCACH_A_MODE_CMD_N_BIT_PWM_U32 \ 115 (SI32_EPCACH_A_MODE_CMD_N_BIT_PWM_VALUE << SI32_EPCACH_A_MODE_CMD_SHIFT) 116 117 118 119 struct SI32_EPCACH_A_CONTROL_Struct 120 { 121 union 122 { 123 struct 124 { 125 // Channel Output State 126 volatile uint32_t COUTST: 1; 127 // Positive Edge Input Capture Enable 128 volatile uint32_t CPCAPEN: 1; 129 // Negative Edge Input Capture Enable 130 volatile uint32_t CNCAPEN: 1; 131 // Channel Register Update Complete Flag 132 volatile uint32_t CUPDCF: 1; 133 uint32_t reserved0: 1; 134 // Differential Y Phase State 135 volatile uint32_t YPHST: 1; 136 // Active Channel Select 137 volatile uint32_t ACTIVEPH: 1; 138 // Differential X Phase State 139 volatile uint32_t XPHST: 1; 140 // Capture/Compare Interrupt Enable 141 volatile uint32_t CCIEN: 1; 142 // Capture/Compare DMA Request Enable 143 volatile uint32_t CCDEN: 1; 144 // Capture/Compare Synchronization Signal Enable 145 volatile uint32_t CCSEN: 1; 146 // Intermediate Overflow Interrupt Enable 147 volatile uint32_t CIOVFIEN: 1; 148 // Intermediate Overflow DMA Request Enable 149 volatile uint32_t CIOVFDEN: 1; 150 // Intermediate Overflow Synchronization Signal Enable 151 volatile uint32_t CIOVFSEN: 1; 152 uint32_t reserved1: 18; 153 }; 154 volatile uint32_t U32; 155 }; 156 }; 157 158 #define SI32_EPCACH_A_CONTROL_COUTST_MASK 0x00000001 159 #define SI32_EPCACH_A_CONTROL_COUTST_SHIFT 0 160 // The channel output state is low. 161 #define SI32_EPCACH_A_CONTROL_COUTST_LOW_VALUE 0 162 #define SI32_EPCACH_A_CONTROL_COUTST_LOW_U32 \ 163 (SI32_EPCACH_A_CONTROL_COUTST_LOW_VALUE << SI32_EPCACH_A_CONTROL_COUTST_SHIFT) 164 // The channel output state is high. 165 #define SI32_EPCACH_A_CONTROL_COUTST_HIGH_VALUE 1 166 #define SI32_EPCACH_A_CONTROL_COUTST_HIGH_U32 \ 167 (SI32_EPCACH_A_CONTROL_COUTST_HIGH_VALUE << SI32_EPCACH_A_CONTROL_COUTST_SHIFT) 168 169 #define SI32_EPCACH_A_CONTROL_CPCAPEN_MASK 0x00000002 170 #define SI32_EPCACH_A_CONTROL_CPCAPEN_SHIFT 1 171 // Disable positive-edge input capture. 172 #define SI32_EPCACH_A_CONTROL_CPCAPEN_DISABLED_VALUE 0 173 #define SI32_EPCACH_A_CONTROL_CPCAPEN_DISABLED_U32 \ 174 (SI32_EPCACH_A_CONTROL_CPCAPEN_DISABLED_VALUE << SI32_EPCACH_A_CONTROL_CPCAPEN_SHIFT) 175 // Enable positive-edge input capture. 176 #define SI32_EPCACH_A_CONTROL_CPCAPEN_ENABLED_VALUE 1 177 #define SI32_EPCACH_A_CONTROL_CPCAPEN_ENABLED_U32 \ 178 (SI32_EPCACH_A_CONTROL_CPCAPEN_ENABLED_VALUE << SI32_EPCACH_A_CONTROL_CPCAPEN_SHIFT) 179 180 #define SI32_EPCACH_A_CONTROL_CNCAPEN_MASK 0x00000004 181 #define SI32_EPCACH_A_CONTROL_CNCAPEN_SHIFT 2 182 // Disable negative-edge input capture. 183 #define SI32_EPCACH_A_CONTROL_CNCAPEN_DISABLED_VALUE 0 184 #define SI32_EPCACH_A_CONTROL_CNCAPEN_DISABLED_U32 \ 185 (SI32_EPCACH_A_CONTROL_CNCAPEN_DISABLED_VALUE << SI32_EPCACH_A_CONTROL_CNCAPEN_SHIFT) 186 // Enable negative-edge input capture. 187 #define SI32_EPCACH_A_CONTROL_CNCAPEN_ENABLED_VALUE 1 188 #define SI32_EPCACH_A_CONTROL_CNCAPEN_ENABLED_U32 \ 189 (SI32_EPCACH_A_CONTROL_CNCAPEN_ENABLED_VALUE << SI32_EPCACH_A_CONTROL_CNCAPEN_SHIFT) 190 191 #define SI32_EPCACH_A_CONTROL_CUPDCF_MASK 0x00000008 192 #define SI32_EPCACH_A_CONTROL_CUPDCF_SHIFT 3 193 // A EPCA channel register update completed or is not pending. 194 #define SI32_EPCACH_A_CONTROL_CUPDCF_NOT_SET_VALUE 0 195 #define SI32_EPCACH_A_CONTROL_CUPDCF_NOT_SET_U32 \ 196 (SI32_EPCACH_A_CONTROL_CUPDCF_NOT_SET_VALUE << SI32_EPCACH_A_CONTROL_CUPDCF_SHIFT) 197 // A EPCA channel register update has not completed and is still pending. 198 #define SI32_EPCACH_A_CONTROL_CUPDCF_SET_VALUE 1 199 #define SI32_EPCACH_A_CONTROL_CUPDCF_SET_U32 \ 200 (SI32_EPCACH_A_CONTROL_CUPDCF_SET_VALUE << SI32_EPCACH_A_CONTROL_CUPDCF_SHIFT) 201 202 #define SI32_EPCACH_A_CONTROL_YPHST_MASK 0x00000020 203 #define SI32_EPCACH_A_CONTROL_YPHST_SHIFT 5 204 // Set the Y Phase output state to low. 205 #define SI32_EPCACH_A_CONTROL_YPHST_LOW_VALUE 0 206 #define SI32_EPCACH_A_CONTROL_YPHST_LOW_U32 \ 207 (SI32_EPCACH_A_CONTROL_YPHST_LOW_VALUE << SI32_EPCACH_A_CONTROL_YPHST_SHIFT) 208 // Set the Y Phase output state to high. 209 #define SI32_EPCACH_A_CONTROL_YPHST_HIGH_VALUE 1 210 #define SI32_EPCACH_A_CONTROL_YPHST_HIGH_U32 \ 211 (SI32_EPCACH_A_CONTROL_YPHST_HIGH_VALUE << SI32_EPCACH_A_CONTROL_YPHST_SHIFT) 212 213 #define SI32_EPCACH_A_CONTROL_ACTIVEPH_MASK 0x00000040 214 #define SI32_EPCACH_A_CONTROL_ACTIVEPH_SHIFT 6 215 // The Y Phase is active and X Phase is inactive. 216 #define SI32_EPCACH_A_CONTROL_ACTIVEPH_YACTIVE_VALUE 0 217 #define SI32_EPCACH_A_CONTROL_ACTIVEPH_YACTIVE_U32 \ 218 (SI32_EPCACH_A_CONTROL_ACTIVEPH_YACTIVE_VALUE << SI32_EPCACH_A_CONTROL_ACTIVEPH_SHIFT) 219 // The X Phase is active and Y Phase is inactive. 220 #define SI32_EPCACH_A_CONTROL_ACTIVEPH_XACTIVE_VALUE 1 221 #define SI32_EPCACH_A_CONTROL_ACTIVEPH_XACTIVE_U32 \ 222 (SI32_EPCACH_A_CONTROL_ACTIVEPH_XACTIVE_VALUE << SI32_EPCACH_A_CONTROL_ACTIVEPH_SHIFT) 223 224 #define SI32_EPCACH_A_CONTROL_XPHST_MASK 0x00000080 225 #define SI32_EPCACH_A_CONTROL_XPHST_SHIFT 7 226 // Set the X Phase output state to low. 227 #define SI32_EPCACH_A_CONTROL_XPHST_LOW_VALUE 0 228 #define SI32_EPCACH_A_CONTROL_XPHST_LOW_U32 \ 229 (SI32_EPCACH_A_CONTROL_XPHST_LOW_VALUE << SI32_EPCACH_A_CONTROL_XPHST_SHIFT) 230 // Set the X Phase output state to high. 231 #define SI32_EPCACH_A_CONTROL_XPHST_HIGH_VALUE 1 232 #define SI32_EPCACH_A_CONTROL_XPHST_HIGH_U32 \ 233 (SI32_EPCACH_A_CONTROL_XPHST_HIGH_VALUE << SI32_EPCACH_A_CONTROL_XPHST_SHIFT) 234 235 #define SI32_EPCACH_A_CONTROL_CCIEN_MASK 0x00000100 236 #define SI32_EPCACH_A_CONTROL_CCIEN_SHIFT 8 237 // Disable the channel capture/compare interrupt. 238 #define SI32_EPCACH_A_CONTROL_CCIEN_DISABLED_VALUE 0 239 #define SI32_EPCACH_A_CONTROL_CCIEN_DISABLED_U32 \ 240 (SI32_EPCACH_A_CONTROL_CCIEN_DISABLED_VALUE << SI32_EPCACH_A_CONTROL_CCIEN_SHIFT) 241 // Enable the channel capture/compare interrupt. 242 #define SI32_EPCACH_A_CONTROL_CCIEN_ENABLED_VALUE 1 243 #define SI32_EPCACH_A_CONTROL_CCIEN_ENABLED_U32 \ 244 (SI32_EPCACH_A_CONTROL_CCIEN_ENABLED_VALUE << SI32_EPCACH_A_CONTROL_CCIEN_SHIFT) 245 246 #define SI32_EPCACH_A_CONTROL_CCDEN_MASK 0x00000200 247 #define SI32_EPCACH_A_CONTROL_CCDEN_SHIFT 9 248 // Do not request DMA data when a channel capture/compare event occurs. 249 #define SI32_EPCACH_A_CONTROL_CCDEN_DISABLED_VALUE 0 250 #define SI32_EPCACH_A_CONTROL_CCDEN_DISABLED_U32 \ 251 (SI32_EPCACH_A_CONTROL_CCDEN_DISABLED_VALUE << SI32_EPCACH_A_CONTROL_CCDEN_SHIFT) 252 // Request DMA data when a channel capture/compare event occurs. 253 #define SI32_EPCACH_A_CONTROL_CCDEN_ENABLED_VALUE 1 254 #define SI32_EPCACH_A_CONTROL_CCDEN_ENABLED_U32 \ 255 (SI32_EPCACH_A_CONTROL_CCDEN_ENABLED_VALUE << SI32_EPCACH_A_CONTROL_CCDEN_SHIFT) 256 257 #define SI32_EPCACH_A_CONTROL_CCSEN_MASK 0x00000400 258 #define SI32_EPCACH_A_CONTROL_CCSEN_SHIFT 10 259 // Do not send a synchronization signal when a channel capture/compare event 260 // occurs. 261 #define SI32_EPCACH_A_CONTROL_CCSEN_DISABLED_VALUE 0 262 #define SI32_EPCACH_A_CONTROL_CCSEN_DISABLED_U32 \ 263 (SI32_EPCACH_A_CONTROL_CCSEN_DISABLED_VALUE << SI32_EPCACH_A_CONTROL_CCSEN_SHIFT) 264 // Send a synchronization signal when a channel capture/compare event occurs. 265 #define SI32_EPCACH_A_CONTROL_CCSEN_ENABLED_VALUE 1 266 #define SI32_EPCACH_A_CONTROL_CCSEN_ENABLED_U32 \ 267 (SI32_EPCACH_A_CONTROL_CCSEN_ENABLED_VALUE << SI32_EPCACH_A_CONTROL_CCSEN_SHIFT) 268 269 #define SI32_EPCACH_A_CONTROL_CIOVFIEN_MASK 0x00000800 270 #define SI32_EPCACH_A_CONTROL_CIOVFIEN_SHIFT 11 271 // Disable the channel intermediate overflow interrupt. 272 #define SI32_EPCACH_A_CONTROL_CIOVFIEN_DISABLED_VALUE 0 273 #define SI32_EPCACH_A_CONTROL_CIOVFIEN_DISABLED_U32 \ 274 (SI32_EPCACH_A_CONTROL_CIOVFIEN_DISABLED_VALUE << SI32_EPCACH_A_CONTROL_CIOVFIEN_SHIFT) 275 // Enable the channel intermediate overflow interrupt. 276 #define SI32_EPCACH_A_CONTROL_CIOVFIEN_ENABLED_VALUE 1 277 #define SI32_EPCACH_A_CONTROL_CIOVFIEN_ENABLED_U32 \ 278 (SI32_EPCACH_A_CONTROL_CIOVFIEN_ENABLED_VALUE << SI32_EPCACH_A_CONTROL_CIOVFIEN_SHIFT) 279 280 #define SI32_EPCACH_A_CONTROL_CIOVFDEN_MASK 0x00001000 281 #define SI32_EPCACH_A_CONTROL_CIOVFDEN_SHIFT 12 282 // Do not request DMA data when a channel intermediate overflow event occurs. 283 #define SI32_EPCACH_A_CONTROL_CIOVFDEN_DISABLED_VALUE 0 284 #define SI32_EPCACH_A_CONTROL_CIOVFDEN_DISABLED_U32 \ 285 (SI32_EPCACH_A_CONTROL_CIOVFDEN_DISABLED_VALUE << SI32_EPCACH_A_CONTROL_CIOVFDEN_SHIFT) 286 // Request DMA data when a channel intermediate overflow event occurs. 287 #define SI32_EPCACH_A_CONTROL_CIOVFDEN_ENABLED_VALUE 1 288 #define SI32_EPCACH_A_CONTROL_CIOVFDEN_ENABLED_U32 \ 289 (SI32_EPCACH_A_CONTROL_CIOVFDEN_ENABLED_VALUE << SI32_EPCACH_A_CONTROL_CIOVFDEN_SHIFT) 290 291 #define SI32_EPCACH_A_CONTROL_CIOVFSEN_MASK 0x00002000 292 #define SI32_EPCACH_A_CONTROL_CIOVFSEN_SHIFT 13 293 // Do not send a synchronization signal when a channel intermediate overflow event 294 // occurs. 295 #define SI32_EPCACH_A_CONTROL_CIOVFSEN_DISABLED_VALUE 0 296 #define SI32_EPCACH_A_CONTROL_CIOVFSEN_DISABLED_U32 \ 297 (SI32_EPCACH_A_CONTROL_CIOVFSEN_DISABLED_VALUE << SI32_EPCACH_A_CONTROL_CIOVFSEN_SHIFT) 298 // Send a synchronization signal when a channel intermediate overflow occurs. 299 #define SI32_EPCACH_A_CONTROL_CIOVFSEN_ENABLED_VALUE 1 300 #define SI32_EPCACH_A_CONTROL_CIOVFSEN_ENABLED_U32 \ 301 (SI32_EPCACH_A_CONTROL_CIOVFSEN_ENABLED_VALUE << SI32_EPCACH_A_CONTROL_CIOVFSEN_SHIFT) 302 303 304 305 struct SI32_EPCACH_A_CCAPV_Struct 306 { 307 union 308 { 309 struct 310 { 311 // Channel Compare Value 312 volatile uint32_t CCAPV_BITS: 18; 313 uint32_t reserved0: 14; 314 }; 315 volatile uint32_t U32; 316 }; 317 }; 318 319 #define SI32_EPCACH_A_CCAPV_CCAPV_MASK 0x0003FFFF 320 #define SI32_EPCACH_A_CCAPV_CCAPV_SHIFT 0 321 322 323 324 struct SI32_EPCACH_A_CCAPVUPD_Struct 325 { 326 union 327 { 328 struct 329 { 330 // Channel Compare Update Value 331 volatile uint32_t CCAPVUPD_BITS: 18; 332 uint32_t reserved0: 14; 333 }; 334 volatile uint32_t U32; 335 }; 336 }; 337 338 #define SI32_EPCACH_A_CCAPVUPD_CCAPVUPD_MASK 0x0003FFFF 339 #define SI32_EPCACH_A_CCAPVUPD_CCAPVUPD_SHIFT 0 340 341 342 343 typedef struct SI32_EPCACH_A_Struct 344 { 345 struct SI32_EPCACH_A_MODE_Struct MODE ; // Base Address + 0x0 346 uint32_t reserved0; 347 uint32_t reserved1; 348 uint32_t reserved2; 349 struct SI32_EPCACH_A_CONTROL_Struct CONTROL ; // Base Address + 0x10 350 volatile uint32_t CONTROL_SET; 351 volatile uint32_t CONTROL_CLR; 352 uint32_t reserved3; 353 struct SI32_EPCACH_A_CCAPV_Struct CCAPV ; // Base Address + 0x20 354 uint32_t reserved4; 355 uint32_t reserved5; 356 uint32_t reserved6; 357 struct SI32_EPCACH_A_CCAPVUPD_Struct CCAPVUPD ; // Base Address + 0x30 358 uint32_t reserved7; 359 uint32_t reserved8; 360 uint32_t reserved9; 361 } SI32_EPCACH_A_Type; 362 363 #ifdef __cplusplus 364 } 365 #endif 366 367 #endif // __SI32_EPCACH_A_REGISTERS_H__ 368 369 //-eof-------------------------------------------------------------------------- 370 371