📄 eva_interrupt.c
字号:
#include "DSP28_Device.h" // DSP281x Headerfile Include File
#include "DSP28_Adc.h" // DSP281x Examples Include File
/*
#pragma CODE_SECTION(T1PINT_isr, "ramfuncs");
#pragma CODE_SECTION(T1UFINT_isr, "ramfuncs");
*/
extern void Vd_pi(void);
extern void Id_pi(void);
extern float Vd,Id,Vr,M;
/*
extern Uint16 Ramfuncs_LoadStart;
extern Uint16 Ramfuncs_LoadEnd;
extern Uint16 Ramfuncs_RunStart;
*/
Uint16 LoopCount;
Uint16 i=0;
Uint16 Current1[3];
Uint16 Current2[3];
Uint16 Voltage1[3];
Uint16 Voltage2[3];
Uint16 switch_flag;
Uint16 Softvoltage=0;
Uint16 sum1=0,Sum1=0;
Uint16 sum2=0,Sum2=0;
Uint16 sum3=0,Sum3=0;
Uint16 sum4=0,Sum4=0;
Uint16 Uinref=0;
float M_ratio;
int k;
int speed1=0;
int speed2=0;
int Time=0;
int softstart_flag=0;
void StartStop_Control(void);
void Speedcontrol(int speed1, int speed2);//速度控制函数
void ADCaverage(void);
void Delay(int Time);
void SoftStart(void);
void Switchoff(void);
void Vd_pi(void);
void Protect(void);
/*
void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr);
*/
interrupt void T1PINT_isr(void);
interrupt void T1UFINT_isr(void);
main()
{
InitSysCtrl();//系统初始化
switch_flag=1;//置关机标志
// while(GpioDataRegs.GPFDAT.bit.GPIOF13)//开关机拦截
//{ }
InitGpio(); // 输入输出端口初始化
DINT;
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();
InitPieVectTable();
EALLOW;
PieVectTable.T1PINT = &T1PINT_isr;//向中断向量表写入T1周期中断地址
PieVectTable.T1UFINT = &T1UFINT_isr;//向中断向量表写入T1下益中断地址
EDIS;
InitEv();//
InitAdc();//
// memcpy(&Ramfuncs_LoadStart, &Ramfuncs_LoadEnd, &Ramfuncs_LoadEnd-&Ramfuncs_LoadStart);
// Call Flash Initialization to setup flash waitstates
// This function must reside in RAM
// InitFlash();
PieCtrl.PIEIER2.bit.INTx4 = 1;
PieCtrl.PIEIER2.bit.INTx6 = 1;//原来为1
IER |= M_INT2; // Enable CPU Interrupt 2
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
while(1)
{
StartStop_Control();
Protect();
}
}//main层
interrupt void T1PINT_isr(void)
{
if(softstart_flag==1)
{
//ADCaverage();
Vd_pi();
Id_pi();
}
AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
EvaRegs.EVAIFRA.bit.T1PINT=1;//Clear interrupt flag bit 7
PieCtrl.PIEACK.all = PIEACK_GROUP2; // Acknowledge interrupt to PIE
EINT;
return;//
}
interrupt void T1UFINT_isr(void)
{
EvaRegs.EVAIFRA.bit.T1UFINT=1;
for(i=0;i<=3;i++)
{
Current1[i] = AdcRegs.RESULT0 >>4;//
Current2[i] = AdcRegs.RESULT1 >>4;//
Voltage1[i] = AdcRegs.RESULT2 >>4;//
Voltage2[i] = AdcRegs.RESULT3 >>4;//
}
ADCaverage();
PieCtrl.PIEACK.all = PIEACK_GROUP2; // Acknowledge interrupt to PIE
EINT;
return;//
}
void Protect()
{
if(Id>=45)
softstart_flag=0;
EvaRegs.CMPR1=5000;
}
void Speedcontrol(int speed1,int speed2)
{
EvaRegs.CMPR1 = speed1;
EvaRegs.CMPR2 = speed2;
}
void ADCaverage()
{
if(i==4) //
{
for(k=0;k<=3;k++)
{
sum1=sum1+Current1[k];
sum2=sum2+Current2[k];
sum3=sum3+Voltage1[k];
sum4=sum4+Voltage2[k];
}
Sum1=sum1/4;
Id=sum2*0.0033;//=Sum2*3*18/4095;//输出电流乘18和电压基准一样
Vd=sum3*0.0022;//=Sum3*3*18/4095;//输出电压
Sum4=sum4/4;
// M_ratio=Sum4;//电位器调节占空比
sum1=0;
sum2=0;
sum3=0;
sum4=0;
k=0;
i=0;
}
}
void StartStop_Control()
{
if(switch_flag==1)
{
if(GpioDataRegs.GPFDAT.bit.GPIOF13==0)
SoftStart();
}
else if(switch_flag==0)
{
if(GpioDataRegs.GPFDAT.bit.GPIOF13==1)
//Delay(10);
if(GpioDataRegs.GPFDAT.bit.GPIOF13==1)
{
Switchoff();
}
}
}
void SoftStart()
{
GpioDataRegs.GPEDAT.bit.GPIOE2=1;//
switch_flag=0;
softstart_flag=1;
for(Softvoltage=0;Softvoltage<=5000;Softvoltage++)
{
//Delay(5);
EvaRegs.CMPR1=Softvoltage;//Vr
EvaRegs.CMPR2=Softvoltage;//
}
}
void Switchoff()
{
GpioDataRegs.GPEDAT.bit.GPIOE2=0;//
switch_flag=1;
Uinref=0;
//Speedcontrol(Uinref,Uinref);
}
void Delay(int Time)
{
while(Time>0)
Time--;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -