📄 f28xqep.c
字号:
#include "IQmathLib.h"
#include "DSP28_Device.h"
#include "f28xqep.h"
#include "f28xbmsk.h"
void F28X_EV2_QEP_Init(QEP *p)
{
EvbRegs.CAPCONB.all = QEP_CAP_INIT_STATE;
//EvaRegs.CAPCON.all = QEP_CAP_INIT_STATE; /* Set up capture units */
EvbRegs.T4CON.all = QEP_TIMER_INIT_STATE;
//EvaRegs.T2CON.all = QEP_TIMER_INIT_STATE; /* Set up capture timer */
EvbRegs.T4PR = 0xFFFF;
//EvaRegs.EVAIFRC.bit.CAP3INT = 1; /* Clear CAP3 flag */
EvbRegs.EVBIFRC.bit.CAP6INT = 1;
//EvaRegs.EVAIMRC.bit.CAP3INT = 0;
//EvaRegs.EVAIMRC.bit.CAP3INT = 1; /* Enable CAP3 Interrupt*/
EvbRegs.EVBIMRC.bit.CAP6INT = 1;
//GpioMuxRegs.GPAMUX.all |= 0x0700; /* Set up the capture pins to primary functions */
GpioMuxRegs.GPBMUX.all |= 0x0700;
}
//////////
void F28X_EV2_QEP_Calc(QEP *p)
{
_iq delta_cnt;
_iq speedx;
p->dir_QEP = 0x4000&EvbRegs.GPTCONB.all;//计数方向
p->dir_QEP = p->dir_QEP>>14;
p->QEP_cnt = EvbRegs.T4CNT;
if (p->dir_QEP ==1)//增计数
delta_cnt=p->QEP_cnt + p->QEP_cnt_idx- p->QEP_cnt_old ;
else
delta_cnt=p->QEP_cnt - p->QEP_cnt_idx- p->QEP_cnt_old ;
p->QEP_cnt_old = p->QEP_cnt;
p->QEP_cnt_idx=0;
p->delta_cnt =delta_cnt<<1;//IQ1
speedx= _IQmpyIQX(_IQ(0.008),24,p->delta_cnt,1);
p->speed=speedx;
}
void F28X_EV2_QEP_Isr1(QEP *p)
{
/*计数器上溢中断*/
p->QEP_cnt_idx += EvbRegs.T4CNT;//0xFFFF;//EvbRegs.T4CNT-1;
//EvbRegs.T4CNT = 0;
p->index_sync_flag = 0x00F0;
}
void F28X_EV2_QEP_Isr2(QEP *p)
{
/*计数器下溢中断*/
p->QEP_cnt_idx += 0xFFFF;//EvbRegs.T4CNT;
//EvbRegs.T4CNT = 0xFFFF;
p->index_sync_flag = 0x00F0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -