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.

[参考译文] F28M35H52C:M3侧的 ADC 中断

Guru**** 2538950 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/838477/f28m35h52c-adc-interrupt-on-m3-side

器件型号:F28M35H52C

该文档指出 M3 NVIC 可以处理来自模拟子系统的中断。  

SPRUH22F 第11.3.7节: ADC 包含八个中断,可以标记和/或传递给 PIE 和 NVIC。

ADC 中断确实是在 Mware\inc\hw_ints.h 中定义的  

在 C28上、我根据需要配置 ADCINT2:

Adc2Regs.INTSEL1N2.bit.INT2E = 1;//启用 ADCINT2
Adc2Regs.INTSEL1N2.bit.INT2CONT=1;//启用 ADCINT2连续模式,也尝试非连续模式
Adc2Regs.INTSEL1N2.bit.INT2SEL = 0xEINT2;//触发 ADCINM3设置 

在 M3上、我对 NVIC 使用 driverlib:

//设置 ADC EOC14中断的中断:
IntEnable (INT_ADC2);
IntRegister (INT_ADC2、ADCHandler);
//启用处理器中断。
IntMasterEnable(); 

其中 ADCHandler 是我定义的回调。  

我不清楚如何从 M3侧确认中断。 我应该使用 IntPendClear (INT_ADC2)吗?  

由于 C28 PIE 不处理中断、因此我似乎不必确认 C28上的中断。 但我会吗? 我是否需要对 PIE 执行其他操作?

当我将上述代码与  ADCHandler 中调用的 IntPendClear (INT_ADC2)一起使用时、内核实际上不会在调试器中运行、而是会不断复位它们。  

之前我有一个工作示例、其中 ADC 中断1在 C28侧执行。 但是、我成功地获得了要在 M3侧执行的 ADC 中断。  

Ricky 在这个主题上的最后一篇文章: https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/138792?Concerto-M3-can-use-adc- 说我要尝试的应该是可能的。  

谢谢。 -Erik

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

    实际上、我的示例正在工作。 内核正在复位,因为我在 I GPIOPinConfigureCoreSelect()之前忘记了 SysCtlPeripheralEnable()。 在 C28上、我发现  Adc2Regs.INTSEL1N2.bit.INT2CONT=1是必要的、并且在禁用连续模式的情况下、M3 ISR 只被调用一次。 因此、我不确定是否正在清除/确认中断。 但是、尽管如此、它似乎仍在工作、因此、结算/确认是否无关紧要?

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

    Erik、

    我很高兴您能够让中断正常工作。

    使用 ADC 中断时、有两个级别的中断服务。 第一个级别在 ADC 内、第二个级别在 SoC 中断处理中。

    ADC 电平

    ADC 本身依靠中断服务(通过 ADCINTFLGCLR)来检测中断溢出。 一旦遇到溢出状态、ADC 将不会生成进一步的中断、直到溢出和中断标志被清除。

    在 C28x 处理 ADC 中断的情况下、从 C28x ISR 清除中断标志很容易。 在 M3处理 ADC 中断的情况下、这会更加困难、因为 M3不能访问 ADC 配置寄存器、因此无法直接从 M3 ISR 清除中断标志。 ADC 需要由 C28x 通过多核方案提供服务、或者 ADC 可以被置于连续模式、这样就消除了服务要求(和溢出检测)。

    SoC 级别

    为了实现正常运行、需要根据已启用的中断路径(C28x PIE 和/或 M3 NVIC)的要求在 ISR 中为 SoC 级的所有中断提供服务。

    Tommy