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.

[参考译文] TMS320F28069:无法使中断正常工作

Guru**** 2538950 points
Other Parts Discussed in Thread: MOTORWARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/600893/tms320f28069-cannot-get-interrupts-to-work

器件型号:TMS320F28069
主题中讨论的其他器件:MOTORWARE

我正在从事一个 Motorware 项目、需要使中断正常工作。  第一个工作顺序是让外部中断正常工作。 下面的代码片段看起来应该可以完成工作、但不会令人愉快。 我在使用 MotorWare 调用时、遵循28069 TRM 中的程序。 请提供任何帮助。  我在引脚上看到从高电平到低电平的转换、但 ISR 无法切换 TEST 位。 如果我关闭 ISR 并轮询输入引脚、切换转换全部上的输出位是很好的。

它位于 main.c 中

//设置外部中断
GPIO_setExtInt (obj->gpioHandle、GPIO_Number_13、CPU_ExtIntNumber_1);
PI_enableExtInt (obj->压 电式、cpu_ExtIntNumber_1);
PI_setExtIntPolarity (obj->压 电极、CPU_ExtIntNumber_1、PI_ExtIntPolarity_FallingEdge);
cpu_enableInt (obj->cpuHandle、cpu_IntNumber_4);

HAL_initIntVectorTable (halHandle);
cpu_enableGlobalInts (obj->cpuHandle);

这就是矢量表的设置方式:

//! \brief 初始化中断矢量表
//! \details 将 ADCINT1指向 mainISR
//! \param[in]处理硬件抽象层(HAL)句柄
静态内联 void HAL_initIntVectorTable (HAL_Handle handle)

HAL_Obj * obj =(HAL_Obj *)句柄;
PIE_Obj * PIE =(PIE_Obj *) obj->压 电式;


ENABLE_PROTECTED 寄存器_WRITE_MODE;

//PIe->ADCINT1 =&mainISR;
PIe->XINT1 =&HallISR;

disable_protected_register_write_mode;

返回;
}// HAL_initIntVectorTable()函数结束

我将首先承认我不是最锋利的工具、但这应该起作用。 否?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    cpu_enableInt()输入参数用于饼图中相应中断的行,而不是列。 对于 XINT1、这将是第1行、使输入参数 CPU_IntNumber_1、而不是 CPU_IntNumber_4。 我理解这种混淆、因为 XINT4是该行的第4列。 我相信您还必须在 HAL_setParams()-> HAL_setupGpio()中将 GPIO13设置为 GPIO 模式(默认设置为 TZ 模式)。

    我认为将来使用这个 XINT 可能是一个问题、除非您在对代码进行更改时将 ADC 中断设置为"高优先级"中断(PIE1.1)。 您将希望 ADC 中断具有最高的总体优先级、因此它不会被抢占(这可能会挤占 InstaSPIN)。

    肖恩
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sean;我做了你建议的更改、但没有乐趣。 GPIO13在 hal_setupGPIOS 函数中按如下方式设置:

    void HAL_setupGpios (HAL_Handle handle)

    HAL_Obj * obj =(HAL_Obj *)句柄;

    /**** PWM 配置 /
    GPIO_setMode (obj->gpioHandle、GPIO_Number_0、GPIO_0_Mode_EPWM1A);// PWM1
    GPIO_setMode (obj->gpioHandle、GPIO_Number_1、GPIO_1_Mode_EPWM1B);// PWM2
    GPIO_setMode (obj->gpioHandle、GPIO_Number_2、GPIO_2_Mode_EPWM2A);// PWM3
    GPIO_setMode (obj->gpioHandle、GPIO_Number_3、GPIO_3_Mode_EPWM2B);// PWM4
    GPIO_setMode (obj->gpioHandle、GPIO_Number_4、GPIO_4_Mode_EPWM3A);// PWM5
    GPIO_setMode (obj->gpioHandle、GPIO_Number_5、GPIO_5_Mode_EPWM3B);// PWM6

    /**** 离散输入配置******** /
    #ifdef 使用_电机_霍尔
    //电机霍尔-可选
    GPIO_setMode (obj->gpioHandle、GPIO_Number_6、GPIO_6_Mode_generalpurpose);//霍尔 U
    GPIO_setDirection (obj->gpioHandle、GPIO_Number_6、GPIO_Direction_Input);
    GPIO_setPullup (obj->gpioHandle、GPIO_Number_6、GPIO_Pullup_Enable);

    GPIO_setMode (obj->gpioHandle、GPIO_Number_7、GPIO_7_Mode_generalpurpose);//霍尔 V
    GPIO_setDirection (obj->gpioHandle、GPIO_Number_7、GPIO_Direction_Input);
    GPIO_setPullup (obj->gpioHandle、GPIO_Number_7、GPIO_Pullup_Enable);

    GPIO_setMode (obj->gpioHandle、GPIO_Number_8、GPIO_8_Mode_generalpurpose);//Hall W
    GPIO_setDirection (obj->gpioHandle、GPIO_Number_8、GPIO_Direction_Input);
    GPIO_setPullup (obj->gpioHandle、GPIO_Number_8、GPIO_Pullup_Enable);
    #endif

    //变速箱选择器霍尔开关
    GPIO_setMode (obj->gpioHandle、GPIO_Number_13、GPIO_13_Mode_generalpurpose);//停机模式齿轮箱输入
    GPIO_setDirection (obj->gpioHandle、GPIO_Number_13、GPIO_Direction_Input);
    GPIO_setPullup (obj->gpioHandle、GPIO_Number_13、GPIO_Pullup_Enable);
    .

    返回;
    }// HAL_setupGpio()函数结束

    目前我还移除了 ADC 中断、这样它就不会妨碍工作、我将在解决后再次访问该中断。 我很确定我在这里缺少其他东西、但却看不到、需要设置的不同寄存器太多。 还有其他建议吗?