/*
 * main.c
 *
 *  Created on: 2018321
 *      Author: njc
 */

#include<F28x_Project.h>

//
void InitInvtPwmCfg(void);
void EPwmDutyUpdate(float inputdata);

void main()
{
    EALLOW;
    ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV = 0;//޸pwmʱӷƵǿֱ
    EDIS;
    //ʼϵͳ
    InitSysCtrl();

    //PIEжϳʼ
    DINT;
    InitPieCtrl();
    IFR = 0x0000;
    IER = 0x0000;
    InitPieVectTable();
    EINT;
    ERTM;

    //EPWMʼ
    //

    EALLOW;
    CpuSysRegs.PCLKCR2.bit.EPWM6 = 1;//ʼpwmʱ
    CpuSysRegs.PCLKCR2.bit.EPWM2 = 1;
    EDIS;

    InitGpio();//ʼIO
    InitEPwm6Gpio();
    InitEPwm2Gpio();

    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;
    EDIS;
    InitInvtPwmCfg();//epwm
    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
    EDIS;

    EPwmDutyUpdate(0.5);
    while(1);

}
//ʼpwm
void InitInvtPwmCfg(void)
{

    //λͬ·
    EPwm1Regs.TBCTL.bit.CTRMODE = 2;
    EPwm1Regs.TBPRD = 500;
    EPwm1Regs.TBCTL.bit.PHSEN = 0;
    EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;
    EPwm1Regs.TBCTL.bit.CLKDIV = 0;
    EPwm1Regs.TBCTL.bit.SYNCOSEL = 1;
    EALLOW;
    SyncSocRegs.SYNCSELECT.bit.EPWM4SYNCIN = 0;
    EDIS;
    EPwm4Regs.TBCTL.bit.CTRMODE = 2;
    EPwm4Regs.TBPRD = 500;
    EPwm4Regs.TBCTL.bit.PHSEN = 1;
    EPwm4Regs.TBCTL.bit.PHSDIR = 1;//λͬΪ
    EPwm4Regs.TBPHS.bit.TBPHS = 0x0000;
    EPwm4Regs.TBCTL.bit.HSPCLKDIV = 0;
    EPwm4Regs.TBCTL.bit.CLKDIV = 0;
    EPwm4Regs.TBCTL.bit.SYNCOSEL = 0;
    EPwm5Regs.TBCTL.bit.CTRMODE = 2;
    EPwm5Regs.TBPRD = 500;
    EPwm5Regs.TBCTL.bit.PHSEN = 1;
    EPwm5Regs.TBCTL.bit.PHSDIR = 1;
    EPwm5Regs.TBPHS.bit.TBPHS = 0x0000;
    EPwm5Regs.TBCTL.bit.HSPCLKDIV = 0;
    EPwm5Regs.TBCTL.bit.CLKDIV = 0;
    EPwm5Regs.TBCTL.bit.SYNCOSEL = 0;

    //ȫĹpwm
    EPwm2Regs.TBCTL.bit.CTRMODE = 2;//ģʽ
    EPwm2Regs.TBPRD = 500;//200khzƵ

    EPwm2Regs.TBCTL.bit.PHSDIR = 1;
    EPwm2Regs.TBCTL.bit.PHSEN = 1;
    EPwm2Regs.TBPHS.bit.TBPHS = 0x0000;
    EPwm2Regs.TBCTR = 0x0000;
    EPwm2Regs.TBCTL.bit.HSPCLKDIV = 0;
    EPwm2Regs.TBCTL.bit.CLKDIV = 0;

    EPwm2Regs.CMPCTL.bit.SHDWAMODE = 0;
    EPwm2Regs.CMPCTL.bit.LOADAMODE = 0;

    EPwm2Regs.CMPA.bit.CMPA = 250;
    EPwm2Regs.AQCTLA.bit.CAD = 0x2;//ø
    EPwm2Regs.AQCTLA.bit.CAU = 0x1;//õ
    EPwm2Regs.AQCTLA.bit.ZRO = 0x2;

    EPwm2Regs.DBCTL.bit.IN_MODE = 0;
    EPwm2Regs.DBCTL.bit.SHDWDBFEDMODE = 0x1;
    EPwm2Regs.DBCTL.bit.SHDWDBREDMODE = 0x1;
    EPwm2Regs.DBCTL.bit.SHDWDBFEDMODE = 0x1;
    EPwm2Regs.DBCTL.bit.SHDWDBREDMODE = 0x1;
    EPwm2Regs.DBCTL.bit.OUT_MODE = 0x3;
    EPwm2Regs.DBCTL.bit.POLSEL = 0x2;
    EPwm2Regs.DBFED.bit.DBFED = 40;//ʱ200ns
    EPwm2Regs.DBRED.bit.DBRED = 40;

    EPwm2Regs.TBCTL.bit.SYNCOSEL = 0;//ͬźͬź

    EPwm6Regs.TBCTL.bit.CTRMODE = 2;//ģʽ
    EPwm6Regs.TBPRD = 500;//200khzƵ

    EPwm6Regs.TBCTL.bit.PHSDIR = 1;
    EPwm6Regs.TBCTL.bit.PHSEN = 1;
    EPwm6Regs.TBPHS.bit.TBPHS = 0x0000;
    EPwm6Regs.TBCTR = 0x0000;
    EPwm6Regs.TBCTL.bit.HSPCLKDIV = 0;
    EPwm6Regs.TBCTL.bit.CLKDIV = 0;

    EPwm6Regs.CMPCTL.bit.SHDWAMODE = 0;
    EPwm6Regs.CMPCTL.bit.LOADAMODE = 0;

    EPwm6Regs.CMPA.bit.CMPA = 380;
    EPwm6Regs.AQCTLA.bit.CAD = 0x2;//ø
    EPwm6Regs.AQCTLA.bit.CAU = 0x1;//õ
    EPwm6Regs.AQCTLA.bit.ZRO = 0x2;

    EPwm6Regs.DBCTL.bit.IN_MODE = 0;
    EPwm6Regs.DBCTL.bit.SHDWDBFEDMODE = 0x1;
    EPwm6Regs.DBCTL.bit.SHDWDBREDMODE = 0x1;
    EPwm6Regs.DBCTL.bit.SHDWDBFEDMODE = 0x1;
    EPwm6Regs.DBCTL.bit.SHDWDBREDMODE = 0x1;
    EPwm6Regs.DBCTL.bit.OUT_MODE = 0x3;
    EPwm6Regs.DBCTL.bit.POLSEL = 0x2;
    EPwm6Regs.DBFED.bit.DBFED = 40;
    EPwm6Regs.DBRED.bit.DBRED = 40;

    EPwm6Regs.ETSEL.bit.SOCAEN = 0x1;
    EPwm6Regs.ETSEL.bit.SOCASEL = 0x2;//ռձĲ
    EPwm6Regs.ETPS.bit.SOCAPRD = 0x1;

    EPwm6Regs.TBCTL.bit.SYNCOSEL = 0;//ͬźֱӲͬź
}


//PWMģռձȸº
//TMUʱ˺Ҫ39cyc
//ʹFPUʱ˺Ҫ39cyc
void EPwmDutyUpdate(float inputdata)
{
    //ռձȼм
    float dutymiddata1,dutymiddata2;
    float halfinputdata;
    halfinputdata = 0.5 * inputdata;
    dutymiddata1 = halfinputdata + 0.5;
    dutymiddata2 = 0.5 - halfinputdata;
    EPwm6Regs.CMPA.bit.CMPA = (int)(dutymiddata2*500);
    EPwm2Regs.CMPA.bit.CMPA = (int)(dutymiddata1*500);
}

