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.

[参考译文] TM4C123GH6PM:支持1MHz 采样

Guru**** 2482225 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/727906/tm4c123gh6pm-support-for-sampling-at-1mhz

器件型号:TM4C123GH6PM

豪迪!

我正在从事一个项目、其中使用 Tiva Launchpad 在大约1ms 的时间内以1MHz 的频率采集样本。  我需要在收到触发信号后的~10微秒内进行采样。  我目前编写了正确的采样率和采样数的代码、但采样在触发信号之后延迟约100微秒。  在我的应用中、我在后台运行其他中断;为了实现不间断采样、我必须在采样期间禁用这些其他中断。  我怀疑这是导致这种延迟的原因。

我还尝试在后台持续采样、并在接收到信号时使用器件来拉取数据。  问题是、输入引脚上的去抖和其他中断的干扰会使采样失真、并且无法始终如一地实现所需的采样率。

是否有人知道是否可以在收到使用该器件的触发信号后的10微秒内实现1MHz 采样?  请提供建议。

此致、

Derek

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

    [引用 user="Derek Janak59"]...触发 信号后采样延迟约100微秒

    是一个相当大的问题、"时间流逝"-表明"其他"事件正在阻止进入您的 ADC 处理程序!   和/或-可能证明是正确的-您是"重新初始化"ADC -在每个 ADC 序列之前?   (这已证明是"吃时间"-无需...)  

    尚未描述"测量的子模板" -用于执行此类"ISR 延迟"测量。   (有帮助-防止(不当)"车轮旋转"-无电帮助器 crüe…)

    您是否知道"中断"可能会"提升"为"抢先式"?    这样的"抢占"可以定义为、"异常处理程序可以中断(抢占) 另一个异常处理程序的执行。"   这是否至少表现为"解决"任何/所有"来自(其他/竞争)中断的干扰?"   ( 所有"其他"中断都被抢先式中断"踢到路由"、但一旦(抢先式)中断执行完毕、"将被服务"。)

    我们需要探索(一些)数学-以增强"合理预期会是什么?"    在 ARM Cortex M3/M4下-典型的中断延迟为'12个周期'。   虽然(12个周期)通常是正确的-它(可能)被减少到(仅)'8个周期'-然而、如果 MCU 的浮点单元被启用-一个'Additional 17个周期'-也许被施加!  (如果启用浮点、则可以"避免"添加的这17个周期-通过使用"怠惰堆栈"选项。)

    正如您声明(间接地、至少)对速度的关注一样-我们假设您的'123 MCU 运行@ 80MHz -每周期可产生12.5nS。   100µS 我的(信封背面)数学运算证明是正确的)-您的"延迟"-表示大约8、000个 MCU 周期!  

    [引用 user="Derek Janak59"]是否可以在收到触发信号后的10微秒内实现1MHz 采样[/引用]

    在上述"具体答案"中、 "是的!"    我们如何知道?   该10µS 代表800个 MCU 周期- ARM MCU 可以通过其'Arms'实现该目标(获取该目标?) 背靠背...   

    非常清楚-要将结果返回到(某处)接近"现实"的位置-您必须"遵循"亲吻"(但简短)、并且:

    • (暂时)禁用除 ADC 中断之外的所有中断
    • 采用(几种)方法"触发"ADC 中断-仔细测量和记录由每种方法强制执行的"延迟"

    这种"特殊"方法建立了" ADC 中断延迟基准"。   预计"触发器"与进入 ADC ISR 之间的时间 不会超过14个 MCU 周期

    我建议您实施这种"基于 kiss 的"方法-如果您这样做-并实现(并报告)"接近预期结果"-我们可以进一步讨论"关键成就"-当 允许(可能)"运行 amuck 中断"的完整补充(重新进入)时...

    您的结果远不及"正常/习惯"-您想知道您的系统时钟(偶数)是否接近80MHz ...   

    您可以:

    • 初始化并激活/启用 MCU 的定时器之一
    • 设置为 PWM 模式(计时器信号随后将输出)
    • 将计时器编程为"将系统时钟设置为1、000 "
    • 然后测量并验证计时器(按1、000进行缩放)的频率输出

    有一篇优秀的文章-作者"ARM"-丰富的"中断详细信息"。     

    infocenter.arm.com/.../index.jsp

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

    感谢 CB1提出的各种建议。 我不清楚您尝试采样的内容。 它是使用 ADC 的模拟信号吗? 如果是 ADC、我只想补充一点、您可以设置1ms 计时器、并将该计时器用作 ADC 的直接触发源以启动采样。 一旦收到触发信号、ADC 就会开始采样。 不会有任何延迟。 如果您正在生成1ms 计时器中断并尝试在计时器 ISR 内启动 ADC 采样、则会按照 CB1所述接受中断优先级和延迟。