/* * Licensed under ST Liberty SW License Agreement V2, (the "License"); * You may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.st.com/software_license_agreement_liberty_v2 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @file FlexPWM_v1/spc5_flexpwm.h * @brief SPC5xx FlexPWM header file. * * @addtogroup PWM * @{ */ #ifndef _SPC5_FLEXPWM_H_ #define _SPC5_FLEXPWM_H_ /*===========================================================================*/ /* Driver constants. */ /*===========================================================================*/ /*===========================================================================*/ /* Driver pre-compile time settings. */ /*===========================================================================*/ /*===========================================================================*/ /* Derived constants and error checks. */ /*===========================================================================*/ /*===========================================================================*/ /* Driver data structures and types. */ /*===========================================================================*/ /** * @brief SPC5 FlexPWM registers block. * @note Redefined from the SPC5 headers because the non uniform * declaration of the SubModules registers among the various * sub-families. */ struct spc5_flexpwm_submodule { union { vuint16_t R; } CNT; /* Counter Register */ union { vuint16_t R; } INIT; /* Initial Count Register */ union { vuint16_t R; struct { vuint16_t DBGEN :1; vuint16_t WAITEN :1; vuint16_t INDEP :1; vuint16_t PWMA_INIT :1; vuint16_t PWMB_INIT :1; vuint16_t PWMX_INIT :1; vuint16_t INIT_SEL :2; vuint16_t FRCEN :1; vuint16_t FORCE :1; vuint16_t FORCE_SEL :3; vuint16_t RELOAD_SEL :1; vuint16_t CLK_SEL :2; } B; } CTRL2; /* Control 2 Register */ union { vuint16_t R; struct { vuint16_t LDFQ :4; vuint16_t HALF :1; vuint16_t FULL :1; vuint16_t DT :2; vuint16_t :1; vuint16_t PRSC :3; vuint16_t :3; vuint16_t DBLEN :1; } B; } CTRL; /* Control Register */ union { vuint16_t R; } VAL[6]; /* Value Register 0->5 */ union { vuint16_t R; struct { vuint16_t FRACAEN :1; vuint16_t :10; vuint16_t FRACADLY :5; } B; } FRACA; /* Fractional Delay Register A */ union { vuint16_t R; struct { vuint16_t FRACBEN :1; vuint16_t :10; vuint16_t FRACBDLY :5; } B; } FRACB; /* Fractional Delay Register B */ union { vuint16_t R; struct { vuint16_t PWMA_IN :1; vuint16_t PWMB_IN :1; vuint16_t PWMX_IN :1; vuint16_t :2; vuint16_t POLA :1; vuint16_t POLB :1; vuint16_t POLX :1; vuint16_t :2; vuint16_t PWMAFS :2; vuint16_t PWMBFS :2; vuint16_t PWMXFS :2; } B; } OCTRL; /* Output Control Register */ union { vuint16_t R; struct { vuint16_t :1; vuint16_t RUF :1; vuint16_t REF :1; vuint16_t RF :1; vuint16_t CFA1 :1; vuint16_t CFA0 :1; vuint16_t CFB1 :1; vuint16_t CFB0 :1; vuint16_t CFX1 :1; vuint16_t CFX0 :1; vuint16_t CMPF :6; } B; } STS; /* Status Register */ union { vuint16_t R; struct { vuint16_t :2; vuint16_t REIE :1; vuint16_t RIE :1; vuint16_t :4; vuint16_t CX1IE :1; vuint16_t CX0IE :1; vuint16_t CMPIE :6; } B; } INTEN; /* Interrupt Enable Register */ union { vuint16_t R; struct { vuint16_t :6; vuint16_t VALDE :1; vuint16_t FAND :1; vuint16_t CAPTDE :2; vuint16_t CA1DE :1; vuint16_t CA0DE :1; vuint16_t CB1DE :1; vuint16_t CB0DE :1; vuint16_t CX1DE :1; vuint16_t CX0DE :1; } B; } DMAEN; /* DMA Enable Register */ union { vuint16_t R; struct { vuint16_t :10; vuint16_t OUT_TRIG_EN :6; } B; } TCTRL; /* Output Trigger Control Register */ union { vuint16_t R; struct { vuint16_t :4; vuint16_t DISX :4; vuint16_t DISB :4; vuint16_t DISA :4; } B; } DISMAP; /* Fault Disable Mapping Register */ union { vuint16_t R; struct { vuint16_t :5; vuint16_t DTCNT0 :11; } B; } DTCNT0; /* Deadtime Count Register 0 */ union { vuint16_t R; struct { vuint16_t :5; vuint16_t DTCNT1 :11; } B; } DTCNT1; /* Deadtime Count Register 1 */ union { vuint16_t R; struct { vuint16_t CA1CNT :3; vuint16_t CA0CNT :3; vuint16_t CFAWM :2; vuint16_t EDGCNTAEN :1; vuint16_t INPSELA :1; vuint16_t EDGA1 :2; vuint16_t EDGA0 :2; vuint16_t ONESHOTA :1; vuint16_t ARMA :1; } B; } CAPTCTRLA; /* Capture Control Register A */ union { vuint16_t R; struct { vuint16_t EDGCNTA :8; vuint16_t EDGCMPA :8; } B; } CAPTCOMPA; /* Capture Compare Register A */ union { vuint16_t R; struct { vuint16_t CB1CNT :3; vuint16_t CB0CNT :3; vuint16_t CFBWM :2; vuint16_t EDGCNTBEN :1; vuint16_t INPSELB :1; vuint16_t EDGB1 :2; vuint16_t EDGB0 :2; vuint16_t ONESHOTB :1; vuint16_t ARMB :1; } B; } CAPTCTRLB; /* Capture Control Register B */ union { vuint16_t R; struct { vuint16_t EDGCNTB :8; vuint16_t EDGCMPB :8; } B; } CAPTCOMPB; /* Capture Compare Register B */ union { vuint16_t R; struct { vuint16_t CX1CNT :3; vuint16_t CX0CNT :3; vuint16_t CFXWM :2; vuint16_t EDGCNTX_EN :1; vuint16_t INP_SELX :1; vuint16_t EDGX1 :2; vuint16_t EDGX0 :2; vuint16_t ONESHOTX :1; vuint16_t ARMX :1; } B; } CAPTCTRLX; /* Capture Control Register B */ union { vuint16_t R; struct { vuint16_t EDGCNTX :8; vuint16_t EDGCMPX :8; } B; } CAPTCOMPX; /* Capture Compare Register X */ union { vuint16_t R; struct { vuint16_t CAPTVAL0 :16; } B; } CVAL0; /* Capture Value 0 Register */ union { vuint16_t R; struct { vuint16_t :12; vuint16_t CVAL0CYC :4; } B; } CVAL0C; /* Capture Value 0 Cycle Register */ union { vuint16_t R; struct { vuint16_t CAPTVAL1 :16; } B; } CVAL1; /* Capture Value 1 Register */ union { vuint16_t R; struct { vuint16_t :12; vuint16_t CVAL1CYC :4; } B; } CVAL1C; /* Capture Value 1 Cycle Register */ union { vuint16_t R; struct { vuint16_t CAPTVAL2 :16; } B; } CVAL2; /* Capture Value 2 Register */ union { vuint16_t R; struct { vuint16_t :12; vuint16_t CVAL2CYC :4; } B; } CVAL2C; /* Capture Value 2 Cycle Register */ union { vuint16_t R; struct { vuint16_t CAPTVAL3 :16; } B; } CVAL3; /* Capture Value 3 Register */ union { vuint16_t R; struct { vuint16_t :12; vuint16_t CVAL3CYC :4; } B; } CVAL3C; /* Capture Value 3 Cycle Register */ union { vuint16_t R; struct { vuint16_t CAPTVAL4 :16; } B; } CVAL4; /* Capture Value 4 Register */ union { vuint16_t R; struct { vuint16_t :12; vuint16_t CVAL4CYC :4; } B; } CVAL4C; /* Capture Value 4 Cycle Register */ union { vuint16_t R; struct { vuint16_t CAPTVAL5 :16; } B; } CVAL5; /* Capture Value 5 Register */ union { vuint16_t R; struct { vuint16_t :12; vuint16_t CVAL5CYC :4; } B; } CVAL5C; /* Capture Value 5 Cycle Register */ uint32_t FLEXPWM_SUB_reserved0; /* (0x04A - 0x050)/4 = 0x01 */ }; /* end of FLEXPWM_SUB_tag */ struct spc5_flexpwm { struct spc5_flexpwm_submodule SUB[4]; union { vuint16_t R; struct { vuint16_t :4; vuint16_t PWMA_EN :4; vuint16_t PWMB_EN :4; vuint16_t PWMX_EN :4; } B; } OUTEN; /* Output Enable Register */ union { vuint16_t R; struct { vuint16_t :4; vuint16_t MASKA :4; vuint16_t MASKB :4; vuint16_t MASKX :4; } B; } MASK; /* Output Mask Register */ union { vuint16_t R; struct { vuint16_t :8; vuint16_t OUTA_3 :1; vuint16_t OUTB_3 :1; vuint16_t OUTA_2 :1; vuint16_t OUTB_2 :1; vuint16_t OUTA_1 :1; vuint16_t OUTB_1 :1; vuint16_t OUTA_0 :1; vuint16_t OUTB_0 :1; } B; } SWCOUT; /* Software Controlled Output Register */ union { vuint16_t R; struct { vuint16_t SELA_3 :2; vuint16_t SELB_3 :2; vuint16_t SELA_2 :2; vuint16_t SELB_2 :2; vuint16_t SELA_1 :2; vuint16_t SELB_1 :2; vuint16_t SELA_0 :2; vuint16_t SELB_0 :2; } B; } DTSRCSEL; /* Deadtime Source Select Register */ union { vuint16_t R; struct { vuint16_t IPOL :4; vuint16_t RUN :4; vuint16_t CLDOK :4; vuint16_t LDOK :4; } B; } MCTRL; /* Master Control Register */ int16_t FLEXPWM_reserved1; union { vuint16_t R; struct { vuint16_t FLVL :4; vuint16_t FAUTO :4; vuint16_t FSAFE :4; vuint16_t FIE :4; } B; } FCTRL; /* Fault Control Register */ union { vuint16_t R; struct { vuint16_t :3; vuint16_t FTEST :1; vuint16_t FFPIN :4; vuint16_t :4; vuint16_t FFLAG :4; } B; } FSTS; /* Fault Status Register */ union { vuint16_t R; struct { vuint16_t :5; vuint16_t FILT_CNT :3; vuint16_t FILT_PER :8; } B; } FFILT; /* Fault FilterRegister */ }; /*===========================================================================*/ /* Driver macros. */ /*===========================================================================*/ /** * @name FlexPWM units references * @{ */ #if SPC5_HAS_FLEXPWM0 || defined(__DOXYGEN__) #define SPC5_FLEXPWM_0 (*(volatile struct spc5_flexpwm *)0xFFE24000UL) #endif #if SPC5_HAS_FLEXPWM1 || defined(__DOXYGEN__) #define SPC5_FLEXPWM_1 (*(volatile struct spc5_flexpwm *)0xFFE28000UL) #endif /** @} */ #endif /* _SPC5_FLEXPWM_H_ */ /** @} */