📄 pwm-led6.6.22.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 + -