📄 main.c
字号:
/*************************************************************************
filename: main.c 测试快速开入/开出的主程序
designer: 黄黎明
date: 2004/12/23
*************************************************************************/
#include "DSP28_Device.h"
void PWMPeriod(float PWM_KHz,float R);
interrupt void CapCount(void);
unsigned long CAPCOUNT; //捕获事件发生的次数
unsigned int count1;
unsigned int count2;
unsigned int count;
float PWM_Freq_KHz,CAP_Freq_KHz;
//时钟源是内部cpu时钟
void main(void)
{
CAPCOUNT = 0;
//初始化系统
InitSysCtrl();
//关中断
DINT;
IER=0x0000;
IFR=0x0000;
//初始化外围中断
InitPieCtrl();
//设置中断向量入口
EALLOW;
PieVectTable.CAPINT4 = &CapCount;
EDIS;
//使能DOUTEN
EALLOW;
GpioMuxRegs.GPDMUX.all = 0x0000;
GpioMuxRegs.GPDDIR.bit.GPIOD0 = 1;
GpioMuxRegs.GPDDIR.bit.GPIOD1 = 1;
EDIS;
GpioDataRegs.GPDDAT.bit.GPIOD0 = 1;
GpioDataRegs.GPDDAT.bit.GPIOD1 = 0;
//设置输出口
EALLOW;
GpioMuxRegs.GPAMUX.bit.PWM3_GPIOA2=1;
GpioMuxRegs.GPAMUX.bit.PWM4_GPIOA3=1;
EvaRegs.ACTR.bit.CMP3ACT=0x0001;
EvaRegs.ACTR.bit.CMP4ACT=0x0001;
EDIS;
/*------可在此部分修改PWM波形的频率,占空比------*/
//设置PWM波形的频率,占空比
PWMPeriod(0.05,0.5);
PWM_Freq_KHz = (150000.0/128/(EvaRegs.T1PR+1));
/*-----------------------------------------------*/
//使能全比较器2的PWM3、PWM4
EALLOW;
EvaRegs.COMCONA.all = 0xa640;
EDIS;
//设置输入口
EALLOW;
GpioMuxRegs.GPBMUX.bit.CAP4Q1_GPIOB8=1;//将相应引脚配置为功能引脚
GpioMuxRegs.GPBMUX.bit.CAP5Q2_GPIOB9=1;//将相应引脚配置为功能引脚
EDIS;
EvbRegs.T3CON.all=0x1742;
EvbRegs.T3PR = 0xffff;
EvbRegs.CAPFIFOB.all=0x0000; //EVB的捕获单元FIFO状态为空
NOP;
NOP;
EvbRegs.CAPCONB.all=0x2280; //设置捕获单元
//使能捕获单元4中断
EvbRegs.EVBIFRC.bit.CAP4INT=1;//清中断标志位
EvbRegs.EVBIMRC.bit.CAP4INT=1;//使能捕获单元4中断
EvbRegs.EVBIMRC.bit.CAP5INT=0;//禁止捕获单元5中断
//启动比较操作,启动输出PWM波形
EvaRegs.T1CON.all=0x1742;
PieCtrl.PIEIER5.bit.INTx5 = 1;//使能捕获单元4中断
IER |= M_INT5;
EINT;
ERTM;
for(;;)
{
}
}
interrupt void CapCount(void)
{
PieCtrl.PIEACK.bit.ACK5 = 1;
CAPCOUNT++;
if(CAPCOUNT > 2)
CAPCOUNT = 1;
if(CAPCOUNT == 1)
count1 = EvbRegs.CAP4FIFO;
if(CAPCOUNT == 2)
{
count2 = EvbRegs.CAP4FIFO;
count = count2 - count1;
CAP_Freq_KHz = (150000.0/count/128);
}
EvbRegs.EVBIFRC.bit.CAP4INT = 1;
EINT;
}
//函数功能:设置PWM频率和占空比,设置频率的参数单位为kHz.
void PWMPeriod(float PWM_KHz,float R)
{
EvaRegs.T1CON.all=0x1702;
EvaRegs.T1PR = (unsigned int)(150000.0/128/PWM_KHz - 1);
EvaRegs.CMPR2 = (unsigned int)(EvaRegs.T1PR*R);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -