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.57 24 // Version: 1 25 26 #ifndef __SI32_PCACH_A_REGISTERS_H__ 27 #define __SI32_PCACH_A_REGISTERS_H__ 28 29 #include <stdint.h> 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 struct SI32_PCACH_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 uint32_t reserved0: 2; 46 // Channel Operating Mode 47 volatile uint32_t CMD: 3; 48 uint32_t reserved1: 21; 49 }; 50 volatile uint32_t U32; 51 }; 52 }; 53 54 #define SI32_PCACH_A_MODE_COSEL_MASK 0x00000003 55 #define SI32_PCACH_A_MODE_COSEL_SHIFT 0 56 // Toggle the channel output at the next capture/compare, overflow, or intermediate 57 // event. 58 #define SI32_PCACH_A_MODE_COSEL_TOGGLE_OUTPUT_VALUE 0 59 #define SI32_PCACH_A_MODE_COSEL_TOGGLE_OUTPUT_U32 \ 60 (SI32_PCACH_A_MODE_COSEL_TOGGLE_OUTPUT_VALUE << SI32_PCACH_A_MODE_COSEL_SHIFT) 61 // Set the channel output at the next capture/compare, overflow, or intermediate 62 // event. 63 #define SI32_PCACH_A_MODE_COSEL_SET_OUTPUT_VALUE 1 64 #define SI32_PCACH_A_MODE_COSEL_SET_OUTPUT_U32 \ 65 (SI32_PCACH_A_MODE_COSEL_SET_OUTPUT_VALUE << SI32_PCACH_A_MODE_COSEL_SHIFT) 66 // Clear the output at the next capture/compare, overflow, or intermediate event. 67 #define SI32_PCACH_A_MODE_COSEL_CLEAR_OUTPUT_VALUE 2 68 #define SI32_PCACH_A_MODE_COSEL_CLEAR_OUTPUT_U32 \ 69 (SI32_PCACH_A_MODE_COSEL_CLEAR_OUTPUT_VALUE << SI32_PCACH_A_MODE_COSEL_SHIFT) 70 // Capture/Compare, overflow, or intermediate events do not control the output 71 // state. 72 #define SI32_PCACH_A_MODE_COSEL_NO_CHANGE_VALUE 3 73 #define SI32_PCACH_A_MODE_COSEL_NO_CHANGE_U32 \ 74 (SI32_PCACH_A_MODE_COSEL_NO_CHANGE_VALUE << SI32_PCACH_A_MODE_COSEL_SHIFT) 75 76 #define SI32_PCACH_A_MODE_PWMMD_MASK 0x0000003C 77 #define SI32_PCACH_A_MODE_PWMMD_SHIFT 2 78 79 #define SI32_PCACH_A_MODE_CMD_MASK 0x00000700 80 #define SI32_PCACH_A_MODE_CMD_SHIFT 8 81 // Configure the channel for edge-aligned PWM mode. 82 #define SI32_PCACH_A_MODE_CMD_EDGE_PWM_VALUE 0 83 #define SI32_PCACH_A_MODE_CMD_EDGE_PWM_U32 \ 84 (SI32_PCACH_A_MODE_CMD_EDGE_PWM_VALUE << SI32_PCACH_A_MODE_CMD_SHIFT) 85 // Configure the channel for center-aligned PWM mode. 86 #define SI32_PCACH_A_MODE_CMD_CENTER_ALIGNED_PWM_VALUE 1 87 #define SI32_PCACH_A_MODE_CMD_CENTER_ALIGNED_PWM_U32 \ 88 (SI32_PCACH_A_MODE_CMD_CENTER_ALIGNED_PWM_VALUE << SI32_PCACH_A_MODE_CMD_SHIFT) 89 // Configure the channel for high-frequency/square-wave mode. 90 #define SI32_PCACH_A_MODE_CMD_HF_SQUARE_WAVE_VALUE 2 91 #define SI32_PCACH_A_MODE_CMD_HF_SQUARE_WAVE_U32 \ 92 (SI32_PCACH_A_MODE_CMD_HF_SQUARE_WAVE_VALUE << SI32_PCACH_A_MODE_CMD_SHIFT) 93 // Configure the channel for timer/capture mode. 94 #define SI32_PCACH_A_MODE_CMD_TIMER_CAPTURE_VALUE 3 95 #define SI32_PCACH_A_MODE_CMD_TIMER_CAPTURE_U32 \ 96 (SI32_PCACH_A_MODE_CMD_TIMER_CAPTURE_VALUE << SI32_PCACH_A_MODE_CMD_SHIFT) 97 // Configure the channel for n-bit edge-aligned PWM mode. 98 #define SI32_PCACH_A_MODE_CMD_N_BIT_PWM_VALUE 4 99 #define SI32_PCACH_A_MODE_CMD_N_BIT_PWM_U32 \ 100 (SI32_PCACH_A_MODE_CMD_N_BIT_PWM_VALUE << SI32_PCACH_A_MODE_CMD_SHIFT) 101 102 103 104 struct SI32_PCACH_A_CONTROL_Struct 105 { 106 union 107 { 108 struct 109 { 110 // Channel Output State 111 volatile uint32_t COUTST: 1; 112 // Positive Edge Input Capture Enable 113 volatile uint32_t CPCAPEN: 1; 114 // Negative Edge Input Capture Enable 115 volatile uint32_t CNCAPEN: 1; 116 // Channel Register Update Complete Flag 117 volatile uint32_t CUPDCF: 1; 118 uint32_t reserved0: 4; 119 // Capture/Compare Interrupt Enable 120 volatile uint32_t CCIEN: 1; 121 uint32_t reserved1: 2; 122 // Intermediate Overflow Interrupt Enable 123 volatile uint32_t CIOVFIEN: 1; 124 uint32_t reserved2: 20; 125 }; 126 volatile uint32_t U32; 127 }; 128 }; 129 130 #define SI32_PCACH_A_CONTROL_COUTST_MASK 0x00000001 131 #define SI32_PCACH_A_CONTROL_COUTST_SHIFT 0 132 // The channel output state is low. 133 #define SI32_PCACH_A_CONTROL_COUTST_LOW_VALUE 0 134 #define SI32_PCACH_A_CONTROL_COUTST_LOW_U32 \ 135 (SI32_PCACH_A_CONTROL_COUTST_LOW_VALUE << SI32_PCACH_A_CONTROL_COUTST_SHIFT) 136 // The channel output state is high. 137 #define SI32_PCACH_A_CONTROL_COUTST_HIGH_VALUE 1 138 #define SI32_PCACH_A_CONTROL_COUTST_HIGH_U32 \ 139 (SI32_PCACH_A_CONTROL_COUTST_HIGH_VALUE << SI32_PCACH_A_CONTROL_COUTST_SHIFT) 140 141 #define SI32_PCACH_A_CONTROL_CPCAPEN_MASK 0x00000002 142 #define SI32_PCACH_A_CONTROL_CPCAPEN_SHIFT 1 143 // Disable positive-edge input capture. 144 #define SI32_PCACH_A_CONTROL_CPCAPEN_DISABLED_VALUE 0 145 #define SI32_PCACH_A_CONTROL_CPCAPEN_DISABLED_U32 \ 146 (SI32_PCACH_A_CONTROL_CPCAPEN_DISABLED_VALUE << SI32_PCACH_A_CONTROL_CPCAPEN_SHIFT) 147 // Enable positive-edge input capture. 148 #define SI32_PCACH_A_CONTROL_CPCAPEN_ENABLED_VALUE 1 149 #define SI32_PCACH_A_CONTROL_CPCAPEN_ENABLED_U32 \ 150 (SI32_PCACH_A_CONTROL_CPCAPEN_ENABLED_VALUE << SI32_PCACH_A_CONTROL_CPCAPEN_SHIFT) 151 152 #define SI32_PCACH_A_CONTROL_CNCAPEN_MASK 0x00000004 153 #define SI32_PCACH_A_CONTROL_CNCAPEN_SHIFT 2 154 // Disable negative-edge input capture. 155 #define SI32_PCACH_A_CONTROL_CNCAPEN_DISABLED_VALUE 0 156 #define SI32_PCACH_A_CONTROL_CNCAPEN_DISABLED_U32 \ 157 (SI32_PCACH_A_CONTROL_CNCAPEN_DISABLED_VALUE << SI32_PCACH_A_CONTROL_CNCAPEN_SHIFT) 158 // Enable negative-edge input capture. 159 #define SI32_PCACH_A_CONTROL_CNCAPEN_ENABLED_VALUE 1 160 #define SI32_PCACH_A_CONTROL_CNCAPEN_ENABLED_U32 \ 161 (SI32_PCACH_A_CONTROL_CNCAPEN_ENABLED_VALUE << SI32_PCACH_A_CONTROL_CNCAPEN_SHIFT) 162 163 #define SI32_PCACH_A_CONTROL_CUPDCF_MASK 0x00000008 164 #define SI32_PCACH_A_CONTROL_CUPDCF_SHIFT 3 165 // A PCA channel register update completed or is not pending. 166 #define SI32_PCACH_A_CONTROL_CUPDCF_NOT_SET_VALUE 0 167 #define SI32_PCACH_A_CONTROL_CUPDCF_NOT_SET_U32 \ 168 (SI32_PCACH_A_CONTROL_CUPDCF_NOT_SET_VALUE << SI32_PCACH_A_CONTROL_CUPDCF_SHIFT) 169 // A PCA channel register update has not completed and is still pending. 170 #define SI32_PCACH_A_CONTROL_CUPDCF_SET_VALUE 1 171 #define SI32_PCACH_A_CONTROL_CUPDCF_SET_U32 \ 172 (SI32_PCACH_A_CONTROL_CUPDCF_SET_VALUE << SI32_PCACH_A_CONTROL_CUPDCF_SHIFT) 173 174 #define SI32_PCACH_A_CONTROL_CCIEN_MASK 0x00000100 175 #define SI32_PCACH_A_CONTROL_CCIEN_SHIFT 8 176 // Disable the channel capture/compare interrupt. 177 #define SI32_PCACH_A_CONTROL_CCIEN_DISABLED_VALUE 0 178 #define SI32_PCACH_A_CONTROL_CCIEN_DISABLED_U32 \ 179 (SI32_PCACH_A_CONTROL_CCIEN_DISABLED_VALUE << SI32_PCACH_A_CONTROL_CCIEN_SHIFT) 180 // Enable the channel capture/compare interrupt. 181 #define SI32_PCACH_A_CONTROL_CCIEN_ENABLED_VALUE 1 182 #define SI32_PCACH_A_CONTROL_CCIEN_ENABLED_U32 \ 183 (SI32_PCACH_A_CONTROL_CCIEN_ENABLED_VALUE << SI32_PCACH_A_CONTROL_CCIEN_SHIFT) 184 185 #define SI32_PCACH_A_CONTROL_CIOVFIEN_MASK 0x00000800 186 #define SI32_PCACH_A_CONTROL_CIOVFIEN_SHIFT 11 187 // Disable the channel intermediate overflow interrupt. 188 #define SI32_PCACH_A_CONTROL_CIOVFIEN_DISABLED_VALUE 0 189 #define SI32_PCACH_A_CONTROL_CIOVFIEN_DISABLED_U32 \ 190 (SI32_PCACH_A_CONTROL_CIOVFIEN_DISABLED_VALUE << SI32_PCACH_A_CONTROL_CIOVFIEN_SHIFT) 191 // Enable the channel intermediate overflow interrupt. 192 #define SI32_PCACH_A_CONTROL_CIOVFIEN_ENABLED_VALUE 1 193 #define SI32_PCACH_A_CONTROL_CIOVFIEN_ENABLED_U32 \ 194 (SI32_PCACH_A_CONTROL_CIOVFIEN_ENABLED_VALUE << SI32_PCACH_A_CONTROL_CIOVFIEN_SHIFT) 195 196 197 198 struct SI32_PCACH_A_CCAPV_Struct 199 { 200 union 201 { 202 struct 203 { 204 // Channel Compare Value 205 volatile uint32_t CCAPV_BITS: 18; 206 uint32_t reserved0: 14; 207 }; 208 volatile uint32_t U32; 209 }; 210 }; 211 212 #define SI32_PCACH_A_CCAPV_CCAPV_MASK 0x0003FFFF 213 #define SI32_PCACH_A_CCAPV_CCAPV_SHIFT 0 214 215 216 217 struct SI32_PCACH_A_CCAPVUPD_Struct 218 { 219 union 220 { 221 struct 222 { 223 // Channel Compare Update Value 224 volatile uint32_t CCAPVUPD_BITS: 18; 225 uint32_t reserved0: 14; 226 }; 227 volatile uint32_t U32; 228 }; 229 }; 230 231 #define SI32_PCACH_A_CCAPVUPD_CCAPVUPD_MASK 0x0003FFFF 232 #define SI32_PCACH_A_CCAPVUPD_CCAPVUPD_SHIFT 0 233 234 235 236 typedef struct SI32_PCACH_A_Struct 237 { 238 struct SI32_PCACH_A_MODE_Struct MODE ; // Base Address + 0x0 239 uint32_t reserved0; 240 uint32_t reserved1; 241 uint32_t reserved2; 242 struct SI32_PCACH_A_CONTROL_Struct CONTROL ; // Base Address + 0x10 243 volatile uint32_t CONTROL_SET; 244 volatile uint32_t CONTROL_CLR; 245 uint32_t reserved3; 246 struct SI32_PCACH_A_CCAPV_Struct CCAPV ; // Base Address + 0x20 247 uint32_t reserved4; 248 uint32_t reserved5; 249 uint32_t reserved6; 250 struct SI32_PCACH_A_CCAPVUPD_Struct CCAPVUPD ; // Base Address + 0x30 251 uint32_t reserved7; 252 uint32_t reserved8; 253 uint32_t reserved9; 254 } SI32_PCACH_A_Type; 255 256 #ifdef __cplusplus 257 } 258 #endif 259 260 #endif // __SI32_PCACH_A_REGISTERS_H__ 261 262 //-eof-------------------------------------------------------------------------- 263 264