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.

[参考译文] LP-AM243:Interrput 处理程序、r5f 内核

Guru**** 1818760 points
Other Parts Discussed in Thread: ADC3643, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core

器件型号:LP-AM243
主题中讨论的其他器件:ADC3643SysConfig

1) iAM 在下降沿和上升沿触发 am243的 GPIO (iAM 使用 r5f 内核)

2) 2)当我将 GPIO 的输入频率设置为1MHz 时、2MHz ISR 正常工作

3)但我将其设置为3MHz、但它不工作


为什么我能够看到这种行为?ISR 支持的最小频率和最大频率是多少? 当具有相同优先级的中断(相同 的中断再次发生)中断 r5f 内核时会发生什么 情况?

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

    您好、Manoj、

    您使用的是 SDK 的哪个版本?

    [引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core "]为什么我能够看到此行为?

    我准备好您使用的是 AM243x LaunchPad。 如何生成 LP 的 GPIO 输入? 您能否与此行为共享示例代码?

    [引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core "]当具有相同优先级的中断(相同 的中断再次发生)中断 r5f 内核 时会发生什么情况?

    请参阅 TRM:

    • 第6.2.3.5.5节 VIM 中断优先级
    • 第6.2.3.5.8节 VIM 中断处理

    当一个中断从挂起状态变为活动状态时、该中断被载入相应的活动寄存器、并且所有优先级相等或较低的中断都被屏蔽("屏蔽关闭"表示它们被屏蔽、不受优先级仲裁的影响、从而中断当前活动的中断)。

    这意味着即使中断嵌套被启用、同一中断也不能中断当前 ISR。

    ISR 清除 VIM 和中断源上的中断。 通常、在清除(确认)现有中断之前、中断源不会生成新中断。 清除的顺序取决于中断是脉冲还是电平。 请参阅: \sources\kernel\nortos\DPL\R5\Hwip_armv7r_handlers_nortos.c\Hwip_IRQ_handler_c

    然后、源可以生成另一个中断、VIM 将作为一个新中断进行处理。 如果这是最高优先级的挂起中断、VIM 将把这个中断发送到 R5F。

    此致、
    弗兰克

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

    静态空 GPIO_bankIsrFxn (void *args){
    //uintptr_t oldIntState;
    //oldIntState = Hwip_disable();
    //如果遇到第一个下降沿,则返回
    if (status=0 && Getdata (gpioBaseAddr、7)=1){
    返回;

    if (status=0){
    //ISR 在上升沿执行(iam 获取 MSB)
    temp=Getdata (gpioBaseAddr、6、0);
    STATUS=1;
    }如果(count <=samples && status=1)则为{
    //ISR 在下降沿执行(iam 获取 lsb)
    temp=(temp<<7)|Getdata (gpioBaseAddr、6、0);
    STATUS=0;
    ESDRAM[count]=温度;
    count++;

    //Hwip_restore (oldIntState);


    实际上、我正在尝试从 adc3643 (CMOS 接口)捕获数据、因此我会在下降沿和上升沿触发 ISR、并根据来自数字源的 Dclk (映射到 GPIO1_7)和触发 ISR 来收集数据、在0.5MHZ 时、我将获得准确的数据、 1MHz 至2.5MHz ISR 正在执行、ESDRAM 的值正在变化、但数据不准确、超过3MHz 时、当我在 ccs..ca的表达式选项卡中添加 esdram 值时、无法读取这些值。请帮我。 为什么我能够看到这种行为

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

    您好、Manoj、

    我认为您正在使用 SOC GPIO 对 ADC 输出接口进行位拆裂。

    DCLK 是来自 ADC 的输出时钟? 这连接到 GPIO1_7?

    该接口配置为双倍数据速率模式、即 ADC 在每个 DCLK 边沿(低到高和高到低)驱动输出数据? 数据引脚是否连接到其他 SOC GPIO?

    您的代码在两个 DCLK (GPIO1_7)边沿上采用 GPIO 组 ISR?

    ISR 从连接的 GPIO 读取 ADC 数据引脚?

    IRQ 调度程序在寄存的 ISR 函数执行前后执行。 我猜是调度时间加上注册的 ISR 时间需要超过1微秒。 因此、ISR 并不总是在正确的时间对数据位进行采样。

    您能否使用 PMU 测量 ISR 之间的时间? 请参阅 https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_05_00_24/exports/docs/api_guide_am243x/KERNEL_DPL_CYCLE_COUNTER_PAGE.html

    此致、
    弗兰克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="16636" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4484663 #4484663"]DCLK 是来自 ADC 的输出时钟? 连接到 GPIO1_7?

    是的


    [引用 userid="16636" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4484663 #4484663"]您的代码在 DCLK (GPIO1_7)两个边沿上获取 GPIO 组 ISR?

    是的

    [引用 userid="16636" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4484663 #4484663"] ISR 从连接的 GPIO 读取 ADC 数据引脚?[/quot]

    是的

    [引用 userid="16636" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4484663 #4484663"]我猜的是发送器时间加上注册的 ISR 时间需要1微秒以上。 因此、ISR 并不总是在正确的时间对数据位进行采样。

    我将对此进行检查

    我的 ISR 是否无法在3MHz 下处理、因为我无法看到 ESDRAM 的值在3MHz 下发生变化...如何检查 ISR 的最大中断频率是多少?

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

    您好、Manoj、

    [引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4486242 #4486242"]如何检查 ISR 的最大中断频率是多少?[/quot]

    我建议使用周期计数器(PMU)测量 ISR 之间的时间:请参阅 https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_05_00_24/exports/docs/api_guide_am243x/KERNEL_DPL_CYCLE_COUNTER_PAGE.html

    这将告诉您 ISR 之间消耗的 R5F 时钟周期数(@ 800MHz)。

    您可以尝试的另一件事是驱动 ISR 内部的 GPIO 输出(例如、ISR 入口为高电平、ISR 出口为低电平)。 然后查看示波器或逻辑分析仪上的 GPIO 输出时序。

    从起始的 ISR 频率(0.5MHz)开始、然后逐渐增加 ISR 频率、直到您的 ADC 采样停止工作。

    请告诉我它是怎么发生的。

    此致、
    弗兰克

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

    1)

    没有内存传输的 ISR (如果包含块传输 DMA (UDMA),则至少需要2.4us):-1.2*2= 2.4us

    带有内存传输的 ISR (不带 UDMA):-1.3*2= 2.6us
    Dclck:-2.5MHz 0.4us


    是否可以使用 pdma 直接从 GPIO 中读取并在没有 ISR 的情况下存储在存储器中?

    2)

    是否可以增加 r5f 内核的输入时钟频率?



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

    您好、Manoj、

    [引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4498999 #4498999"]是否可以使用 pdma 直接从 GPIO 读取并在没有 ISR 的情况下存储在内存中?

     请参阅 AM243x TRM 版本 E、表11-626。 跨设备域的 PDMA 分配。 该表显示了 PDMA 处理的外设。 GPIO 未包含在列表中。

    [引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4498999 #4498999"]是否可以提高 r5f 内核的输入时钟频率?

    最大 R5F 时钟频率为800MHz。 默认情况下、R5F 内核配置为此频率。

    [引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4498999 #449999"]

    没有内存传输的 ISR (如果包含块传输 DMA (UDMA),则至少需要2.4us):-1.2*2= 2.4us

    带有内存传输的 ISR (不带 UDMA):-1.3*2= 2.6us
    Dclck:-2.5MHz 0.4us

    [/报价]

    请详细说明一下吗? 您是指使用/不使用 uDMA 的 GPIO ISR 从 GPIO 传输到存储器吗?

    此致、
    弗兰克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="16636" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4500487 #4500487")最大 R5F 时钟频率为800MHz。 默认情况下、R5F 内核配置为此频率。[/quot]

    即使 R5F 的输入时钟频率最高可达800MHz、但在 SysConfig 中、我们将其设置为25MHz、因为它来自25MHz LVCMOS 振荡器、是否有任何方法可以将频率提高至800MHz

    [引用 userid="16636" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4500487 #4500487")您能详细说明吗? 您是指使用/不使用 uDMA 的 GPIO ISR 从 GPIO 传输到存储器吗?

    是的、如果我使用 UDMA 在 GPIO 的一个采样后使用 ISR 将数据传输到存储器中、则没有使用

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

    您好、Manoj、

    [引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4500959 #4500959"]即使 R5F 的输入时钟频率最大为800MHz、但在 SysConfig 中、我们将其设置为25MHz、因为它来自25MHz LVCMOS 振荡器、是否有任何方法可以将频率提高到800MHz

    R5F 的最大频率为800MHz。

    请参阅 TRM

    • 表4-3. PLL 参考时钟选择
    • 4.5 PLL 配置
    • 表4-37. MAIN_PLL14 (Pulsar PLL)(2400MHz)
    [引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4500959 #4500959"]是的,如果我使用 uDMA 在 GPIO 的一次采样后使用 ISR[/quot]将数据传输到内存中,则没有使用 UDMA。

    好的、在我看来、DMA 对时序的影响很小(200ns)。

    关键问题不是从 GPIO 读取数据所需的时间、而是为 GPIO ISR 提供服务所需的时间。 因此、需要优化 GPIO ISR 响应时间。

    您是否在"发布"模式下构建代码?

    您是否考虑使用 PRU IO 而不是 GPIO 来连接 ADC?

    此致、
    弗兰克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="16636" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4503954 #4503954"]您是否考虑使用 PRU IO 而不是 GPIO 来连接 ADC?

    我现在就这么做了

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

    您好、Manoj、

    好的、如果您遇到任何问题、请告诉我。

    此致、
    弗兰克