This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

【求助】TMS320F28034的QEP模块IEL中断(Index事件中断)到底起什么作用?如何正确使用?

项目应用需求,想用正交编码器的Z信号,产生一个中断,来告知CPU,Z信号的到来。

我在eQEP的数据手册中,看到有IEL中断,但起什么作用?

手册中并没有对QEP的中断作详细说明……

个人认为:通过正确配置(1.对QEPCTL寄存器的IEL设置为 Index信号(Z信号)上升沿触发,2.对QEINT寄存器的IEL置1,3.正确配置PIE),当Z信号上升沿来临时,是将QEPCNT中值锁存在QPOSILAT中,并触发中断。

但是,实际调试(并不是仿真),IEL中断只能触发一次,第一个Z信号触发后,以后的Z信号来临都不会触发了。我将QEPCNT配置为有Index信号复位,是可以正常复位的,说明Z信号没有问题。

在eQEP的数据手册中,对EQEP的中断描述太少,而且官方历程中也没有看到相关应用。所以,只好来发帖。

问题:1、IEL中断到底起什么作用?

2、如果如我描述,那么又如何正确使用呢?(以下是我的配置代码以及中断代码)

初始化:

void EQepInit(void)
{
EQep1Regs.QDECCTL.bit.QSRC=00; // QEP正交计数模式

EQep1Regs.QEPCTL.bit.FREE_SOFT=2;
EQep1Regs.QEPCTL.bit.PCRM=00; // PCRM=00 mode - QPOSCNT reset on index event
EQep1Regs.QPOSMAX=0xffffffff;
EQep1Regs.QEPCTL.bit.QPEN=1; // 使能QEP

EQep1Regs.QCAPCTL.bit.UPPS=5; // 1/32 for unit position
EQep1Regs.QCAPCTL.bit.CCPS=7; // 1/128 for CAP clock
// EQep1Regs.QCAPCTL.bit.CEN=1; // QEP Capture Enable

EQep1Regs.QEPCTL.bit.IEL = 0x1; // Index事件在Index信号上升沿锁存

EQep1Regs.QEINT.bit.IEL = 1; // Index事件中断使能

EALLOW;
PieVectTable.EQEP1_INT = &QepInterrupt;
EDIS;

// PIE: Group 5 interrupt 1
PieCtrlRegs.PIEIER5.bit.INTx1 = 1;
IER |= M_INT5;

PieCtrlRegs.PIEACK.all = PIEACK_GROUP5; // 清除标志位
EQep1Regs.QCLR.bit.IEL = 1;

EINT;
}

中断程序:

int count = 0;
interrupt void QepInterrupt(void)
{
count++; // 计数

PieCtrlRegs.PIEACK.all = PIEACK_GROUP5; // 清除标志位
EQep1Regs.QCLR.bit.IEL = 1;
}