Counter is not starting up by configuring the counter registers. the TBPRD value also set in the place. but also the counter is not starting up so please guide me to show up the steps for epwm generation in am263x.
#include "cslr_etpwm.h" #include "pwm.h" #define EPWM_GROUP0_MODULE0_BASEADDRESS 0x50000000 /* Address value */ #define PLL_CLK_SRC_SEL Register ADDRESS 0x53208160 /* Address value */ #define EPWM_HSPCLKDIV_MASK 0xFC7F #define EPWM_CLKDIV_MASK 0xE3FF /* Mask Value */ #define EPWM_CTRMODE_MASK 0xFFFC #define EPWM_PRDLD_MASK 0xFFF7 #define EPWM_SWFSYNC_MASK 0xFFBF #define EPWM_FREE_SOFT_MASK 0x3FFF #define EPWM_hspClkDiv 0x07 #define EPWM_clkDiv 0x0A #define EPWM_ctrMode 0x00 #define EPWM_prdld 0x03 #define EPWM_swfsync 0x06 #define EPWM_free_soft 0x0E /* value */ #define EPWM_LOADAMODE_MASK 0xFFFC #define EPWM_LOADAMODE 0x00 #define EPWM_LOADBMODE_MASK 0xFFF3 #define EPWM_loadbmode 0x02 #define EPWM_SHDWAMODE_MASK 0xFFEF #define EPWM_shdwamode 0x04 #define EPWM_SHDWAFULL_MASK 0xFEFF #define EPWM_shdwafull 0x08 #define EPWM_LDAQAMODE_MASK 0x0FDC #define EPWM_ldaqamode 0x02 #define EPWM_SHDWAQAMODE_MASK 0x0FCF #define EPWM_shdwaqamode 0x01 unsigned int dataLogger=0; unsigned char Cntr=0; void Pwm_init_function (uint32_t address) { int hspClkDiv1=2; int clkDiv1=2; int ctrMode1=0; int prdld1=1; int free_soft1=1; int swfsync1=1; int loadamode1=1; int loadbmode1=1; int shdwamode1=1; int shdwafull1=1; int ldaqamode1=2; int shdwaqamode1=1; /* Time Base Sub-Module */ EPWM_timer_config (address,hspClkDiv1,clkDiv1); EPWM_counter_config(address, ctrMode1,prdld1); EPWM_free_soft_config(address,free_soft1); EPWM_timerSetPeriod(address,5000); EPWM_swfsync_config(address,swfsync1); PLL_clk_src_sel(address,0x222); /* Counter Compare Sub-Module */ EPWM_CCloadamode_config(address,loadamode1); EPWM_CCloadbmode_config(address,loadbmode1); EPWM_CCshdwamode_config(address,shdwamode1); EPWM_CCshdwafull_config(address,shdwafull1); /* Action Qualifier Sub-Module */ EPWM_ldaqamode_config(address,ldaqamode1); EPWM_shdwaqamode_config(address,shdwaqamode1); } /* Function Name: EPWM_timer_config * Parameter : EPWM_hspClkDiv 3 bit hspclKdiv value * EPWM_clkDiv 3 bit clKdiv value * Address of the Module * Return Value : Void * Remarks : This function configures Time base submodule. * Sets TBCTL's HSPCLKDIV bits to hspClkDiv * Sets TBCTL's CLKDIV bits to EPWM_clkDiv * TBCLK = EPWMCLK / (HSPCLKDIV * HSPCLKDIV ) * \ Return None */ static void EPWM_timer_config(uint32_t address,uint16_t hspClkDiv, uint16_t clkDiv) { CSL_epwmRegs *epwmModule1; epwmModule1 =(CSL_epwmRegs *) address; /* TypeCasting */ epwmModule1->TBCTL = ((epwmModule1->TBCTL & EPWM_HSPCLKDIV_MASK) | ((hspClkDiv &07)<<EPWM_hspClkDiv)); epwmModule1->TBCTL = ((epwmModule1->TBCTL & EPWM_CLKDIV_MASK) | (clkDiv<<EPWM_clkDiv)); } /* Function Name: EPWM_timerSetPeriod * Parameter : EPWM_timerSetPeriod has 16 bits * : Address of the Module * Return Value : Void * Remarks : This function configures TimerSetPeriod. * Sets TBPRD Value to TBCTL * \ Return None */ static void EPWM_timerSetPeriod(uint32_t address, uint16_t timePeriod) { CSL_epwmRegs *epwmModule1; epwmModule1 =(CSL_epwmRegs *) address; /* TypeCasting */ epwmModule1->TBPRD = timePeriod; } /* * Function Name: EPWM_counter_config * Parameter : EPWM_CTRMODE 2 bit CTRMODE value * EPWM_Prdld 1 bit Prdld value * Address of the Module * Return Value: Void * Remarks: * This function configures the Counter Mode * This function configures the TBPRD Value and sets the prdld bit * This function is used to set the Counter Mode in Counters. * \Return None */ static void EPWM_counter_config(uint32_t address,uint16_t ctrMode, uint16_t prdld) { CSL_epwmRegs *epwmModule1; epwmModule1 =(CSL_epwmRegs *) address; epwmModule1->TBCTL = ((epwmModule1->TBCTL &EPWM_CTRMODE_MASK) | (ctrMode)); epwmModule1->TBCTL = ((epwmModule1->TBCTL &EPWM_PRDLD_MASK) | (prdld<<EPWM_prdld)); } /* * Function Name: PLL_CLK_SRC_SEL * Parameter : PLL_CLK_SRC_SEL has 12 bits * : Address of the Module * Return Value : Void * Remarks : This function configures PLL CLK * Sets Counter to TBCTR * \ Return None */ static void PLL_clk_src_sel(uint32_t address, uint16_t PLL_clk_src) { uint32_t *ptr; ptr = (uint32_t *) 0x53208160; } /* * Function Name: EPWM_free_soft_config * Parameter: EPWM_free_soft 2 bit free_soft value * Address of the Module * Return Value: Void * Remarks: * This function configures free_soft * This function is used to set the free running PWM in Drivers. * \ Return None */ static void EPWM_free_soft_config(uint32_t address,uint16_t free_soft) { CSL_epwmRegs *epwmModule1; epwmModule1 =(CSL_epwmRegs *) address; epwmModule1->TBCTL = ((epwmModule1->TBCTL & EPWM_FREE_SOFT_MASK) | (free_soft<<EPWM_free_soft)); } /* * Function Name: EPWM_swfsync_config * Parameter: EPWM_swfsync 1 bit swfsync value * Address of the Module * Return Value: Void * Remarks: * This function configures swfsync * This function is used to set one time synchronisation pulse to be generated. * SWFSYNC can be enabled to affect EPWMxSYNCO by setting the EPWMSYNCOUTEN.SWEN bit * \ Return None */ static void EPWM_swfsync_config(uint32_t address,uint16_t swfsync) { CSL_epwmRegs *epwmModule1; epwmModule1 =(CSL_epwmRegs *) address; epwmModule1->TBCTL = ((epwmModule1->TBCTL & EPWM_SWFSYNC_MASK) | (swfsync<<EPWM_swfsync)); } /* * Function Name: EPWM_CCloadamode_config * Parameter: EPWM_CCloadamode 2 bit CCloadamode value * Address of the Module * Return Value: Void * Remarks: * This function configures Counter compare submodule * This function configures CCloadamode * This function is used to set loadamode bit to be set in CMPCTL Register * Load on CTR = PRD: Time-base counter equal to period (TBCTR = TBPRD). Passing the value 01 to the loadamode bit. * \Return None */ static void EPWM_CCloadamode_config(uint32_t address,uint16_t loadamode) { CSL_epwmRegs *epwmModule1; epwmModule1 =(CSL_epwmRegs *) address; epwmModule1->CMPCTL = ((epwmModule1->CMPCTL & EPWM_LOADAMODE_MASK) | (loadamode)); } /* * Function Name: EPWM_CCloadbmode_config * Parameter: EPWM_CCloadbmode 2 bit CCloadbmode value * Address of the Module * Return Value: Void * Remarks: * This function configures Counter compare submodule * This function is used to set CCloadbmode bit to be set in CMPCTL Register * Load on CTR = PRD: Time-base counter equal to period (TBCTR = TBPRD). Passing the value 01 to the loadbmode bit. * \Return none */ static void EPWM_CCloadbmode_config(uint32_t address,uint16_t loadbmode) { CSL_epwmRegs *epwmModule1; epwmModule1 =(CSL_epwmRegs *) address; epwmModule1->CMPCTL = ((epwmModule1->CMPCTL & EPWM_LOADBMODE_MASK) | (loadbmode<<EPWM_loadbmode)); } /* *Function Name: EPWM_CCshdwamode_config * Parameter: EPWM_CCshdwamode 1 bit CCshdwamode value * Address of the Module * Return Value: Void * Remarks: * This function configures Counter Compare submodule * This function is used to set CCshdwamode bit to be set in CMPCTL Register. * This function is used to Only the active compare register is used. All writes and reads directly access the active register for immediate compare action. * \Return none */ static void EPWM_CCshdwamode_config(uint32_t address,uint16_t shdwamode) { CSL_epwmRegs *epwmModule1; epwmModule1 =(CSL_epwmRegs *) address; epwmModule1->CMPCTL = ((epwmModule1->CMPCTL & EPWM_SHDWAMODE_MASK) | (shdwamode<<EPWM_shdwamode)); } /* * Function Name:EPWM_CCshdwafull_config * Parameter: EPWM_CCshdwafull 1 bit shdwafull value * Address of the Module * Return Value: Void * Remarks: * This function configures Counter Compare submodule. * This function is used to set CCshdwafull bit to be set in CMPCTL Register. * This function is used as this bit self clears once a load-strobe occurs CMPA shadow FIFO not full yet. * \Return None */ static void EPWM_CCshdwafull_config(uint32_t address,uint16_t shdwafull) { CSL_epwmRegs *epwmModule1; epwmModule1 =(CSL_epwmRegs *) address; epwmModule1->CMPCTL = ((epwmModule1->CMPCTL & EPWM_SHDWAFULL_MASK) | (shdwafull<<EPWM_shdwafull)); } /* * Function Name:EPWM_ldaqamode_config * Parameter: EPWM_ldaqamode 2 bit ldaqamode value * Address of the Module * Return Value: Void * Remarks: * This function configures Action Qualifier submodule. * This function is used to set ldaqamode bit to be set in AQCTL Register. * This function is used to say Time-base counter equal to zero (TBCTR = 0x0000)01: Load on CTR = PRD: Time-base counter equal to period (TBCTR = TBPRD). * \Return None */ static void EPWM_ldaqamode_config(uint32_t address,uint16_t ldaqamode) { CSL_epwmRegs *epwmModule1; epwmModule1 =(CSL_epwmRegs *) address; epwmModule1->AQCTL = ((epwmModule1->AQCTL &EPWM_LDAQAMODE_MASK) | (ldaqamode)); } /* * Function Name:EPWM_shdwaqamode_config * Parameter: EPWM_shdwaqamode 1 bit shdwaqamode value. * Return Value: Void * Remarks: * This function configures Action Qualifier submodule. * This function is used to set shdwaqamode bit to be set in AQCTL Register. * In this function only the Active action qualifier register is used. All writes/reads via the CPU directly access the Active register. * \Return None */ static void EPWM_shdwaqamode_config(uint32_t address,uint16_t shdwaqamode) { CSL_epwmRegs *epwmModule1; epwmModule1 =(CSL_epwmRegs *) address; epwmModule1->AQCTL = ((epwmModule1->AQCTL & EPWM_SHDWAQAMODE_MASK) | (shdwaqamode<<EPWM_shdwaqamode)); }