I have generated floating point PWM outputs using HET and while not using the delay the PWM output is fine and if I use for loop delay in the main function the while loop is getting executed only once (or the PWM output is generated once - I want to output with ON/OFF time delay of 3 seconds ON time and 1 second OFF time continuously). please help me short out the problem.
Program:
/* USER CODE BEGIN (0) */
/* USER CODE END */
/* USER CODE BEGIN (4) */
/* USER CODE END */
#include "sys_common.h"
/* USER CODE BEGIN (1) */
#include "het.h"
/* USER CODE BEGIN (2) */
static const uint32 s_het1pwmPolarity[8U] = { 3U, 3U, 3U, 3U, 3U, 3U, 3U, 3U, };
hetSIGNAL_t setup_pwm;
void pwmSetDuty_full(hetRAMBASE_t * hetRAM, uint32 pwm, uint32 fuse_pwmDuty,
uint32 pwmdutty);
void wait(uint32 time);
//int j=0;
void main(void)
{
/* USER CODE BEGIN (3) */
hetInit();
while(1)
{
int i;
setup_pwm.period=(float64)1e6/1000; //5khz
float DuttyC=45.7/100;
uint32 Dutcycle=setup_pwm.period*DuttyC;
uint32 Porcentdutty=DuttyC*100;
pwmSetSignal(hetRAM1,pwm0,setup_pwm);
pwmSetDuty_full(hetRAM1,pwm0,Porcentdutty,Dutcycle);
setup_pwm.period=(float64)1e6/1000;
float DuttyC1=45.8/100;
uint32 Dutcycle1=setup_pwm.period*DuttyC1;
uint32 Porcentdutty1=DuttyC1*100;
pwmSetSignal(hetRAM1,pwm1,setup_pwm);
pwmSetDuty_full(hetRAM1,pwm1,Porcentdutty1,Dutcycle1);
setup_pwm.period=(float64)1e6/1000;
float DuttyC2=45.9/100;
uint32 Dutcycle2=setup_pwm.period*DuttyC2;
uint32 Porcentdutty2=DuttyC2*100;
pwmSetSignal(hetRAM1,pwm2,setup_pwm);
pwmSetDuty_full(hetRAM1,pwm2,Porcentdutty2,Dutcycle2);
setup_pwm.period=(float64)1e6/1000;
float DuttyC3=46.0/100;
uint32 Dutcycle3=setup_pwm.period*DuttyC3;
uint32 Porcentdutty3=DuttyC*100;
pwmSetSignal(hetRAM1,pwm3,setup_pwm);
pwmSetDuty_full(hetRAM1,pwm3,Porcentdutty3,Dutcycle3);
setup_pwm.period=(float64)1e6/1000;
float DuttyC4=46.1/100;
uint32 Dutcycle4=setup_pwm.period*DuttyC4;
uint32 Porcentdutty4=DuttyC4*100;
pwmSetSignal(hetRAM1,pwm4,setup_pwm);
pwmSetDuty_full(hetRAM1,pwm4,Porcentdutty4,Dutcycle4);
setup_pwm.period=(float64)1e6/1000;
float DuttyC5=46.2/100;
uint32 Dutcycle5=setup_pwm.period*DuttyC5;
uint32 Porcentdutty5=DuttyC5*100;
pwmSetSignal(hetRAM1,pwm5,setup_pwm);
pwmSetDuty_full(hetRAM1,pwm5,Porcentdutty5,Dutcycle5);
setup_pwm.period=(float64)1e6/1000;
float DuttyC6=46.3/100;
uint32 Dutcycle6=setup_pwm.period*DuttyC6;
uint32 Porcentdutty6=DuttyC6*100;
pwmSetSignal(hetRAM1,pwm6,setup_pwm);
pwmSetDuty_full(hetRAM1,pwm6,Porcentdutty6,Dutcycle6);
setup_pwm.period=(float64)1e6/1000;
float DuttyC7=99.1/100;
uint32 Dutcycle7=setup_pwm.period*DuttyC7;
uint32 Porcentdutty7=DuttyC7*100;
pwmSetSignal(hetRAM1,pwm7,setup_pwm);
pwmSetDuty_full(hetRAM1,pwm7,Porcentdutty7,Dutcycle7);
for(i=0;i<11000000;i++);
for(i=0;i<11000000;i++);
for(i=0;i<11000000;i++);
/*
pwmStop(hetRAM1, pwm0);
pwmStop(hetRAM1, pwm1);
pwmStop(hetRAM1, pwm2);
pwmStop(hetRAM1, pwm3);
pwmStop(hetRAM1, pwm4);
pwmStop(hetRAM1, pwm5);
pwmStop(hetRAM1, pwm6);
setup_pwm.period=(float64)1e6/1000;
DuttyC7=99.1/100;
Dutcycle7=setup_pwm.period*DuttyC7;
Porcentdutty7=DuttyC7*100;
pwmSetSignal(hetRAM1,pwm7,setup_pwm);
pwmSetDuty_full(hetRAM1,pwm7,Porcentdutty7,Dutcycle7);
for(i=0;i<33000000;i++);
*/
pwmStop(hetRAM1, pwm0);
pwmStop(hetRAM1, pwm1);
pwmStop(hetRAM1, pwm2);
pwmStop(hetRAM1, pwm3);
pwmStop(hetRAM1, pwm4);
pwmStop(hetRAM1, pwm5);
pwmStop(hetRAM1, pwm6);
pwmStop(hetRAM1, pwm7);
for(i=0;i<11000000;i++);
}
}
/* USER CODE BEGIN (4) */
void wait(uint32 time)
{
while(time){time--;};
}
void pwmSetDuty_full(hetRAMBASE_t * hetRAM, uint32 pwm, uint32 fuse_pwmDuty,
uint32 pwmdutty) {
uint32 action;
uint32 pwmPolarity = 0U;
uint32 var;
if (hetRAM == hetRAM1) {
pwmPolarity = s_het1pwmPolarity[pwm];
}
if (fuse_pwmDuty == 0U) {
action = (pwmPolarity == 3U) ? 0U : 2U;
} else if (fuse_pwmDuty >= 100U) {
action = (pwmPolarity == 3U) ? 2U : 0U;
} else {
action = pwmPolarity;
}
//var = (uint32) pwmdutty * 1.2613; //((pwmPeriod * pwmDuty) / 100U)
var = (uint32) pwmdutty * 0.86;
hetRAM->Instruction[(pwm << 1U) + 41U].Control = ((hetRAM->Instruction[(pwm
<< 1U) + 41U].Control) & (~(uint32) (0x00000018U)))
| (action << 3U);
hetRAM->Instruction[(pwm << 1U) + 41U].Data = (var << 7U) + 128U;
}

