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.

[参考译文] LAUNCHXL-F28069M:如何为 ADCINT1外设设置最高优先级?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/590491/launchxl-f28069m-how-to-set-highest-priority-for-adcint1-peripheral

器件型号:LAUNCHXL-F28069M
主题中讨论的其他器件:MOTORWARE

尊敬的所有人:

我想将 ADCINT1 (哪个链接到 mainISR()函数)设置为最高优先级 ,因为在我的项目中,我计划根据以下优先级使用3个中断:

ADCINT1为1

TIMER0INT 是第2个

SCIARX 是第3个

我参考了文档"MotorWare 的硬件抽象层(HAL)模块"、该文档针对 MotorWare v18进行了更新、并进行了以下设置:

/*在 hal.c 文件中*/
void HAL_enableAdcInts (HAL_Handle handle)
{
HAL_Obj * obj =(HAL_Obj *) handle;
#ifdef ADCINT1_Highlate_Priority
//启用与 ADC 中断相关的 PIE 中断
PI_enableAdcInt (obj->压 电式、adc_IntNumber_1HP);

//启用 ADC 中断
adc_enableInt (obj->adcHandle、adc_IntNumber_1HP);

//为 ADC 中断启用 CPU 中断
cpu_enableInt (obj->cpuHandle、cpu_IntNumber_1);
#else
//启用与 ADC 中断相关的 PIE 中断
PIE_enableAdcInt (obj->压 电式、ADC_IntNumber_1);

//启用 ADC 中断
adc_enableInt (obj->adcHandle、adc_IntNumber_1);

//为 ADC 中断启用 CPU 中断
cpu_enableInt (obj->cpuHandle、cpu_IntNumber_10);
#endif

}// HAL_enableAdcInts()函数结束 

在文件 hal.h 中的 HAL_initIntVectorTable()函数中,设置中断向量:

#ifdef ADCINT1_COST_RISEPI->ADCINT1_HP
=&mainISR;
#else
PIE->ADCINT1 =&mainISR;
#endif 

在 HAL_acqAdcInts()函数中:

静态内联 void HAL_acqAdcInts (HAL_Handle handle、const ADC_IntNumber_e intNumber)
{
HAL_Obj * obj =(HAL_Obj *)句柄;

ADC_clearIntFlag (obj->adcHandle、intNumber);

#ifdef ADCINT1_Highest 优先级
PI_clearInt (obj->压 电筒、PI_GroupNumber_1);
#else
PI_clearInt (obj->压 电极、PI_GroupNumber_10);
#endif

return;
}// HAL_acqAdcInts ()函数的末尾 

在 mainISR()函数中,我调用了:

中断 void mainISR()
{//

确认 ADC 中断
#ifdef ADCINT1_Highers_Priority
HAL_acqAdcIntts (halHandle、ADC_IntNumber_1HP);
#else
HAL_acqAdcIntts (halHandle、ADC_IntNumber_1);
#endif

//在此中断中执行某些操作

}//完成 mainISR 函数的末尾 

----

但上述设置仅在我未定义 ADCINT1_Highest 优先级时运行。 换句话说、当使用 ADCINT1_Highest 优先级设置时、我无法运行 ADCINT1中断。

请帮助我解决此问题、

提前感谢、

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

    尊敬的所有人:

    我解决了上述问题。 这里的错误是我在 HAL_acqAdcInts()函数中使用了错误的参数。

    真正的设置是:

    /*在 hal.c 文件中*/
    void HAL_enableAdcInts (HAL_Handle handle)
    {
    HAL_Obj * obj =(HAL_Obj *) handle;
    #ifdef ADCINT1_Highlate_Priority
    //启用与 ADC 中断相关的 PIE 中断
    PI_enableAdcInt (obj->压 电式、adc_IntNumber_1HP);
    
    //启用 ADC 中断
    adc_enableInt (obj->adcHandle、adc_IntNumber_1);
    
    //为 ADC 中断启用 CPU 中断
    cpu_enableInt (obj->cpuHandle、cpu_IntNumber_1);
    #else
    //启用与 ADC 中断相关的 PIE 中断
    PIE_enableAdcInt (obj->压 电式、ADC_IntNumber_1);
    
    //启用 ADC 中断
    adc_enableInt (obj->adcHandle、adc_IntNumber_1);
    
    //为 ADC 中断启用 CPU 中断
    cpu_enableInt (obj->cpuHandle、cpu_IntNumber_10);
    #endif
    
    }// HAL_enableAdcInts()函数结束 

    /*在 mainISR()函数中*/ 

    中断 void mainISR() { //确认 ADC 中断 //注:对于 HAL_acqAdcInts ( halHandle、ADC_IntNumber_1)两种情况,始终使用 ADC_IntNumber_1; //在此中断中执行操作 }//完成 mainISR()函数的末尾

    感谢那些对本主题的关注。

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

    感谢您将解决方案发布到您的问题