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

📄 sci_v_nd_spwm.c

📁 本程序通过F2812实现SPWM,开发平台CCS
💻 C
字号:
#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File
#include "float.h"
#include "math.h"
#define PI 3.1415926
volatile unsigned int f_s,N,i;/*f_s:信号频率,N:调制比*/
volatile float M,sindata,Tz;
volatile float *pa,*Dataram;
volatile long int ftime=15000;//CPU频率为150M=150 00*10000
interrupt void T1P_PWMISR(void); 
#pragma CODE_SECTION(T1P_PWMISR, "ramfuncs");
interrupt void T1P_PWMISR(void)    // EV-A
{
  // Insert ISR Code here

  // To receive more interrupts from this PIE group, acknowledge this interrupt 
  // PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
  
  // Next two lines for debug only to halt the processor here
  // Remove after inserting ISR Code
  if(EvaRegs.EVAIFRA.all&&0x0080)
    {
      if(i>=N)
        i=0;
        EvaRegs.CMPR1=(EvaRegs.T1PR>>1)*(1-M*(*(pa+i)));
    }
   i++;
   EvaRegs.EVAIFRA.bit.T1PINT=1; 	// Clear Interrupt flag
   PieCtrlRegs.PIEACK.all|= PIEACK_GROUP2;  // Issue PIE ack
  asm(" clrc INTM");  
}


void Init_spwm(void)
{
 f_s=400;
 M=0.9;
 N=99;//对应于f_s=400,fc=39.6k
 while(N<=40000)
      N+=3;
 Tz=10000*1.0/(f_s*N);
}

//Gpio 初始化
void Init_Gpio(void)
{EALLOW;
 GpioMuxRegs.GPAMUX.all=0x0003;//pwm0 1
 GpioMuxRegs.GPADIR.all=0x0003;//OUT
 GpioMuxRegs.GPDMUX.all=0x0000;//state
 GpioMuxRegs.GPADIR.all=0x0000;
 EDIS;
}


//EVA 初始化
void Init_EVA(void)
{/*T1 time 比较输出*/
 EvaRegs.GPTCONA.all=0xe065;
 EvaRegs.ACTRA.all=0x0666;//比较方式控制
 EvaRegs.T1PR=Tz*ftime/2;
 EvaRegs.CMPR1=(EvaRegs.T1PR>>1)*(1-M*(*(pa+i)));
 EvaRegs.DBTCONA.all=0x0f35;//死区1us
 EvaRegs.T1CNT=0x0000;
 EvaRegs.COMCONA.all=0x4b00;
 EvaRegs.COMCONA.all=0xcb00;//使能比较
 EvaRegs.T1CON.all=0xc80c;
 EvaRegs.T1CON.all=0xc84c;
}



//sin值
void Init_sindata(void)
{ sindata=0;
  Dataram=(float*)0x100000;
 for(i=1;i<=N;i++)
  {sindata=2*PI;
   sindata=sindata*f_s;
   sindata=sindata*i*Tz/10000;
   sindata=sin(sindata);
   *Dataram++=sindata;
  }
}

void main(void)
{
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP281x_SysCtrl.c file.
   InitSysCtrl();
   EALLOW;
   SysCtrlRegs.HISPCP.all = 0x0000;
   SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;
   EDIS;
   
   Init_Gpio();
   
   Init_spwm();
   
   Init_sindata();
   i=0;
   pa=(float*)0x100000;
   
   Init_EVA();
   
   DINT;
// Disable CPU interrupts and clear all CPU interrupt flags:
   IER = 0x0000;//开INT2 CPU 中断
   IFR = 0x0000;
   
   InitPieCtrl();
   
   InitPieVectTable();
   
   EALLOW;										// This is needed to write to EALLOW protected registers
   PieVectTable.T1PINT = &T1P_PWMISR;
   EDIS;   
   
   PieCtrlRegs.PIECRTL.bit.ENPIE = 1;   
   PieCtrlRegs.PIEIER2.bit.INTx4 = 1;
   
   EvaRegs.EVAIMRA.all=0x0080;//开T1周期中断
   EvaRegs.EVAIFRA.all=0x0080;//清T1周期中断   
   
   IER|= M_INT2;//开INT2 CPU 中断

   
   EnableInterrupts();
   pa=(float*)0x100000;
   for(;;);

}

⌨️ 快捷键说明

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