📄 f2812_spwm.c
字号:
#include "DSP28_Device.h"
#include "DSP28_Ev.h"
#include "math.h"
#include "stdio.h"
void init_eva(void);
void zkb(void);
void interrupt cmprz(void);
#define NX 32
#define PI 3.14
int h1=0;
int k0=0;
int h2;
int flag1;
float M=0.8;
double a[NX];
void main(void)
{
InitSysCtrl();
DINT; //关全局中断
IER = 0x0000; //中断使能
IFR = 0x0000; //中断标志位
/*初始化PIE控制寄存器*/
InitPieCtrl();
/*初始化PIE矢量表*/
InitPieVectTable();
InitEv();
/* EALLOW;
GpioMuxRegs.GPAMUX.all = 0x00FF; // EVA PWM 1-6 pins
EDIS;*/
IER |= M_INT2;
PieCtrl.PIEIER1.bit.INTx4=1;
init_eva();
EINT; //开全局中断
ERTM; // Enable Global realtime interrupt DBGM
while(1)
{
if(flag1==0)
return;
else
{
void zkb();
flag1=0;
}
/* if(k0<=32)
{
h1=(k0+11)%33;
h2=(k0+22)%33;
EvaRegs.CMPR1=a[k0];
EvaRegs.CMPR2=a[h1];
EvaRegs.CMPR3=a[h2];
flag1=1;
k0=k0+1;
}
else
{
k0=0;
}*/
}
}
void init_eva(void)
{
EvaRegs.T1PR = 1250; // Timer1 period PWM载波周期为 65536个定标的定时器时钟周期
EvaRegs.T1CNT = 0x0000; // Timer1 counter
EvaRegs.T1CON.all = 0x1042; // 选择模式产生PWM波10
EvaRegs.GPTCONA.bit.TCOMPOE = 1;
EvaRegs.GPTCONA.bit.T1PIN = 1;
EvaRegs.GPTCONA.bit.T2PIN = 2;
EvaRegs.EVAIFRA.all=0xffff;
EvaRegs.EVAIMRA.all=0xffff;
/*EvaRegs.CMPR1 = 0x0c00; //20%
EvaRegs.CMPR2 = 0x0780; //50%
EvaRegs.CMPR3 = 0x0300; //80% */
EvaRegs.ACTRA.all = 0x0666; // 输出PWM的1/3/5为高有效;2/4/6为低有效
EvaRegs.DBTCONA.all = 0x0000; // Disable deadband
EvaRegs.COMCONA.all = 0xAe00; //使能比较操作
return;
}
void zkb()
{
unsigned int n=0;
double q,l,j;
while (n<=NX)
{
q=(n+0.75);
q=q*6.28;
q/=33;
j=sin(q);
l=188*(1+M*j);//M为调制比
if(l>=21&l<=353)
a[n]=l;
else
{
if(l>353)
a[n]=375;
else
a[n]=26;
}
n=n+1;
}
}
void interrupt cmprz()
{
int h2;
int flag;
PieCtrl.PIEACK.bit.ACK6=1;
asm(" clrc SXM");
flag=(EvaRegs.EVAIFRA.all)&&0x0200;
if(flag!=0x0200)
{
EINT;
return;
}
else
{
if(k0<=32)
{
h1=(k0+11)%33;
h2=(k0+22)%33;
EvaRegs.CMPR1=a[k0];
EvaRegs.CMPR2=a[h1];
EvaRegs.CMPR3=a[h2];
flag1=1;
k0=k0+1;
}
else
{
k0=0;
}
}
EvaRegs.EVAIFRA.all=(EvaRegs.EVAIFRA.all)&&0x0200; // 清除定时器1 下溢中断标志
EINT; // 允许总中断,因一进中断服务程序后总中断就自动关闭了
return;
}
//===========================================================================
// No more.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -