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

📄 example_281xevpwm.c

📁 dsp2812驱动l298P控制两路直流电机!另外带跑马灯,对程序进行了详细的注解,代码简单,没有多余,本程序在扳子上正常运行
💻 C
字号:
#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File

interrupt void ISRTimer0(void);
void init_eva(void);

#define		LED0_ON		GpioDataRegs.GPFDAT.bit.GPIOF6=1
#define		LED0_OFF	GpioDataRegs.GPFDAT.bit.GPIOF6=0
#define		LED1_ON		GpioDataRegs.GPFDAT.bit.GPIOF7=1
#define		LED1_OFF	GpioDataRegs.GPFDAT.bit.GPIOF7=0

unsigned int Led_Flag;

void main(void)
{

   InitSysCtrl();

   EALLOW;
    GpioMuxRegs.GPAMUX.all = 0x00F0;         // EVA PWM 5-6  GPIOA1,2,3,4

    GpioMuxRegs.GPADIR.bit.GPIOA0=1;         //配置IO口为输出
    GpioMuxRegs.GPADIR.bit.GPIOA1=1;
    GpioMuxRegs.GPADIR.bit.GPIOA2=1;
    GpioMuxRegs.GPADIR.bit.GPIOA3=1;

    GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6=0;  //配置GPIOF6,7 为输出
    GpioMuxRegs.GPFDIR.bit.GPIOF6=1;   
    GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7=0;
    GpioMuxRegs.GPFDIR.bit.GPIOF7=1;

   EDIS;
    
    DINT;

   InitPieCtrl();

    IER = 0x0000;
    IFR = 0x0000;

   InitPieVectTable();

   EALLOW;	
	PieVectTable.TINT0 = &ISRTimer0;
   EDIS;   

   InitCpuTimers();

   ConfigCpuTimer(&CpuTimer0, 100, 1500000/8); 
		
   StartCpuTimer0();                        //定时器开始

	IER |= M_INT1;                          //使能连接到CPU-TIMER0的CPU中断

	PieCtrlRegs.PIEIER1.bit.INTx7=1;        //使能PIE组1第7个中断

	EINT;                                   // 使能全局中断
	ERTM;	                                // 使能全局实时中断DBGM
   
   init_eva();                              //初始化EVA

  for(;;)

  {
   GpioDataRegs.GPADAT.all=0x000A;          //控制电机正转
  }

}

void init_eva()
{
// EVA 配置 PWM5-PWM6 
   // 初始化EVA定时器1 
   EvaRegs.T1PR = 0xFFFF;                    // 定时器1周期
//   EvaRegs.T1CMPR = 0x3C00;                // 定时器1比较器
   EvaRegs.T1CNT = 0x0000;                   // 定时器1计数器
   EvaRegs.T1CON.all = 0x1042;               // TMODE = 连续递增、递减计数,定时器使能,比较使能

   EvaRegs.CMPR3 = 0x3C00;                   // 使能PWM5-PWM6
   EvaRegs.ACTRA.all = 0x0666;               // 输出引脚5 CMPR3 - 高有效   输出引脚6 CMPR3 - 低有效
   EvaRegs.DBTCONA.all = 0x0000;             // 禁止死区
   EvaRegs.COMCONA.all = 0xA600;
} 

interrupt void ISRTimer0(void)
{
	CpuTimer0.InterruptCount++;
	PieCtrlRegs.PIEACK.all=PIEACK_GROUP1      //中断相应并准备接受更多中断
	if(Led_Flag == 1)
	{
		LED0_OFF;
		LED1_ON;
		Led_Flag = 0;
	}
	else
	{
		LED0_ON;
		LED1_OFF;
		Led_Flag = 1;
	}
}
//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

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