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

📄 example_280xinitepwm.c

📁 DSP2808例程。TMS320F2808DSP的各个模块的应用例程
💻 C
字号:
#include "DSP280x_Device.h"     // DSP280x Headerfile Include File
#include "DSP280x_Examples.h"   // DSP280x Examples Include File


//=============================================================================
// PWM输出全部关断,输出全部高阻状态
//=============================================================================
void Disable_PWM(void){
    	EALLOW;
		EPwm1Regs.TZFRC.all=0x04;
		EPwm2Regs.TZFRC.all=0x04;
		EPwm3Regs.TZFRC.all=0x04;
		EDIS;
}
//=============================================================================
// PWM输出全部有效
//=============================================================================
void Enable_PWM(void){
    	EALLOW;
		EPwm1Regs.TZCLR.all=0x07;
		EPwm2Regs.TZCLR.all=0x07;
		EPwm3Regs.TZCLR.all=0x07;
		EDIS;
}

void InitEPwm1(void)
	{
// Enable PWM0~5
   EALLOW;
   
   GpioCtrlRegs.GPAPUD.bit.GPIO0 = 1;   	// disEnable pullup on GPIO0
   GpioCtrlRegs.GPAPUD.bit.GPIO1 = 1;   	// disEnable pullup on GPIO1
   //GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;   	// disEnable pullup on GPIO2
   //GpioCtrlRegs.GPAPUD.bit.GPIO3 = 1;   	// disEnable pullup on GPIO3
   //GpioCtrlRegs.GPAPUD.bit.GPIO4 = 1;  	// disEnable pullup on GPIO4
   //GpioCtrlRegs.GPAPUD.bit.GPIO5 = 1;   	// disEnable pullup on GPIO5 
      
   GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;  	// GPIO0 = PWM1A
   GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;  	// GPIO1 = PWM1B
   //GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;  	// GPIO2 = PWM2A
   //GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1;  	// GPIO3 = PWM2B
   //GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 1;  	// GPIO4 = PWM3A
   //GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1;  	// GPIO5 = PWM3B

   EDIS;
//=====================================================================
// Initialization Time
//=====================================================================
	
	EPwm1Regs.TBPRD = 3000; //T=100us,dead rise=2us,fail=2us
							// Period = 5000 TBCLK counts
							//TBCLK=SYSCLKOUT/(HSPCLKDIV * CLKDIV)-----TBCTL
	EPwm1Regs.TBPHS.half.TBPHS=0;// Set Phase register to zero
	
	EPwm1Regs.TBCTL.bit.CTRMODE = 2; // Symmetrical mode
	EPwm1Regs.TBCTL.bit.PHSEN = 0; // Master module
	EPwm1Regs.TBCTL.bit.PRDLD = 0;
	EPwm1Regs.TBCTL.bit.SYNCOSEL = 1; // Sync down-stream module
	EPwm1Regs.TBCTL.bit.HSPCLKDIV =2;;	//TBCLK=100M/4
	EPwm1Regs.TBCTL.bit.CLKDIV = 3;
	EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;
	EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0;
	EPwm1Regs.CMPCTL.bit.LOADAMODE = 0; //1// load on CTR=Zero
	EPwm1Regs.CMPCTL.bit.LOADBMODE = 0; //1// load on CTR=Zero
	EPwm1Regs.AQCTLA.bit.CAU = 2; // set actions for EPWM1A
	EPwm1Regs.AQCTLA.bit.CAD = 1; // PWM低开通
	EPwm1Regs.AQCTLB.bit.CAU = 1; // set actions for EPWM1B
	EPwm1Regs.AQCTLB.bit.CAD = 2;

	EPwm1Regs.DBFED = 400; // FED = 50 TBCLKs
	EPwm1Regs.DBRED = 400; // RED = 50 TBCLKs
	//EPwm1Regs.DBCTL.bit.POLSEL = 1; // Active Lo complementary
	EPwm1Regs.DBCTL.bit.POLSEL = 2; // Active Hi complementary
	EPwm1Regs.DBCTL.bit.OUT_MODE = 3; // enable Dead-band module

	EPwm1Regs.ETSEL.all=0x9901;        	// SOCA,B启动使能 
	   									// CNT=0时触发
										// CNT=0 EPWM1INT发生 
	EPwm1Regs.ETPS.all = 0x1101;        // Generate pulse on 1st event 	
	
// EPWM Module 2 config
	EPwm2Regs.TBPRD = 3000; // Period = 1600 TBCLK counts
	EPwm2Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero
	EPwm2Regs.TBCTL.bit.CTRMODE = 2; // Symmetrical mode
	EPwm2Regs.TBCTL.bit.PHSEN = 1; // Slave module
	EPwm2Regs.TBCTL.bit.PRDLD = 0;
	EPwm2Regs.TBCTL.bit.SYNCOSEL = 0; // sync flow-through
	
	EPwm2Regs.TBCTL.bit.HSPCLKDIV =2;	//TBCLK=100M/4
	EPwm2Regs.TBCTL.bit.CLKDIV = 3;

	EPwm2Regs.AQCTLA.bit.CAU = 2; // set actions for EPWM2A
	EPwm2Regs.AQCTLA.bit.CAD = 1;
	EPwm2Regs.AQCTLB.bit.CAU = 1; // set actions for EPWM2A
	EPwm2Regs.AQCTLB.bit.CAD = 2;	
	EPwm2Regs.CMPCTL.bit.SHDWAMODE = 0;
	EPwm2Regs.CMPCTL.bit.SHDWBMODE = 0;
	EPwm2Regs.CMPCTL.bit.LOADAMODE = 0; //1// load on CTR=Zero
	EPwm2Regs.CMPCTL.bit.LOADBMODE = 0; //1// load on CTR=Zero
	EPwm2Regs.DBFED = 400; // FED = 50 TBCLKs
	EPwm2Regs.DBRED = 400; // RED = 50 TBCLKs
	EPwm2Regs.DBCTL.bit.POLSEL = 1; // Active Hi complementary
	EPwm2Regs.DBCTL.bit.OUT_MODE = 3; // enable Dead-band module
	
// EPWM Module 3 config
	EPwm3Regs.TBPRD = 3000; // Period = 1600 TBCLK counts
	EPwm3Regs.TBPHS.half.TBPHS = 0; // Set Phase register to zero
	EPwm3Regs.TBCTL.bit.CTRMODE = 2;// Symmetrical mode
	EPwm3Regs.TBCTL.bit.PHSEN = 1; // Slave module
	EPwm3Regs.TBCTL.bit.PRDLD = 0;
	EPwm3Regs.TBCTL.bit.SYNCOSEL = 0; // sync flow-through

	EPwm3Regs.TBCTL.bit.HSPCLKDIV =2;	//TBCLK=100M
	EPwm3Regs.TBCTL.bit.CLKDIV = 3;
	EPwm3Regs.CMPCTL.bit.SHDWAMODE = 0;
	EPwm3Regs.CMPCTL.bit.SHDWBMODE = 0;
	EPwm3Regs.CMPCTL.bit.LOADAMODE = 0; //1// load on CTR=Zero
	EPwm3Regs.CMPCTL.bit.LOADBMODE = 0; //1// load on CTR=Zero
	EPwm3Regs.AQCTLA.bit.CAU = 2; // set actions for EPWM3A
	EPwm3Regs.AQCTLA.bit.CAD = 1;
	EPwm3Regs.AQCTLB.bit.CAU = 1;//1; // set actions for EPWM3A
	EPwm3Regs.AQCTLB.bit.CAD = 2;//2;

	EPwm3Regs.DBFED = 400; // FED = 50 TBCLKs
	EPwm3Regs.DBRED = 400; // RED = 50 TBCLKs
	EPwm3Regs.DBCTL.bit.POLSEL = 1; // Active Hi complementary
	EPwm3Regs.DBCTL.bit.OUT_MODE = 3; // enable Dead-band module
	
//------------------------------------------
	//TZ
	//EALLOW;
	//EPwm1Regs.TZSEL.all=0x1000;	//TZ5 OST
	//EPwm2Regs.TZSEL.all=0x1000;	//TZ5 OST
	//EPwm3Regs.TZSEL.all=0x1000;	//TZ5 OST
	//EPwm1Regs.TZEINT.all=4;	   	//Trip-zones Cycle by Cycle Interrupt
	//EPwm1Regs.TZCTL.all=0;		//One Shot mod
	//EPwm2Regs.TZEINT.all=4;	   	//Trip-zones Cycle by Cycle Interrupt
	//EPwm2Regs.TZCTL.all=0;		//One Shot mod
	//EPwm3Regs.TZEINT.all=4;	   	//Trip-zones Cycle by Cycle Interrupt
	//EPwm3Regs.TZCTL.all=0;		//One Shot mod
	//EDIS;

	// 关断PWM输出
	//=========================================================//
	Disable_PWM();
}

//----------------------------------------------------------
// 使能中断,使能计数器
//----------------------------------------------------------
void EnableInterrupt(void)
{
//---------------------------------------
	EPwm1Regs.ETSEL.bit.INTEN = 1;     // Enable EPWM1INT generation 	
	EPwm1Regs.ETCLR.bit.INT = 1;       // Enable more interrupts
	
	EALLOW;
	SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
	EDIS; 

	// Enable PWM1 int:			INT3
	PieCtrlRegs.PIEIER3.bit.INTx1 = 1;

	// clear INT FLAG
	EPwm1Regs.ETCLR.bit.INT = 1;
	PieCtrlRegs.PIEACK.all = 0xFFFF;
	// Enable the PIE
    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
	
	IER |= M_INT3;
	
//使能中断,寄存器等//
	EINT;   // Enable Global interrupt INTM,使能所有中断
	ERTM;   // Enable Global realtime interrupt DBGM
}

⌨️ 快捷键说明

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