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.

[参考译文] CCS/LAUNCHXL-F28069M:eQEP 索引中断问题

Guru**** 2341440 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/588384/ccs-launchxl-f28069m-eqep-index-interruption-problem

器件型号:LAUNCHXL-F28069M

工具/软件:Code Composer Studio

大家好、

我正在尝试基于 proj_lab13f 创建一个主函数、因此我在 proj_lab13f.c 文件中为其编写了代码、编译没有问题、但程序不执行任何操作。

这是代码的一部分、我还添加了 file.e2e.ti.com/.../proj_5F00_lab13f.c

中断 void QEP_Index_ISR (void);
short gIndexOcurre = 0;//中断计数

器 void main (void)
{

//设置编码器模块
ENC_setup (encHandle[HAL_MTR1]、1、USER_MOTOR_NUM_POLE_PAIRS、USER_MOTOR_ENCODER_LINS、0、 USER_IQ_FULL_SCALE_FREQ_Hz、USER_ISR_FREQ_Hz、8000.0);
ENC_setup (encHandle[HAL_MTR2]、1、USER_MOTOR_NUM_POLE_PAIRS、2、USER_MOTOR_ENCODER_LINE_2、0、 USER_IQ_FULL_SCALE_FREQ_Hz_2、USER_ISR_FREQ_Hz_2、8000.0);

// M C >>>>>
HAL_Obj_MTR * obj_MTR =(HAL_Obj_MTR *) halHandle;
HAL_Obj * obj =(HAL_Obj *) halHandle;
OBJ_MTR =(HAL_Obj_MTR *) halHandle;
// QEP_Obj * QEP =(QEP_Obj *) obj_MTR->qepHandle;

QEP_CLEAR_ALL_INTERRUPT_FLAGS (obj_MTR->qepHandle);// Limpiar todas las Banderas de interrupción
QEP_disable_all_interrupts (obj_mTR->qepHandle);//断路器中断

PI_enableInt( obj->压 电致、PI_GroupNumber_5、PI_InterruptSource_EQEP1 );//Grupo 5 donde se encuentra la interrupton de EQEP1
QEP_ENABLE_INTERRUPT (obj_mTR->qepHandle、QEINT_IEL);//Habitilar el bit de interrupción 相应的 Pulso de Index
cpu_enableInt (obj->cpuHandle、cpu_IntNumber_5);//Habitilar el grupo 5 en las interruptiones de la CPU

//M C >>>>>

//>>>配置断路器索引<<<<<<<<<<<<<<<<< 压电式手柄;

ENABLE_PROTECTED 寄存器_WRITE_MODE;

PIE->EQEP1_INT =&QEP_Index_ISR;

disable_protected_register_write_mode;

//>>>配置断路器索引<<<<<<<<<<<<<<<<< 
文件末
尾的中断 void QEP_Index_ISR (void)//中断函数{
HAL_Obj_MTR * obj_MTR =(HAL_Obj_MTR *) halHandle;
HAL_Obj * obj =(HAL_Obj *) halHandle;
// QEP_Obj * QEP =(QEP_Obj *) obj_mTR->qepHandle;

// Limpiar el "interrupt flag"
QEP_CLEAR_INTERRUPT_FLAG (obj_mTR->qepHandle、QEINT_IEL);

//确认来自 PIE 组5的中断
PI_clearInt (obj->压 电筒、PI_GroupNumber_5);

gIndexOcurre++;

返回;
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这对"程序什么也不做"意味着什么? 无法输入 QEP_Index_ISR()? 还是其他?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为中断永远不会发生、因为我有一个全局变量"gIndexOcurre"、我想增加每次中断、但其值从未改变。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请参阅器件用户指南以检查 QEP 中断的配置代码。
    1.为 QEP 启用时钟,是否在 HAL_setupQEP()中正确设置 QEP 寄存器?
    2.在 HAL_setupGpio()中启用 QEP 索引,并在 QEP、PIE 和 CPU 寄存器中启用 QEP 索引中断。
    3、索引输入正确、您可以检查 QEP 寄存器中的标志以进行验证。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我将´m 它、但我认为每个中断的优先级也存在问题、那么我如何更改中断的优先级?

    我认为这是因为 我希望每个电机在其编码器的索引中断发生时停止。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您不能更改中断优先级来阻止其他中断、中断优先级由控制器固定。 您可以检查 ISR 时间、以了解是否有足够的时间用于其他中断。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何检查 ISR 时间、现在我有两个主 ISR、motor1_isr ()和 motor2_isr ()