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.

[参考译文] AM4377:使用 DMTimer 触发 ADC1采样

Guru**** 2540720 points
Other Parts Discussed in Thread: AM4377

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/772014/am4377-trigger-adc1-sampling-with-dmtimer

器件型号:AM4377

我不会在计数器溢出时触发 DMTimer5的 ADC1采样。

为此、我将 ADC 步骤配置为 HW_SYNC_Continuousand 并选择了 ext_HW_EVENT:  

HWREG (SOC_CONTRAL_MODULE_REG + CTRL_MAG_EVT_CAPT /* CTRL_ADC1_EVT_CAPT*/)= 0x2U;//选择 DMTimer5

这应该将 DMTimer5的 point_pend 选为 ADC1的外部硬件事件。  

但 ADC 采样不会开始。 缺少什么?  

为定时器溢出创建一个硬件事件(Hwi_create)运行良好、所以我确信它正在计数。 是否需要将 point_pend 启用为输出? 如果是、如何操作?

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

    IDE 是 Code Composer Studio 8.3.0

    对于固件、我使用 TI RTOS:SYS/BIOS 版本6.73.00.12、AM437X SDK 版本5.01.00.11和 PDK 版本1.0.12。

    XDCtools 版本为3.50.8.24

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

    根据原始帖子、您可能 会尝试配置 ADC 以执行从硬件事件开始的连续测量序列。  如果是这种情况、我不确定 ADC 是否支持该函数。  这基于 AM4377 TRM 的"启用软件或硬件的步骤"部分中的以下说明。

    即使在连续模式下、此硬件事件也只安排一个完整序列。 如果需要再次执行启用硬件的步骤、则必须在先前触发的序列完成后生成新的硬件事件。

    我 无法回答 与 软件配置相关的问题。  如果 您认为您的问题与软件配置有关、我需要从我们的软件团队中找到帮助。

    此致、
    Paul

     

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

    根据我的理解、 HW_SYNC_Continuous意味 着执行该步骤后不会禁用该步骤、因此每次发生硬件事件时该步骤都是序列的一部分。 我是对的吗?

    这就是我想要的。 每次 DM计时 器溢出时、序列都会启动。  

    参考 AM437x 技术参考手册这应该可以通过 将 TIMER5 point_pend 设置为 ext_HW_EVENT 来实现、方法是将 ADC1_EVTCAPT 设置为2 (图12-1)。

    图19-3显示 DMTIMER 的 point_pend 连接到 ADC EVTCAPT (此图中仅提到 ADC0)。  

    我不知道的是:DMTimer5的"连接" point_pend 到 ADC1 EVTCAPT 多路复用器是否需要一些额外的路由/多路复用? 我是否需要配置某项来设置事件上的 pointtr_pend? 现在、我已经启用了计时器溢出的中断。

    谢谢

    Sebastian

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

    FSM 序列发生器图(图12-2)指示当阶跃配置为单次触发模式时、与阶跃相关联的阶跃使能位复位、这似乎表示当配置为连续模式时、与阶跃相关联的阶跃使能位不会复位。 因此我同意、这应该是 FSM 的工作方式。 但是,“此硬件事件将只安排一个完整的序列,即使是连续模式”这一说法似乎与此预期不符。 也许这个语句只是试图告诉用户当 ADC 被禁用时序列被停止、并且一旦 ADC 被重新启用、将需要一个新的硬件触发器。 我需要与设计团队的某个人讨论这一点、并要求他们确认 FSM 是如何运作的。

     

    DMTimer5的 POINTER_PEND 信号输出应连接到 ARM 中断输入编号125和 ADC1_EVTCAPT 多路复用器输入编号2。 因此、我同意您应配置该寄存器以选择 ADC1_EVTCAPT 多路复用器的输入2。

     

    部分 AM437x TRM 内容源自仅实现单个 ADC 的前一个 AM335x 器件。 在将第二个 ADC 添加到 AM437x 时、很可能未更新图9-3。

     

    ADC1_EVTCAPT 位需要配置为选择 ADC1_EVTCAPT 多路复用器的输入2。

    需要配置 HW_EVT_MAPPING 位以选择硬件事件输入模式。

    模式位需要配置为选择硬件同步、连续。

     

    此致、

    Paul

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

    实际上、我没有设置 HW_EVT_MAPPING。 但无论如何它不起作用。

    ADC 的当前配置

    - ADC1 EVT_Capt 多路复用器设置为2: HWREG (SOC_CONTRAL_MODULE_REG + CTRL_MAG_EVT_CAPT /* CTRL_ADC1_EVT_CAPT*)= 0x2U;//选择 DMTimer5

    - HW_EVT_MAPPING 设置为1: HWREG (ADC1_BASE + ADC0_CTRL)= 0x142;//前置放大器旁路、在 ADC 结果中输入步进 ID、 针对 ext_HW_evt 将 HW_EVT_MAPPING 设置为1

    -步骤为 HW_SYNC_Continuous (我也尝试过一次性)并启用:  

    HWREG (ADC1_BASE + ADC0_STEPCONFIG (CHAN)=

    (((ADC0_STEPCONFIG_PERAING_SAMPLESAVG_2 << ADC0_STEPCONFIG_PERAING_SHIFT)|
    (ADC0_STEPCONFIG_FIFO_SELECT_0 << ADC0_STEPCONFIG_FIFO_SELECT_SHIFT)|
    (3 << ADC0_TS_CHARGE_STEPCONFIG_SEL_RFP_SWC_SHIFT)|// VREFP:111 = VREFP *
    (3 << ADC0_TS_CHARGE_STEPCONFIG_SEL_RFM_SWC_SHIFT)|// VREFN:11 = VREFN *
    (ADC0_STEPCONFIG_MODE_HW_SYNC_CONTINUE << ADC0_STEPCONFIG_MODE_SHIFT)|
    (0 << ADC0_STEPCONFIG_DIFF_CNTRL_SHIFT)|
    (((ain_seq[cha])<< ADC0_TS_CHARGE_STEPCONFIG_SEL_INP_SWC_SHIFT)|
    ((8)<< ADC0_TS_CHARGE_STEPCONFIG_SEL_INM_SWM_SHIFT);// INM:1000 = VREFN *

    HWREG (ADC1_BASE + ADC0_Stepen)= ADC0_Step_Step1_MASK | ADC0_Step_Step2_MASK | ADC0_Step_Step3_MASK | ADC0_Step_STEP4_MASK | ADC0_Step_STEP5_MASK | ADC0_STEP6_MASK;

    DMTimer5的配置:

     - DMTimer 中断被清除:DMTIMERIntrClear (DMTimer_base、0x7U /*所有中断*/);

    -针对过流事件的 DMTimer 中断被启用:DMTIMERIntrEnable (DMTimer_base、DMTIMER_INTR_MASK_OVF);

    正如我说过的、我检查了计时器计数和硬件中断是否正常工作。

    似乎仍然缺少一些东西。

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

    TRM 中提供的功能说明是根据与原始设计人员就 FSM 的操作进行的多次讨论而创建的。 我记得,根据他几年前的一些输入,包括“这个硬件事件只能安排一个完整的序列,即使是连续模式”的语句。 然而,我可能是从上下文角度看了他的一项评论,并在这项发言中歪曲了这一观点。 遗憾的是、他不再在 TI 工作、我们必须查看该设计以了解其工作原理。

     

    我有人查看了状态机设计、他们确认了仅当步骤配置为单次触发模式时、FSM 才会复位相应的步进使能位。 因此、配置为连续模式的任何步骤都应在每次通过序列发生器时重复执行。 该序列应继续执行、直到软件禁用 ADC。

     

    原始设计人员可能希望我说、如果软件禁用 ADC 并在稍后重新启用、则需要一个新的硬件事件来重新启动序列。

     

    我不清楚为什么序列不是从硬件事件开始。 您使用什么作为指示器来确定 ADC 从未检测到硬件事件? 您是否在定时器翻转之前和之后检查了 FIFOxCOUNT 的值、以查看 FIFO 指针是否递增?

    如果您完全确信 ADC 从未看到硬件事件、则可能需要创建一个中断服务例程来为 ARM 中断 TINT5 (#125)提供服务、以确认定时器已正确配置为在其 point_pend 输出上创建转换。 但是、我认为您可能已经检查过这一点。

     

    此致、

    Paul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另一个有助于确认 ADC 配置正确的建议是、如果您的硬件平台支持此选项、请尝试使用外部 ADC 触发输入。 例如、您可以使用 GPIO 或将计时器事件导出到 PWM 输出之一、并将其循环回 ADC 外部触发器输入。

    此致、
    Paul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否取得了任何进展?

    如果我没有听到您的声音、我将在几天内关闭此主题。

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

    是和否

    我停止了在计时器中断中进行调查。 我现在的解决方案是将 PWM3的 SyncOut 与 ADC 的外部硬件触发器连接。

    其余配置大致相同。

    感谢你的帮助!

    此致、

    Sebastian