EPWM实验代码如下,请问为什么只能由epwm6呼吸,epwm1无效啊。
/** epwm_up.c
*
*Created on: 2023年4月8日
* Author: Zihanwei
*/
#include "epwm_up.h"
#include "leds.h"
//void EPWM1_Init(Uint16 tbprd)
//{
// EALLOW;
// SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Disable TBCLK within the ePWM
// SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;// ePWM1
// EDIS;
//
// InitEPwm1Gpio();
//
//// EALLOW;
//// SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Stop all the TB clocks
//// EDIS;
//
// // Setup Sync
// EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;// Pass through
// // Allow each timer to be sync'ed
// EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
// EPwm1Regs.TBPHS.half.TBPHS = 0;
// EPwm1Regs.TBCTR = 0x0000; // Clear counter
// EPwm1Regs.TBPRD = tbprd;
// EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
// EPwm1Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;
// EPwm1Regs.TBCTL.bit.CLKDIV=TB_DIV1;
//
// // Setup shadow register load on ZERO
// EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
// EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
// EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
// EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
//
// // Set Compare values
// EPwm1Regs.CMPA.half.CMPA = 0; // Set compare A value
// EPwm1Regs.CMPB = 0; // Set Compare B value
//
// // Set actions
// EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR; // Set PWM1A on Zero
// EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Clear PWM1A on event A, up count
// EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; // Set PWM1B on Zero
// EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; // Clear PWM1B on event B, up count
//
// EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
// EPwm1Regs.ETSEL.bit.INTEN = 1;// Enable INT
// EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 1st event
//
// EALLOW;
// SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Start all the timers synced
// EDIS;
//}
//void EPwm1A_SetCompare(Uint16 val)
//{
// EPwm1Regs.CMPA.half.CMPA = val;//设置占空比
//}
//void EPwm1B_SetCompare(Uint16 val)
//{
// EPwm1Regs.CMPB = val;//设置占空比
//}
void EPWM1_Init(Uint16 tbprd)
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Disable TBCLK within the ePWM
SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;// ePWM6
EDIS;
InitEPwm1Gpio();
// Setup Sync
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;// Pass through
// Allow each timer to be sync'ed
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm1Regs.TBPHS.half.TBPHS = 0;
EPwm1Regs.TBCTR = 0x0000; // Clear counter
EPwm1Regs.TBPRD = tbprd;
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
EPwm1Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV=TB_DIV1;
// Setup shadow register load on ZERO
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Set Compare values
EPwm1Regs.CMPA.half.CMPA = 0; // Set compare A value
EPwm1Regs.CMPB = 0; // Set Compare B value
// Set actions
EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR; // Set PWM1A on Zero
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Clear PWM1A on event A, up count
EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR; // Set PWM1B on Zero
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; // Clear PWM1B on event B, up count
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
EPwm1Regs.ETSEL.bit.INTEN = 1;// Enable INT
EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 1st event
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Start all the timers synced
EDIS;
}
void EPwm1A_SetCompare(Uint16 val)
{
EPwm1Regs.CMPA.half.CMPA = val;//设置占空比
}
void EPwm1B_SetCompare(Uint16 val)
{
EPwm1Regs.CMPB = val;//设置占空比
}
void EPWM6_Init(Uint16 tbprd)
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Disable TBCLK within the ePWM
SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1;// ePWM6
EDIS;
InitEPwm6Gpio();
// Setup Sync
EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;// Pass through
// Allow each timer to be sync'ed
EPwm6Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm6Regs.TBPHS.half.TBPHS = 0;
EPwm6Regs.TBCTR = 0x0000; // Clear counter
EPwm6Regs.TBPRD = tbprd;
EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
EPwm6Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;
EPwm6Regs.TBCTL.bit.CLKDIV=TB_DIV1;
// Setup shadow register load on ZERO
EPwm6Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm6Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm6Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm6Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Set Compare values
EPwm6Regs.CMPA.half.CMPA = 0; // Set compare A value
EPwm6Regs.CMPB = 0; // Set Compare B value
// Set actions
EPwm6Regs.AQCTLA.bit.ZRO = AQ_CLEAR; // Set PWM1A on Zero
EPwm6Regs.AQCTLA.bit.CAU = AQ_SET; // Clear PWM1A on event A, up count
EPwm6Regs.AQCTLB.bit.ZRO = AQ_CLEAR; // Set PWM1B on Zero
EPwm6Regs.AQCTLB.bit.CBU = AQ_SET; // Clear PWM1B on event B, up count
EPwm6Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
EPwm6Regs.ETSEL.bit.INTEN = 1;// Enable INT
EPwm6Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 1st event
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Start all the timers synced
EDIS;
}
void EPwm6A_SetCompare(Uint16 val)
{
EPwm6Regs.CMPA.half.CMPA = val;//设置占空比
}
void EPwm6B_SetCompare(Uint16 val)
{
EPwm6Regs.CMPB = val;//设置占空比
}
/*
* epwm_up.h
*
*Created on: 2023年4月8日
* Author: Zihanwei
*/
#ifndef APP_EPWM_UP_EPWM_UP_H_
#define APP_EPWM_UP_EPWM_UP_H_
#include "DSP2833x_Device.h" // DSP2833x 头文件
#include "DSP2833x_Examples.h" // DSP2833x 例子相关头文件
void EPWM1_Init(Uint16 tbprd);
void EPwm1A_SetCompare(Uint16 val);
void EPwm1B_SetCompare(Uint16 val);
void EPWM6_Init(Uint16 tbprd);
void EPwm6A_SetCompare(Uint16 val);
void EPwm6B_SetCompare(Uint16 val);
#endif /* APP_EPWM_UP_EPWM_UP_H_ */
/*
* main.c
*
*Created on: 2023年3月23日
* Author: Zihanwei
*/
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
#include "leds.h"
#include "time.h"
#include "epwm_up.h"
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
int i=0;
unsigned char fx=0;
InitSysCtrl();
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
//LED_Init();
EPWM1_Init(500);
EPWM6_Init(500);
while(1)
{
if(fx==0)
{
i++;
if(i==300)
{
fx=1;
}
}
else
{
i--;
if(i==0)
{
fx=0;
}
}
EPwm1A_SetCompare(i);//i值最大可以取499,因为ARR最大值是499.
EPwm1B_SetCompare(300-i);//i值最大可以取499,因为ARR最大值是499.
EPwm6A_SetCompare(i);//i值最大可以取499,因为ARR最大值是499.
EPwm6B_SetCompare(300-i);//i值最大可以取499,因为ARR最大值是499.
DELAY_US(10*1000);
}
}
你去看一下普中的28335原理图,只有EPWM6是跟LED小灯接着。剩下的EPWM都没接灯。怎么可能能亮?
页:
[1]