#include "adc.h"
#include "f28x_project.h"
#include "ctrl.h"
#include "Init_pwm.h"
#include "FaultDetect.h"
#include "FunState.h"
#include "FaultDetect.h"
#include "MonitorSci.h"

struct	CTRL_MES CharVbusCtrMes;

struct	CTRL_MES VoutCtrMes;
struct	CTRL_MES IoutCtrMes;
struct	CTRL_MES VbusCtrMes;
struct	CTRL_MES IbusCtrMes;
struct  CTRLMESS CtrlMess;

void Ctrl_init(struct	CTRL_MES* cs)
{
	cs->Ctrl.fRef 		= 0;
	cs->Ctrl.foutpre 	= 0;
	cs->Ctrl.fout	 	= 0;
	//Îó²î
	cs->Ctrl.fERR_N     = 0;
	cs->Ctrl.fERR_N_pre = 0;

	cs->Ctrl.fERR_N_pre_pre  = 0;
	//Îó²îÎ¢·Ö
	cs->Ctrl.fECN_N     = 0;

	
    cs->fCMD            = 0;
}

#pragma CODE_SECTION(Ctrldata_init, ".TI.ramfunc");
void Ctrldata_init(struct	CTRL_MES * cs,float k1,
float k2,float k3,float min,float max)
{
	cs->Ctrl.fRef 		= 0;
	cs->Ctrl.foutpre 	= 0;
	cs->Ctrl.fout	 	= 0;
	//Îó²î
	cs->Ctrl.fERR_N     = 0;
	cs->Ctrl.fERR_N_pre = 0;

	cs->Ctrl.fERR_N_pre_pre  = 0;
	//Îó²îÎ¢·Ö
	cs->Ctrl.fECN_N     = 0;

    cs->Ctrl.fk1        = k1;
    cs->Ctrl.fk2        = k2;
    cs->Ctrl.fk3        = k3;


    cs->Ctrl.foutMax    = max;
    cs->Ctrl.foutMin    = min;

//    cs->fCMD            = 0;
}

void Fun_Ctrl_Reset(void)
{
    my_memset(&VoutCtrMes,0,sizeof(VoutCtrMes));
    my_memset(&IoutCtrMes,0,sizeof(IoutCtrMes));
    my_memset(&VbusCtrMes,0,sizeof(VbusCtrMes));
    my_memset(&IbusCtrMes,0,sizeof(IbusCtrMes));
    my_memset(&CharVbusCtrMes,0,sizeof(CharVbusCtrMes));    
}


#pragma CODE_SECTION(Ctrl_Fun, ".TI.ramfunc");
void Ctrl_Fun(void)
{
    static Uint16 num = 0;
    CtrlMess.uEnableFlag = 1;

//    if(RunState.uOpenTestTim<=2)
//    {
////        VoutCtrMes.Ctrl.fout = 250;
//    }
//    else 
//    if(RunState.uOpenTestTim<=4)
//    {            
//                        
////        VoutCtrMes.Ctrl.fout = 1250;
        VoutCtrMes.Ctrl.fout = 250 + 50*num;
//    }
//    else
//    {            
//        CtrlMess.uEnableFlag = 0;
        if(RunState.uOpenTestTim>=6)
        {
            CtrlMess.uSycEnable   = 0;
            RunState.uOpenTestTim = 0;
        }
        else
        {
            CtrlMess.uSycEnable   = 1;
        }
//        
////                VoutCtrMes.Ctrl.fout = 250;
//    }

    num++;

    if(num>=21)
    {
        num = 0;
//        CtrlMess.uSycEnable   = 0;
    }
    
//    if(num>=4)
//    {
//        num = 0;
//    }
    

    CtrlMess.fprd   = VoutCtrMes.Ctrl.fout;

//	CtrlMess.fdb    = 151.98f - CtrlMess.fprd*0.0896f;
//    y = -0.264x + 214.26
    CtrlMess.fdb    = 214.26f - CtrlMess.fprd*0.264f;
	
    if(CtrlMess.fdb<40.0f)
	{
		CtrlMess.fdb = 40.0f;
	}
	
//    if(VoutCtrMes.Ctrl.fout>694)
//    {
//        CtrlMess.uSycEnable = 1;
//        
////                CtrlMess.fSyc_prd   = VoutCtrMes.Ctrl.fout;
////        CtrlMess.fSyc_db    = 700;
//        if(694>(CtrlMess.fprd-CtrlMess.fdb))
//        {
//            CtrlMess.fSyc_db = CtrlMess.fdb;
//        }
//        else
//        {
//            CtrlMess.fSyc_db = (CtrlMess.fprd-694);
//        }
//    }
//    else
//    {
//        CtrlMess.uSycEnable = 1;
//        
////                CtrlMess.fSyc_prd   = VoutCtrMes.Ctrl.fout;
//        CtrlMess.fSyc_db    = CtrlMess.fdb;
//    }

    if((CtrlMess.fprd-CtrlMess.fdb)<660)
    {
        CtrlMess.fSyc_db = CtrlMess.fdb;
    }
    else
    {
        CtrlMess.fSyc_db = (CtrlMess.fprd-660);
    }

    PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
}

