📄 pwm_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 + -