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

📄 pwm-led6.6.22.c

📁 DSP2812-PWM-QEP-LED本程序是通过L298P驱动电机
💻 C
字号:
#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File

#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;

unsigned int DirectionQep;

interrupt void ISRTimer0(void);

void init_eva(void);

void F281X_EV1_QEP_Init(void);

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

   F281X_EV1_QEP_Init();

   // Initialize QEP module
//    qep1.LineEncoder = 512;
//    qep1.MechScaler = _IQ30(0.25/qep1.LineEncoder);
//    qep1.PreScaler = 249;
//    qep1.OutputMechScaler = _IQ30((0.25/qep1.PreScaler)*(1.0/qep1.LineEncoder));
//    qep1.init(&qep1);

  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      //中断相应并准备接受更多中断
//	   qep1.isr(&qep1);
//	   qep1.calc(&qep1);
	if(Led_Flag == 1)
	{
		LED0_OFF;
		LED1_ON;
		Led_Flag = 0;
	}
	else
	{
		LED0_ON;
		LED1_OFF;
		Led_Flag = 1;
	}
}


void  F281X_EV1_QEP_Init(void)
{
          int LineEncoder=15;
          EvaRegs.CAPCONA.all = 0x6000;    // 设置捕捉单元qep1,qep2
		  EvaRegs.T2CNT = 0x0000;          // 定时器2计数器初始化
          EvaRegs.T2CON.all = 0670;        // 设置为定向增减模式,以QEP电路为时钟源,使能定时器,比较禁止,重载条件
          EvaRegs.T2PR = 4*LineEncoder;             // Init Timer 2 period Register 
//          EvaRegs.EVAIFRC.bit.CAP3INT = 1;     // Clear CAP3 flag
//          EvaRegs.EVAIMRC.bit.CAP3INT = 1;     // Enable CAP3 Interrupt
          DirectionQep = 0x4000&EvaRegs.GPTCONA.all;
          DirectionQep = DirectionQep>>14;
          EALLOW;                       // Enable EALLOW
          GpioMuxRegs.GPAMUX.all |= 0x0300;     // Set up the capture pins to primary functions
          EDIS;                         // Disable EALLOW
}

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

⌨️ 快捷键说明

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