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.

[参考译文] AM263P4:CAN XBAR 可用于将 ADC0_EVT1映射到 PRU_0中断。

Guru**** 2394295 points
Other Parts Discussed in Thread: SYSCONFIG, AM263P4

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1496514/am263p4-can-xbar-be-used-to-map-adc0_evt1-to-pru_0-interrupt

器件型号:AM263P4
主题中讨论的其他器件:SysConfig

工具/软件:

当 ADC0触发中断1时、我希望使用 XBAR 在 PRU_0上触发中断。  我主要尝试通过 R5FSS0上的 SysConfig 实现此目的、但我假设需要在 PRU_0代码中添加多行内容。 R5FSS0和 PRU_0代码均使用 C 编写

我仍在通读文档、但似乎可以使用输出 XBAR 将 ADC 事件映射到 ICSS (文档中 PRU 和 ICSS 看起来可以互换)。 在 SysConfig 中、非常不清楚如何为此正确配置输出 XBAR。 我可以轻松找出我添加的 XBAR 实例正在选择其输入事件以及其他几个参数。 但是、它如何配置将使用的 XBAR 实例以及任何相关信号并不是很清楚。  

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

    您好 Nathan

    您能否浏览 PRU-ICSS 本地 INTC、其中讨论了 PRU-ICSS 的中断配置。

    您可以使用它将相应的 OUTPUTXBAR 信号映射到 ICSS 的中断控制器。

    此致、
    阿克什特

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

    您未能介绍如何在此应用程序的 SysConfig 中正确设置 OUTPUTXBAR。 我阅读了技术指南中有关 OUTPUTXBAR 的部分、但与 SysConfig 中发生的情况并不一致。 技术指南还让人觉得 OUTPUTXBAR 只能映射到 PRU1的中断、而不能映射到 PRU0的中断。 我需要澄清。

    我已在 AM263P4的正确技术指南中查看了这一部分。 OUTPUTXBARS 似乎映射到事件48到63。 是否有任何有关如何设置这些中断的 C 代码示例、或者我自己解密技术手册和寄存器附录来获取此设置?

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

    您好 Nathan、

    显示 OUTPUTXBARS 映射到事件48到63。

    正确、这也从 TRM 中可以看出

    使用此信息:

    我为 OUTPUTXBAR 设置了上述配置、选择所需的 ADC 事件(您可以在此处选择任何 OUTPUTXBAR)

    现在、在 ICSS 配置中:

    我选择输入信号为63、如果我们从 TRM 中检查、该信号会映射到 OUTPUTXBAR15。

    现在、您可以检查状态寄存器以查看是否注册了中断!

    7.3.7.1.1.2 PRU-ICSS 中断状态检查 

    下一个阶段是捕获哪些中断挂起。 挂起状态有两种:原始状态
    和启用状态。 原始状态是中断的挂起状态、与的使能位无关
    EOC 中断。 启用状态是使能位激活时中断的挂起状态。 当 ENABLE 位处于非活动状态时、启用状态将始终为非活动状态。 中断中会捕获已启用的中断状态
    状态启用/清除寄存器(ICSS_INTC_ENA_STATUS_REG0至 ICSS_INTC_ENA_STATUS_REG4)。
    在至中、中断"N" th 的状态由 ICSS_INTC_ENA_STATUS_REG0的 N-REG0位指示
    ICSS_INTC_ENA_STATUS_REG4。 由于有160个中断、因此使用了五个32位寄存器来捕获
    已启用中断状态。 挂起状态反映自上次发生以来中断是否发生
    状态寄存器位已清除。 状态寄存器中的每个位都可以单独清除。



    如果这对我有帮助、请告诉我!

    此致、
    阿克什特

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

    我担心在某处有一个缺失的步骤。  目前、RTI1会在32kHz 的频率下生成中断。 通过创建一个用于切换硬件输出的 ISR 函数、RTI1中断工作正常。  然后、ADC0突发模式使用 RTI1中断来启动6 SOC 突发。 ADC0的 ADC 中断1具有一个中断配置、设置为 SOC/EOC15的转换结束。  通过创建用于切换硬件输出的测试 ISR、验证此中断是否正常运行。  此时操作中已验证 ADC0中断1是否按预期工作。

    我使用 OUTPUTXBAR8将输出 XBAR 配置为使用"ADC0_EVT1"。 SysConfig 似乎会生成用于此配置的代码、并且我尚未修改或添加用于此配置的其他代码。 我使用默认引脚(C8)进行测试、并使用示波器对其进行监控。 无论我如何配置输出 XBAR 配置、在运行期间都不会看到信号电平变化。 我可以通过更改"Invert XBAR Output"设置来更改运行时看到的逻辑高/低电平。 我已经尝试了输出 XBAR 配置中的每个设置组合、但在初始化后仍然看不到输出状态有任何变化。

    我还创建了一个 while 循环来监控寄存器0x48020204的值、这是 ICSSM_PR1_ICSS_INTC_INTC_SLV_RAW_STATUS_REG1寄存器。 使用与之前的测试相同的输出切换方法进行验证时、该值始终为0。

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

    您好 Nathan、

    对延迟的响应表示歉意、我意识到您只需通过中断、而不需要事件!

    我在示例 ADC_SoC_RTI 上为您提供了一个有效的解决方案。

    1. OUTPUTXBAR 具有两个连接到 INTXBAR 的输入。

    2. 选择其中一个作为 OUTPUTXBAR 将输出的内容。
    3. 将 ADCx_INTy 映射到同一 INT_XBAR
    4. 将 ICSS 配置为对 INTC 使用相同的 outputxbar。
    5. 在代码中注册中断(为此、您可以参考同一个 ADC_SoC_RTI 示例)

    之后我运行了这个程序、并获得了以下输出来验证我的预期:

    1. 示波 OUTPUTXBAR8时的中断输出
    2. 值在以下位置变化

    如果有用、请告诉我!

    此致、
    阿克什特

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

    感谢您的答复。 我能够按照您提供的步骤复制您的结果。 遗憾的是、它不完全符合我的要求。

    对于我的实现、我希望中断处理程序位于 PRU 上。 更具体地说、我不希望 R5内核有 ADC EOC 的中断处理程序。 根据所述的实现、使用 INT XBAR 时无法避免中断处理程序。 我尝试了没有设置回调以及将值设置为 NULL、这两种情况都会导致 HwiP_construct 函数失败。  

    此功能的简单目标是让 PRU 处理与 ADC 转换结束相关的所有功能。 R5内核可以设置所需的任何 XBAR 或 ICSS 实例并进行初始化、但当 ADC 转换结束时、实现不需要 R5的干预。 我本来希望 XBAR 能帮助实现这一点。

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

    您好 Nathan、

    这只是将信号路由到 PRU 的中断控制器。

    在代码中注册中断(您可以为此引用相同的 ADC_SoC_RTI 示例)

    您不需要在 R5中注册此中断、并且应该仍然能够获得正确的结果。

    此功能的简单目标是让 PRU 处理与 ADC 转换结束相关的所有功能。 R5内核可以设置所需的任何 XBAR 或 ICSS 实例并进行初始化、但当 ADC 转换结束时、实现不需要 R5的干预。 我曾希望 XBAR 能帮助实现这一点。

    这正是在这种情况下发生的情况。

    如果您需要有关此方面的更多信息、请告诉我!

    此致、
    阿克什特

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

    谢谢你的答复,我能够得到一个更接近一步. 我能够测量引脚 C8上的预期输出、表明输出 XBAR 正在按预期传输 ADC 转换结束事件。 我还能够读取寄存器0x48020204并验证其值是否按预期变化。

    遗憾的是、我无法成功读取 PRU 寄存器0x48020204。 我添加了代码:

    #define PRU_INTC  (*((volatile unsigned long *)0x48020204))
    
    void main(void)
    {
    
    unsigned long ui32_interrupt_flags;
    
    while(1){
        ui32_interrupt_flags = PRU_INTC;
        if(0 < ui32_interrupt_flags){
            ui32_interrupt_flags = 0;
        }
    }
    }

    此代码只是轮询0x48020204寄存器、然后在寄存器值大于0时复位可变值。  这样、我就可以在设置变量时设置断点、这样我就可以正确地触发 PRU 的操作。  我永远不会看到达到断点。

    更多详细信息、我在 R5内核上放置了一个中断处理程序、以便在该处理器上设置一个断点 、然后检查值0x48020204。 希望我能从 PRU 的上下文中读出同样的内容。  从 R5的角度看:

    从 PRU 的上下文查看时:

    我在从 PRU 读取数据时遇到了一些困难、但我能够按预期逐步调试 PRU 代码并设置工作中断点。 我认为这不是与调试相关的问题。 我认为还需要执行另一个步骤来获取 PRU 来读取我要查找的值。

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

    您好 Nathan、

    您能帮我了解一下您在 PRU 端遇到的问题吗?

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

    问题是 PRU 未在输出 XBAR 上接收到 ADC 已完成其转换的任何类型的信号。 如上所述、当 ADC 完成转换时、输出 XBAR 正在按预期填充。 但是、由于某种原因、PRU 无法正确访问该信号。

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

    可能存在一些配置问题、

    如果我理解正确、您会将 XBAR 输出中断映射到 ICSS 中断吗?

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

    它可以映射到 ICSS 中断、或者 PRU 可以轮询输出 XBAR 寄存器。 这两种方法都适用于我的应用。  

    我正在尝试设置基础设施、以便 PRU 在 ADC 转换结束时处理数据解析、在运行时无需 R5干预。

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

    您无法读取输出 XBAR 寄存器吗?

    ICSS 中断映射是此处的挑战吗?

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

    正如之前的回复中所述、我尝试读取 PRU 上的输出 XBAR。 请查看该评论以了解完整详情和屏幕截图。

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

    我看到、当您从 PRU 上下文读取时、您查看的地址是全局 SOC 地址、如果您查看 PRU 存储器映射- 0x20204、您能告诉我您看到的值

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

    我可以看到来自 PRU 的正确信号0x20204更改为0以外的值。 不过、我观察到该值不会自动复位为0。 我怀疑有一个不同的寄存器、需要告诉它清除这一状态。 或者、我需要使用 PRU 中断功能、而不是简单地轮询寄存器0x20204的值。

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

    我能够通过向寄存器0x20024写入值56来清除该值。  现在我看到 PRU 上需要的信号。

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

    很高兴知道这个 Nathan。