pwm.c

来自「DSP TMS320F28335下MS5540大气压力传感器全程序」· C语言 代码 · 共 88 行

C
88
字号
//###########################################################################
//
// FILE:    pwm.c
//
// TITLE:   PWM发生器配置程序
//
// DESCRIPTION:
//			配置PWM寄存器
//			ePWM:EPWM1产生PWM波形控制泵,EPWM2定时触发ADC中断
//
//###########################################################################
//  Release: 
//  Date:		 2008.11.15
//	Modified:	 2008.11.15
//###########################################################################

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File


/////////////////////////////////////////////////////////////
/////PWM寄存器初值	/////

// Configure the period for each timer
#define EPWM1_TIMER_TBPRD  230  //PWM频率7.6KHz,30MHz系统时钟
#define EPWM1_MAX_CMPA      229
#define EPWM1_MIN_CMPA        1
#define EPWM1_MAX_CMPB      229
#define EPWM1_MIN_CMPB        1

// To keep track of which way the compare value is moving
#define EPWM_CMP_UP   1
#define EPWM_CMP_DOWN 0

Uint16 pwm_m=115;


typedef struct
{
   volatile struct EPWM_REGS *EPwmRegHandle;
   Uint16 EPwm_CMPA_Direction;
   Uint16 EPwm_CMPB_Direction;
   Uint16 EPwmTimerIntCount;
   Uint16 EPwmMaxCMPA;
   Uint16 EPwmMinCMPA;
   Uint16 EPwmMaxCMPB;
   Uint16 EPwmMinCMPB;
}EPWM_INFO;


void update_compare(EPWM_INFO*);

EPWM_INFO epwm1_info;


//////////////////////////////////////////////////////
//////PWM中断	////////

interrupt void epwm_isr(void)
{
   // Update the CMPA and CMPB values
   update_compare(&epwm1_info);

   // Clear INT flag for this timer
   EPwm1Regs.ETCLR.bit.INT = 1;

   // Acknowledge this interrupt to receive more interrupts from group 3
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}

/////////////////////////////////////////////////////
/////初始化PWM寄存器	/////

void pwm_init(void)
{

   EALLOW;
   SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
   EDIS;

   // Setup TBCLK
   EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
   EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD;       // Set timer period
   EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;    // Disable phase loading
   EPwm1Regs.TBPHS.half.TBPHS = 0x0000;       // Phase is 0
   EPwm1Regs.TBCTR = 0x0000;                  // Clear counter
   EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;   // Clock ratio to SYSCLKOUT
   EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2;	//寄存器值,要查对应的分频凳

⌨️ 快捷键说明

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