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.

[参考译文] TMS320F28035-ISR:将 ADCINT1 配置为连续转换的内部触发器(无需 EP)

Guru**** 2524460 points
Other Parts Discussed in Thread: TMS320F28035, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1544958/tms320f28035-ep-configuring-adcint1-as-internal-trigger-for-continuous-conversion-no-isr-required

器件型号:TMS320F28035-TMS320F28035 EP
Thread 中讨论的其他器件:TMS320F28035C2000WARE

工具/软件:

您好:

我正在尝试配置 TMS320F28035 上的 ADC、以使用内部触发实现连续的 ADC 转换、而不涉及 CPU 中断或 ISR。

我的目标是:

  • 使用 ADCINT1 在每次转换后在内部重新触发 SOC3。
  • 避免触发 ADC 中断(无 ISR 处理)。
  • 在不同的功能中手动收集 AdcResult.ADCRESULT3。

 

以下是我使用的配置:  

   //为 ADCINA3 配置 SOC3(电流检测 IPM ADC)

   AdcRegs.ADCSOC3CTL.BIT.ACQPS = 6;  //将采样保持 (S/H) 持续时间设置为 6 个周期

   AdcRegs.ADCSOC3CTL.BIT.CHSEL = 3;  //选择通道 ADCINA3

   AdcRegs.ADCINTSOCSEL1.bit.SOC3 = 1;//从 ADCINT1 触发 SOC3

   AdcRegs.INTSEL1N2.bit.INT1SEL = 3; // EOC3 为 ADCINT1 触发

   AdcRegs.INTSEL1N2.bit.INT1E  = 0;  //禁用 CPU 中断、仅使用内部触发器

   AdcRegs.INTSEL1N2.bit.INT1CONT = 1; //允许 ADCINT1 连续重新触发、而无需等待标志清除

   AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除中断标志

   AdcRegs.ADCSOCFRC1.bit.SOC3 = 1;//通过手动强制 SOC3 启动一次连续触发器  

这适用于上电时的初始转换(通过强制 SOC3)、我会得到一个有效的结果。 但是、当 I 更改输入电压时、后续转换不会自动发生。 似乎从 ADCINT1 到 SOC3 的内部触发器没有再次触发。

 

我还尝试了以下配置(认为需要启用中断才能正常工作):

AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;    //为 EOC 结果锁存设置中断脉冲位置

AdcRegs.INTSEL1N2.bit.INT1E = 1;        //启用 ADCINT1

AdcRegs.INTSEL1N2.bit.INT1CONT = 1;     //连续模式

但这会导致非法的 ISR 陷阱、可能是因为我没有在 PIE 中处理 ADCINT1 中断(因为我不想使用 ISR)。

问题:

  1. 在不需要 CPU 中断或 ISR 的情况下、允许 ADCINT1 持续触发 SOC3 的正确配置是什么?
  2. 是否需要启用 INT1E 才能使内部触发器正常工作?
  3. 在这种情况下、INTPULSEPOS = 1 是否必要?
  4. 我是否存在任何已知的限制或时序要求?

 提前感谢您的帮助!

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

    您好、  

    我必须在下周回到您身边。

    此致、

    Ben Collier

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

    您好、只需跟进、看看是否有任何更新。 谢谢!

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

    您好、

    我很抱歉,你回来的时候耽误了时间。  

    AdcRegs.INTSEL1N2.bit.INT1E = 1;        //启用 ADCINT1

    您可以尝试将其设置为零吗?  

    启用中断后、CPU 将分支到 ISR 的存储位置。 由于 ISR 的位置从未编程、因此会分支到一些垃圾位置、并且 CPU 会遇到故障。

    此致、

    Ben Collier  

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

    您好 Ben、

    我曾尝试将 INT1E 设置为零、但连续采样不起作用。 以下是我的初始配置(也在我的上述查询中共享)

    AdcRegs.ADCSOC3CTL.BIT.ACQPS = 6;  //将采样保持 (S/H) 持续时间设置为 6 个周期

    AdcRegs.ADCSOC3CTL.BIT.CHSEL = 3;  //选择通道 ADCINA3

    AdcRegs.ADCINTSOCSEL1.bit.SOC3 = 1;//从 ADCINT1 触发 SOC3

    AdcRegs.INTSEL1N2.bit.INT1SEL = 3; // EOC3 为 ADCINT1 触发

    AdcRegs.INTSEL1N2.bit.INT1E  = 0;  //禁用 CPU 中断、仅使用内部触发器

    AdcRegs.INTSEL1N2.bit.INT1CONT = 1; //允许 ADCINT1 连续重新触发、而无需等待标志清除

    AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除中断标志

    AdcRegs.ADCSOCFRC1.bit.SOC3 = 1;//通过手动强制 SOC3 启动一次连续触发器

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

    很抱歉我错过了... 让我更详细地了解一下

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

    您好:

    您是否有机会查看此问题?

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

    你能为我做点什么吗? 在本周结束时、我将能够更详细地了解情况。  

    您能否尝试按各种示例所示创建 ADC ISR、并按以下所示注册 ISR:  

    但随后在 PIE 的代码片段中禁用 ISR、如下所示:

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

    Ben、

    我配置了 ADC ISR 并在其中捕获了 ADC 结果。 我可以确认连续采样是否正确、如果在程序运行期间更改通道 3 上的输入、我可以看到 ADC 值有效。

    但是、我不想使用 ISR、因为它运行过于频繁、会阻止其他时间关键型任务。 我的目标是让 ADC 在后台执行连续转换 而不依赖 ISR —让它继续采样、我将在需要时轮询结果。

    我需要连续采样、因为该 ADC 通道用于捕获来自电机的反馈电流以进行闭环控制。

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

    您好、

    您是否可以设置该位以使 PIE 中的 ISR 能够为 0?  

    谢谢、

    Ben Collier

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

     您好:

    如果在 pie 中禁用 ADCINT1(PieCtrlRegs.PIEIER1.bit.INTx1 = 0;)、则会导致非法的 ISR 陷阱。

    我们已经对此进行了讨论。 请查看下面的屏幕截图

    总结一下我到目前为止尝试过的所有内容:

    1. ADCINT 已禁用 (AdcRegs.INTSEL1N2.bit.INT1E = 0) 且未在 PIE 中配置->不触发连续转换。

    2. ADCINT 启用 (AdcRegs.INTSEL1N2.bit.INT1E = 1) 并配置 ADC ISR ->连续转换正常、但我想避免使用 ISR、因为它会阻止其他时间关键型任务。

    3. ADCINT 已启用 (AdcRegs.INTSEL1N2.bit.INT1E = 1) 但在 PIE 中禁用 ISR (PieCtrlRegs.PIEIER1.bit.INTx1 = 0)->这会导致非法的 ISR 陷阱。

    请参阅我的第一条消息来检查所有寄存器设置

    谢谢你

    Mrudu

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

    您好:

    在您提到后继续跟进、您将能够在上周结束时进行查看。 此问题阻止了我们的项目、其他几项任务需要解决。

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

    您好、

    我很抱歉花了这么长的时间来解决这个问题。  我在[C2000WARE]\device_support\F2803x\examples\c28\adc_temp_sensor_conv 中编辑了我们的 ADC 温度传感器转换示例、以执行您想要的操作。 现在、ADCSOC1 由 ADCINT1 连续触发。 已附加编辑的文件。

    e2e.ti.com/.../Example_5F00_2803xAdc_5F00_TempSensorConv.c

    此致、

    Ben Collier

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

    Ben、

    感谢您确认 ADC 连续转换可以在不触发 ISR 的情况下正常工作。 我的配置似乎与您的配置类似、但我将详细回顾并努力解决问题。

    再次感谢您的支持。