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

📄 main.c

📁 dsp2812平台下的例程
💻 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 + -