1 //***************************************************************************** 2 // 3 // pwm.h - API function protoypes for Pulse Width Modulation (PWM) ports 4 // 5 // Copyright (c) 2005-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_PWM_H__ 41 #define __DRIVERLIB_PWM_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 // The following defines are passed to PWMGenConfigure() as the ui32Config 57 // parameter and specify the configuration of the PWM generator. 58 // 59 //***************************************************************************** 60 #define PWM_GEN_MODE_DOWN 0x00000000 // Down count mode 61 #define PWM_GEN_MODE_UP_DOWN 0x00000002 // Up/Down count mode 62 #define PWM_GEN_MODE_SYNC 0x00000038 // Synchronous updates 63 #define PWM_GEN_MODE_NO_SYNC 0x00000000 // Immediate updates 64 #define PWM_GEN_MODE_DBG_RUN 0x00000004 // Continue running in debug mode 65 #define PWM_GEN_MODE_DBG_STOP 0x00000000 // Stop running in debug mode 66 #define PWM_GEN_MODE_FAULT_LATCHED \ 67 0x00040000 // Fault is latched 68 #define PWM_GEN_MODE_FAULT_UNLATCHED \ 69 0x00000000 // Fault is not latched 70 #define PWM_GEN_MODE_FAULT_MINPER \ 71 0x00020000 // Enable min fault period 72 #define PWM_GEN_MODE_FAULT_NO_MINPER \ 73 0x00000000 // Disable min fault period 74 #define PWM_GEN_MODE_FAULT_EXT 0x00010000 // Enable extended fault support 75 #define PWM_GEN_MODE_FAULT_LEGACY \ 76 0x00000000 // Disable extended fault support 77 #define PWM_GEN_MODE_DB_NO_SYNC 0x00000000 // Deadband updates occur 78 // immediately 79 #define PWM_GEN_MODE_DB_SYNC_LOCAL \ 80 0x0000A800 // Deadband updates locally 81 // synchronized 82 #define PWM_GEN_MODE_DB_SYNC_GLOBAL \ 83 0x0000FC00 // Deadband updates globally 84 // synchronized 85 #define PWM_GEN_MODE_GEN_NO_SYNC \ 86 0x00000000 // Generator mode updates occur 87 // immediately 88 #define PWM_GEN_MODE_GEN_SYNC_LOCAL \ 89 0x00000280 // Generator mode updates locally 90 // synchronized 91 #define PWM_GEN_MODE_GEN_SYNC_GLOBAL \ 92 0x000003C0 // Generator mode updates globally 93 // synchronized 94 95 //***************************************************************************** 96 // 97 // Defines for enabling, disabling, and clearing PWM generator interrupts and 98 // triggers. 99 // 100 //***************************************************************************** 101 #define PWM_INT_CNT_ZERO 0x00000001 // Int if COUNT = 0 102 #define PWM_INT_CNT_LOAD 0x00000002 // Int if COUNT = LOAD 103 #define PWM_INT_CNT_AU 0x00000004 // Int if COUNT = CMPA U 104 #define PWM_INT_CNT_AD 0x00000008 // Int if COUNT = CMPA D 105 #define PWM_INT_CNT_BU 0x00000010 // Int if COUNT = CMPA U 106 #define PWM_INT_CNT_BD 0x00000020 // Int if COUNT = CMPA D 107 #define PWM_TR_CNT_ZERO 0x00000100 // Trig if COUNT = 0 108 #define PWM_TR_CNT_LOAD 0x00000200 // Trig if COUNT = LOAD 109 #define PWM_TR_CNT_AU 0x00000400 // Trig if COUNT = CMPA U 110 #define PWM_TR_CNT_AD 0x00000800 // Trig if COUNT = CMPA D 111 #define PWM_TR_CNT_BU 0x00001000 // Trig if COUNT = CMPA U 112 #define PWM_TR_CNT_BD 0x00002000 // Trig if COUNT = CMPA D 113 114 //***************************************************************************** 115 // 116 // Defines for enabling, disabling, and clearing PWM interrupts. 117 // 118 //***************************************************************************** 119 #define PWM_INT_GEN_0 0x00000001 // Generator 0 interrupt 120 #define PWM_INT_GEN_1 0x00000002 // Generator 1 interrupt 121 #define PWM_INT_GEN_2 0x00000004 // Generator 2 interrupt 122 #define PWM_INT_GEN_3 0x00000008 // Generator 3 interrupt 123 #define PWM_INT_FAULT0 0x00010000 // Fault0 interrupt 124 #define PWM_INT_FAULT1 0x00020000 // Fault1 interrupt 125 #define PWM_INT_FAULT2 0x00040000 // Fault2 interrupt 126 #define PWM_INT_FAULT3 0x00080000 // Fault3 interrupt 127 #define PWM_INT_FAULT_M 0x000F0000 // Fault interrupt source mask 128 129 //***************************************************************************** 130 // 131 // Defines to identify the generators within a module. 132 // 133 //***************************************************************************** 134 #define PWM_GEN_0 0x00000040 // Offset address of Gen0 135 #define PWM_GEN_1 0x00000080 // Offset address of Gen1 136 #define PWM_GEN_2 0x000000C0 // Offset address of Gen2 137 #define PWM_GEN_3 0x00000100 // Offset address of Gen3 138 139 #define PWM_GEN_0_BIT 0x00000001 // Bit-wise ID for Gen0 140 #define PWM_GEN_1_BIT 0x00000002 // Bit-wise ID for Gen1 141 #define PWM_GEN_2_BIT 0x00000004 // Bit-wise ID for Gen2 142 #define PWM_GEN_3_BIT 0x00000008 // Bit-wise ID for Gen3 143 144 #define PWM_GEN_EXT_0 0x00000800 // Offset of Gen0 ext address range 145 #define PWM_GEN_EXT_1 0x00000880 // Offset of Gen1 ext address range 146 #define PWM_GEN_EXT_2 0x00000900 // Offset of Gen2 ext address range 147 #define PWM_GEN_EXT_3 0x00000980 // Offset of Gen3 ext address range 148 149 //***************************************************************************** 150 // 151 // Defines to identify the outputs within a module. 152 // 153 //***************************************************************************** 154 #define PWM_OUT_0 0x00000040 // Encoded offset address of PWM0 155 #define PWM_OUT_1 0x00000041 // Encoded offset address of PWM1 156 #define PWM_OUT_2 0x00000082 // Encoded offset address of PWM2 157 #define PWM_OUT_3 0x00000083 // Encoded offset address of PWM3 158 #define PWM_OUT_4 0x000000C4 // Encoded offset address of PWM4 159 #define PWM_OUT_5 0x000000C5 // Encoded offset address of PWM5 160 #define PWM_OUT_6 0x00000106 // Encoded offset address of PWM6 161 #define PWM_OUT_7 0x00000107 // Encoded offset address of PWM7 162 163 #define PWM_OUT_0_BIT 0x00000001 // Bit-wise ID for PWM0 164 #define PWM_OUT_1_BIT 0x00000002 // Bit-wise ID for PWM1 165 #define PWM_OUT_2_BIT 0x00000004 // Bit-wise ID for PWM2 166 #define PWM_OUT_3_BIT 0x00000008 // Bit-wise ID for PWM3 167 #define PWM_OUT_4_BIT 0x00000010 // Bit-wise ID for PWM4 168 #define PWM_OUT_5_BIT 0x00000020 // Bit-wise ID for PWM5 169 #define PWM_OUT_6_BIT 0x00000040 // Bit-wise ID for PWM6 170 #define PWM_OUT_7_BIT 0x00000080 // Bit-wise ID for PWM7 171 172 //***************************************************************************** 173 // 174 // Defines to identify each of the possible fault trigger conditions in 175 // PWM_FAULT_GROUP_0. 176 // 177 //***************************************************************************** 178 #define PWM_FAULT_GROUP_0 0 179 180 #define PWM_FAULT_FAULT0 0x00000001 181 #define PWM_FAULT_FAULT1 0x00000002 182 #define PWM_FAULT_FAULT2 0x00000004 183 #define PWM_FAULT_FAULT3 0x00000008 184 #define PWM_FAULT_ACMP0 0x00010000 185 #define PWM_FAULT_ACMP1 0x00020000 186 #define PWM_FAULT_ACMP2 0x00040000 187 188 //***************************************************************************** 189 // 190 // Defines to identify each of the possible fault trigger conditions in 191 // PWM_FAULT_GROUP_1. 192 // 193 //***************************************************************************** 194 #define PWM_FAULT_GROUP_1 1 195 196 #define PWM_FAULT_DCMP0 0x00000001 197 #define PWM_FAULT_DCMP1 0x00000002 198 #define PWM_FAULT_DCMP2 0x00000004 199 #define PWM_FAULT_DCMP3 0x00000008 200 #define PWM_FAULT_DCMP4 0x00000010 201 #define PWM_FAULT_DCMP5 0x00000020 202 #define PWM_FAULT_DCMP6 0x00000040 203 #define PWM_FAULT_DCMP7 0x00000080 204 205 //***************************************************************************** 206 // 207 // Defines to identify the sense of each of the external FAULTn signals 208 // 209 //***************************************************************************** 210 #define PWM_FAULT0_SENSE_HIGH 0x00000000 211 #define PWM_FAULT0_SENSE_LOW 0x00000001 212 #define PWM_FAULT1_SENSE_HIGH 0x00000000 213 #define PWM_FAULT1_SENSE_LOW 0x00000002 214 #define PWM_FAULT2_SENSE_HIGH 0x00000000 215 #define PWM_FAULT2_SENSE_LOW 0x00000004 216 #define PWM_FAULT3_SENSE_HIGH 0x00000000 217 #define PWM_FAULT3_SENSE_LOW 0x00000008 218 219 //***************************************************************************** 220 // 221 // Defines that can be passed to the PWMClockSet() API as the ui32Config 222 // parameter, and can be returned by the PWMClockGet() API. 223 // 224 //***************************************************************************** 225 #define PWM_SYSCLK_DIV_1 0x00000000 // PWM clock is system clock 226 #define PWM_SYSCLK_DIV_2 0x00000100 // PWM clock is system clock /2 227 #define PWM_SYSCLK_DIV_4 0x00000101 // PWM clock is system clock /4 228 #define PWM_SYSCLK_DIV_8 0x00000102 // PWM clock is system clock /8 229 #define PWM_SYSCLK_DIV_16 0x00000103 // PWM clock is system clock /16 230 #define PWM_SYSCLK_DIV_32 0x00000104 // PWM clock is system clock /32 231 #define PWM_SYSCLK_DIV_64 0x00000105 // PWM clock is system clock /64 232 233 //***************************************************************************** 234 // 235 // Defines passed to PWMOutputUpdateMode() to identify the synchronization mode 236 // to use when enabling or disabling outputs using PWMOutputState(). 237 // 238 //***************************************************************************** 239 #define PWM_OUTPUT_MODE_NO_SYNC 0x00000000 // Updates to occur immediately 240 #define PWM_OUTPUT_MODE_SYNC_LOCAL \ 241 0x00000002 // Updates are locally synchronized 242 #define PWM_OUTPUT_MODE_SYNC_GLOBAL \ 243 0x00000003 // Updates are globally synchronized 244 245 //***************************************************************************** 246 // 247 // API Function prototypes 248 // 249 //***************************************************************************** 250 extern void PWMGenConfigure(uint32_t ui32Base, uint32_t ui32Gen, 251 uint32_t ui32Config); 252 extern void PWMGenPeriodSet(uint32_t ui32Base, uint32_t ui32Gen, 253 uint32_t ui32Period); 254 extern uint32_t PWMGenPeriodGet(uint32_t ui32Base, 255 uint32_t ui32Gen); 256 extern void PWMGenEnable(uint32_t ui32Base, uint32_t ui32Gen); 257 extern void PWMGenDisable(uint32_t ui32Base, uint32_t ui32Gen); 258 extern void PWMPulseWidthSet(uint32_t ui32Base, uint32_t ui32PWMOut, 259 uint32_t ui32Width); 260 extern uint32_t PWMPulseWidthGet(uint32_t ui32Base, 261 uint32_t ui32PWMOut); 262 extern void PWMDeadBandEnable(uint32_t ui32Base, uint32_t ui32Gen, 263 uint16_t ui16Rise, uint16_t ui16Fall); 264 extern void PWMDeadBandDisable(uint32_t ui32Base, uint32_t ui32Gen); 265 extern void PWMSyncUpdate(uint32_t ui32Base, uint32_t ui32GenBits); 266 extern void PWMSyncTimeBase(uint32_t ui32Base, uint32_t ui32GenBits); 267 extern void PWMOutputState(uint32_t ui32Base, uint32_t ui32PWMOutBits, 268 bool bEnable); 269 extern void PWMOutputInvert(uint32_t ui32Base, uint32_t ui32PWMOutBits, 270 bool bInvert); 271 extern void PWMOutputFaultLevel(uint32_t ui32Base, 272 uint32_t ui32PWMOutBits, 273 bool bDriveHigh); 274 extern void PWMOutputFault(uint32_t ui32Base, uint32_t ui32PWMOutBits, 275 bool bFaultSuppress); 276 extern void PWMGenIntRegister(uint32_t ui32Base, uint32_t ui32Gen, 277 void (*pfnIntHandler)(void)); 278 extern void PWMGenIntUnregister(uint32_t ui32Base, uint32_t ui32Gen); 279 extern void PWMFaultIntRegister(uint32_t ui32Base, 280 void (*pfnIntHandler)(void)); 281 extern void PWMFaultIntUnregister(uint32_t ui32Base); 282 extern void PWMGenIntTrigEnable(uint32_t ui32Base, uint32_t ui32Gen, 283 uint32_t ui32IntTrig); 284 extern void PWMGenIntTrigDisable(uint32_t ui32Base, uint32_t ui32Gen, 285 uint32_t ui32IntTrig); 286 extern uint32_t PWMGenIntStatus(uint32_t ui32Base, uint32_t ui32Gen, 287 bool bMasked); 288 extern void PWMGenIntClear(uint32_t ui32Base, uint32_t ui32Gen, 289 uint32_t ui32Ints); 290 extern void PWMIntEnable(uint32_t ui32Base, uint32_t ui32GenFault); 291 extern void PWMIntDisable(uint32_t ui32Base, uint32_t ui32GenFault); 292 extern void PWMFaultIntClear(uint32_t ui32Base); 293 extern uint32_t PWMIntStatus(uint32_t ui32Base, bool bMasked); 294 extern void PWMFaultIntClearExt(uint32_t ui32Base, 295 uint32_t ui32FaultInts); 296 extern void PWMGenFaultConfigure(uint32_t ui32Base, uint32_t ui32Gen, 297 uint32_t ui32MinFaultPeriod, 298 uint32_t ui32FaultSenses); 299 extern void PWMGenFaultTriggerSet(uint32_t ui32Base, uint32_t ui32Gen, 300 uint32_t ui32Group, 301 uint32_t ui32FaultTriggers); 302 extern uint32_t PWMGenFaultTriggerGet(uint32_t ui32Base, 303 uint32_t ui32Gen, 304 uint32_t ui32Group); 305 extern uint32_t PWMGenFaultStatus(uint32_t ui32Base, 306 uint32_t ui32Gen, 307 uint32_t ui32Group); 308 extern void PWMGenFaultClear(uint32_t ui32Base, uint32_t ui32Gen, 309 uint32_t ui32Group, 310 uint32_t ui32FaultTriggers); 311 extern void PWMClockSet(uint32_t ui32Base, uint32_t ui32Config); 312 extern uint32_t PWMClockGet(uint32_t ui32Base); 313 extern void PWMOutputUpdateMode(uint32_t ui32Base, 314 uint32_t ui32PWMOutBits, 315 uint32_t ui32Mode); 316 317 //***************************************************************************** 318 // 319 // Mark the end of the C bindings section for C++ compilers. 320 // 321 //***************************************************************************** 322 #ifdef __cplusplus 323 } 324 #endif 325 326 #endif // __DRIVERLIB_PWM_H__ 327