⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main_dsp_pwm.c

📁 2812演示程序
💻 C
字号:
#include "DSP28_Device.h"
//void InitGpio(void);
//void InitSystem(void);
interrupt void T3_Compare_isr(void);
interrupt void T1_Compare_isr(void);
interrupt void ADC_FIR_INT_ISR(void);
int ADCRESULT0=0,ADCRESULT1=0,ADCRESULT2=0,PRECMP=0;
short int tem=0,forward=0,backward=0,STP=0,slow=0;
void main(void)
{
 InitSysCtrl();
 InitGpio();
 InitPieCtrl();
 InitPieVectTable();
 IntAdc();
 EALLOW;
 PieVectTable.T3CINT = &T3_Compare_isr;
 PieVectTable.T1CINT = &T1_Compare_isr;
 PieVectTable.ADCINT = &ADC_FIR_INT_ISR;
 EDIS;
 PieCtrlRegs.PIEIER2.bit.INTx5 = 1;
 PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
 PieCtrlRegs.PIEIER4.bit.INTx5 = 1;
 IER|=3;
 EINT;
 ERTM;
 EvaRegs.T1PR=37500;//外部晶振为30MHZ,锁相环倍频为5达150MHZ,HISPCP分频系数为2
 EvaRegs.T1CNT=0;   //HSPCLK==》75MHZ,1/75M*37500=0.0005S对应2KHZ
 EvaRegs.T1CON.all=0x1002;//0x1002=0001 0000 0000 0010b,连续增,内部时钟不分频(HSPCLK),TECMPR使能比较,TENABLE=0禁止定时器
 EvaRegs.T1CMPR=PRECMP;    //0.5占空比
 EvaRegs.GPTCONA.bit.TCOMPOE=1;    //T1/T2驱动T1PWM/T2PWM
 EvaRegs.GPTCONA.bit.T1PIN=2;      //高有效
 EvaRegs.GPTCONA.bit.T2TOADC=2;   //由T2周期启动ADC
 EvaRegs.EVAIMRA.bit.T1CINT=1;     //使能比较中断
 EvaRegs.T1CON.bit.TENABLE=0;    //暂不开定时器
 EvaRegs.T2CON.all=0x0000;       //T2禁止
 EvaRegs.T2CNT=0; 
 EvaRegs.T2PR=1499;        //1/75MHZ*1499=0.00002S对应50KHZ
 EvaRegs.T2CON.all=0x1040; //0x1040=0001 0000 0100 0000b,连续增,使能定时器2
   EvbRegs.T3PR=37500;//外部晶振为30MHZ,锁相环倍频为5达150MHZ,HISPCP分频系数为2
 EvbRegs.T3CNT=0;   //HSPCLK==》75MHZ,1/75M*37500=0.0005S对应2KHZ
 EvbRegs.T3CON.all=0x1002;//0x1002=0001 0000 0000 0010b,连续增,内部时钟不分频(HSPCLK),TECMPR使能比较,TENABLE=0禁止定时器
 EvbRegs.T3CMPR=PRECMP;    //0.5占空比
 EvbRegs.GPTCONB.bit.TCOMPOE=1;    //T3/T4驱动T3PWM/T4PWM
 EvbRegs.GPTCONB.bit.T3PIN=2;      //高有效
 EvbRegs.EVBIMRA.bit.T3CINT=1;     //使能比较中断
 EvbRegs.T3CON.bit.TENABLE=0;    //暂不开定时器
 while(1)
 {
   EALLOW;
   SysCtrlRegs.WDKEY=0xAA;
   EDIS;
   if((GpioDataRegs.GPBDAT.all&&0x0030)==0x0020)  //前进按钮
   { 
     tem=1;
     Delayus(20);
     if((GpioDataRegs.GPBDAT.all&&0x0030)==0x0020)
      {
       if(tem==1) 
       { 
         forward=1;
         backward=0;
         STP=0;
        }
       else  tem=0;
      }
    }
   if((GpioDataRegs.GPBDAT.all&&0x0030)==0x0010)  //前进按钮
   { 
     tem=1;
     Delayus(20);
     if((GpioDataRegs.GPBDAT.all&&0x0030)==0x0010)
      {
       if(tem==1) 
       { 
         forward=1;
         backward=0;
         STP=0;
        }
       else  tem=0;
      }
    }
   if(GpioDataRegs.GPBDAT.bit.GPIOB3==0)          //停止按钮
   { 
     tem=1;
     Delayus(20);
     if(GpioDataRegs.GPBDAT.bit.GPIOB3==0)
      {
       if(tem==1) 
       { 
         forward=0;
         backward=0;
         STP=1;
         slow=0;
        }
       else  tem=0;
      }
    }
   if(GpioDataRegs.GPADAT.bit.GPIOA0==0)        //刹车
   { 
     tem=1;
     Delayus(20);
     if(GpioDataRegs.GPADAT.bit.GPIOA0==0)
      {
       if(tem==1) 
       { 
         slow=1;
        }
       else  tem=0;
      }
    }
    else slow=0; 
  if(forward==1)
  {
   GpioDataRegs.GPBDAT.bit.GPIOB1=1;
   EvaRegs.T1CON.bit.TENABLE=1;      //PWM开 
   EvbRegs.T3CON.bit.TENABLE=1;
  }
  if(backward==1)
  {
   GpioDataRegs.GPBDAT.bit.GPIOB2=1;
   EvaRegs.T1CON.bit.TENABLE=1;      //PWM开 
   EvbRegs.T3CON.bit.TENABLE=1;
  }
  if(slow==1)
  {
   AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1;
   if(ADCRESULT0>4095)
   PRECMP=37500;
   else if(ADCRESULT0<2389)
   PRECMP=0;
   else
   PRECMP=22*(ADCRESULT0-2389);
   }
  else 
  AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=0;
  if(STP==1)
  {
   GpioDataRegs.GPBDAT.bit.GPIOB1=0; 
   GpioDataRegs.GPBDAT.bit.GPIOB2=0;
   EvaRegs.T1CON.bit.TENABLE=0;       
   EvbRegs.T3CON.bit.TENABLE=0;    
  }
  }
}
interrupt void T1_Compare_isr(void)
 {
  EALLOW;
  SysCtrlRegs.WDKEY = 0x55;
  SysCtrlRegs.WDKEY = 0xAA;
  EDIS;
  EvaRegs.EVAIFRA.bit.T1CINT=1;
  PieCtrlRegs.PIEACK.all=PIEACK_GROUP2;
  }
interrupt void T3_Compare_isr(void)
 {
  EALLOW;
  SysCtrlRegs.WDKEY = 0x55;
  SysCtrlRegs.WDKEY = 0xAA;
  EDIS;
  EvbRegs.EVBIFRA.bit.T3CINT=1;
  PieCtrlRegs.PIEACK.all=PIEACK_GROUP4;
  }
interrupt void ADC_FIR_INT_ISR(void)
  {
   PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;
   AdcRegs.ADCTRL2.bit.RST_SEQ1=1;
   AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
   ADCRESULT0=AdcRegs.RESULT0>>4;
   ADCRESULT1=AdcRegs.RESULT1>>4;
   ADCRESULT2=AdcRegs.RESULT2>>4;
  }
//===========================================================================
// No more.
//=========================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -