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/TMS320F280041C:INSTASPIN 不会n`t 主 ISR

Guru**** 2535750 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/945731/ccs-tms320f280041c-instaspin-doesn-t-trigger-mainisr

器件型号:TMS320F280041C
主题中讨论的其他器件:C2000WARE

工具/软件:Code Composer Studio

您好! 我`m 第一次使用您的 INSTASPIN 库。 我`ve 进行更改、以便我可以调整我的硬件。 因此、我将 ADC 解决方案更改为:

void HAL_setupADC (HAL_Handle handle)
{
HAL_Obj * obj =(HAL_Obj *) handle;

SYSCTL_DELAY (100U);
ADC_setVREF (obj->adcHandle[2]、ADC_reference_internal、ADC_reference_3_3V);
adc_setVREF (obj->adcHandle[1]、adc_reference_internal、adc_reference_3_3V);
adc_setVREF (obj->adcHandle[0]、adc_reference_internal、 ADC_reference_3_3V);
SYSCTL_DELAY (100U);

//
将内部基准配置为1.65*2 = 3.3
ASysCtl_setAnalogReference1P65 (ASHSCTL_VREFHIA |
ASHSCTL_VREFHIB |
ASHSCTL_VREFHIC);

//启用内部电压基准
ASysCtl_setAnalogReferenceInternal (ASHSCTL_VREFHIA |
ASHSCTL_VREFHIB |
ASHSCTL_VREFHIC);
*/
//设置主时钟比例因子(ADC 模块的最大时钟为50MHz)
ADC_setPrescaler (obj->adcHandle[0]、ADC_CLK_DIV_2_0);
ADC_setPrescaler (obj->adcHandle[1]、ADC_CLK_DIV_2);ADC_setHandler
(obj_2) ADC_CLK_DIV_2_0);

//将 ADC 中断脉冲生成设置为转换结束
ADC_setInterruptPulseMode (obj->adcHandle[0]、ADC_PULSE_END_TO_CONV);
ADC_setInterruptPulseMode (obj->adcHandle[1]、ADC_PULSE_END_TO_CONV);ADC_setInterruptPulseMode (obj->adcHandle[1]、AdcHandle_InterruptHandle_2_InterruptMode_[ADC_AdcHandle_2);
adc_pulate_end_for_CONV);

//启用 ADC
adc_enableConverter (obj->adcHandle[0]);
adc_enableConverter (obj->adcHandle[1]);
adc_enableConverter (obj->adcHandle[2]);

//设置 SOC 的优先级 adc_setHandle[1]


;adc_setrality-[adcHandle]、adcpr-[adc_setrality]、adcHandle[2];adcpr_adc_enp_ench_enp_enp_all_ad_adrity]、adc_enp_enp_enp_enp_enp_enp_enp_enp_enp_enp_enp_enp_enp_ench_enp_enp_enp ADC_PRI_ALL_HIPRI);

//允许 ADC 加电
SYSCTL_DELAY (1000U)的延迟;

//配置中断源
//通过向
ADCSOCxCTL 寄存器的 ACQPS 分配14 //将充足窗口配置为15个系统时钟周期。
// RC2/C1


//为 hvkit_rev1p1配置 SOC
// IA-FB - B3->RB0
/* ADC_TRIGGER_EPWM1_SOCA*/
ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_NUMBER0、ADC_TRIGGER_SW_ONLY、
ADC_CH_ADCIN7、HAL_ADC_SAMPLE_WINDOW);

// IB-FB - C0->RC0
ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_NUMBER0、ADC_TRIGGER_SW_ONLY、
ADC_CH_ADCIN12、HAL_ADC_SAMPLE_WINDOW);

// IC-FB - A3->RA0
ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_number1、ADC_TRIGGER_SW_ONLY、
ADC_CH_ADCIN10、HAL_ADC_SAMPLE_WINDOW);

// ADC-Vhb1 - C2->RC1
ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_NUMBER0、ADC_TRIGGER_SW_ONLY、
ADC_CH_ADCIN9、HAL_ADC_SAMPLE_WINDOW);

// ADC-Vhb2 - C1->RC2
ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_number1、ADC_TRIGGER_SW_ONLY、
ADC_CH_ADCIN14、HAL_ADC_SAMPLE_WINDOW);

// ADC-Vhb3 - B4->RB1
ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_number2、ADC_TRIGGER_SW_ONLY、
ADC_CH_ADCIN15、HAL_ADC_SAMPLE_WINDOW);

// VDCBUS - A9->RA1。 hvkit 板的 Vbus 反馈上具有电容器、因此
//采样不需要很长的时间即可获得准确值
ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_number1、ADC_TRIGGER_SW_ONLY、
ADC_CH_ADCIN11、HAL_ADC_SAMPLE_WINDOW);

ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_Number3、ADC_TRIGGER_SW_ONLY、
ADC_CH_ADCIN10、HAL_ADC_SAMPLE_WINDOW);

ADC_setInterruptSource (obj->adcHandle[2]、ADC_INT_NUMBER1、ADC_SOC_NUMBER0);
//adc_enableInterrupt (obj->adcHandle[0]、adc_int_number1);
// adc_clearInterruptStatus (obj->adcHandle[0]、adc_int_number1);
return;
} // HAL_setupADCs()函数结束

HAL_enableADCInts (HAL_Handle handle)
{
HAL_Obj * obj =(HAL_Obj *)句柄;

//启用与 ADC 中断相关的 PIE 中断
INTERRUPT_ENABLE (INT_ADCC1); //C1.

//启用 ADC 中断
adc_enableInterrupt (obj->adcHandle[2]、adc_int_number1);
adc_clearInterruptStatus (obj->adcHandle[2]、adc_int_number1);

//为 ADC 中断启用 CPU 中断
INTERRUPT_enableInCPU (INTERRUPT_CPU_INT1);

#ifdef _VSF_EN_
//为 FAST 估算器启用 CPU 定时器0中断
INTERRUPT_ENABLE (INT_TIMER0);
#endif //_VSF_EN_

return;
}// HAL_enableADCInts()函数结束 

]

 n`t 问题是 mainISR 不会触发。 我的 ADC 通道正在工作。 我`ve 进行了手动分层检查(adc_forceSOC (hal.adcHandle[0]、adc_SOC_NUMBER0);)。 ADC 计数器正在计数。 在寄存器中启用 INT1。 该标志被清除。 在 ADCINTSEL 寄存器中启用 ADC 中断。 已将 mainISR 分配给 INT_ADCC1。 我`ve 了代码中不必要的内容。

有什么建议吗?

谢谢!