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

📄 pwm_led.c

📁 本程序能够在dsp2812的开发板上实现脉宽调制和LED显示
💻 C
字号:

//###########################################################################
//
// FILE:	PWM_LED.c
//
// TITLE:	PWM control program.//
//
//###########################################################################
//
//  Ver | dd mmm yyyy | Who  | Description of changes
// =====|=============|======|===============================================
//  0.10| 20 Sep 2006 | ZYG  | test program
//  0.30| 22 Feb 2004 | ZYG  |  
//###########################################################################

// Step 0.  Include required header files
         // DSP28_Device.h: device specific definitions #include statements for
         // all of the peripheral .h definition files.
         // DSP28_Example.h is specific for the given example.  

#include "DSP28_Device.h"
#include "ext_inf.h"


#define FlashSlow 50
#define FlashFast 15

void InitEv_1(void);
void LedFlash(void);

interrupt void Timer2_ISR(void);

int i, Period, Offset, OffsetZeroFlag=0, LedFlag, LedCount=0;
int LedCountLimit;
int PWM_Value = 0;


int tmp;
void main(void)
{
	/* Initialize system */
	InitSysCtrl();	

	/* Disable all interrupts */
	DINT;			
	IER = 0x0000;
	IFR = 0x0000;
	
	InitPieCtrl();
	
	/* Initialize PIE vector table */
	InitPieVectTable();	
	
	EALLOW;	
	PieVectTable.TINT2 = &Timer2_ISR;
	EDIS;    
	
	/* Initialize EV*/
	
	InitCpuTimers();	
	InitEv_1();

	ConfigCpuTimer(&CpuTimer2, 150, 20000);	
 	StartCpuTimer2();
 	

	
	Period = 3000;

	EvaRegs.CMPR1 = 0;
	EvaRegs.CMPR2 = 0;
	EvaRegs.CMPR3 = 0;
		
	EvaRegs.T1CON.bit.TENABLE = 1;
	
	IER |= M_INT14;	
	
	EINT;
	ERTM;
	
	
	LedCount = 0;
	LedCountLimit = FlashFast;
	
	for(;;)
	{
//	KickDog();
	LedFlash();
	}


} 	

void InitEv_1(void)
{
	EALLOW;
	GpioMuxRegs.GPAMUX.all = 0x00ff;
	
//	GpioMuxRegs.GPBMUX.all = 0x00ff;
	EDIS;

//EVA

	EvaRegs.EXTCON.bit.INDCOE = 1;
	
	EvaRegs.GPTCONA.all = 0x0876;		/* gp timer control register */

	EvaRegs.T1CNT = 0;					/* timer1 count is zero */
	EvaRegs.T1CON.all = 0x0802;			//
	EvaRegs.T1PR = Period;
	EvaRegs.T1CMPR = Period / 2;
		
	EvaRegs.T2CNT = Period / 2;
	EvaRegs.T2CON.all = 0x0887;
	EvaRegs.T2CMPR = Period / 2 + 200;
		
	EvaRegs.COMCONA.all = 0xa2e0;
	EvaRegs.ACTRA.all = 0x0999;
	
	EvaRegs.DBTCONA.all = 0x03ff;

}	

void LedFlash(void)
{
	if(LedCount >= LedCountLimit)
	{

		LedCount = 0;
		if(LedFlag == 0)
		{
			LedFlag = 1;
			*LED2 = 1;
		}
		else
		{
			LedFlag = 0;
			*LED2 = 0;
		}	
	}	
}


					
/********************************
*								*
* Interrupt Service Routines	*
*								*
********************************/
	
interrupt void Timer2_ISR(void)
{

	if(AdcRegs.ADC_ST_FLAG.bit.SEQ1_BSY==0)
		{			

			AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
			
			LedCount++;
			
		if(PWM_Value < 3000)
		  {
		  PWM_Value += 10;
		  EvaRegs.CMPR1 = PWM_Value;
		  EvaRegs.CMPR2 = PWM_Value;
		  EvaRegs.CMPR3 = PWM_Value;
		  }
		else
		  PWM_Value = 0;  
			
			
		}
}



//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

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