主题中讨论的其他器件:SysConfig
您好!
我目前正在开发用于 LED 驱动器的通信协议。 我想知道如何通过 SysConfig 将 DMA 目标地址连接到 CLB 推送 FIFO、从而扩展有效深度。 此外、我想知道是否有任何示例将 DMA 配置为将值从代码中的变量发送到外设寄存器。
提前感谢、
大卫
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.
您好!
我目前正在开发用于 LED 驱动器的通信协议。 我想知道如何通过 SysConfig 将 DMA 目标地址连接到 CLB 推送 FIFO、从而扩展有效深度。 此外、我想知道是否有任何示例将 DMA 配置为将值从代码中的变量发送到外设寄存器。
提前感谢、
大卫
尊敬的 David:
遗憾的是、CLB 模块没有 DMA 访问权限。 对于具有 DMA 访问权限的模块、可以在 SysConfig 中执行以下操作:
要使用"Manual"选项 、您可以直接输入地址作为 目标地址 (例如0x6B38)。
若要使用"变量/函数名称" 、他们可以在 C 代码中的某个位置定义一个指针(例如、const void * scitdAddr =(const void *)(myLIN0_BASE + LIN_O_SCITD);)、然后使用 指针名称作为 目标地址(scitdAddr)。
此致、
德拉尼
您好 Delaney:
您能解释更多有关您的应用程序以及想要避免对 PULL FIFO 使用中断的原因吗?
当然、我来进一步解释一下我们的应用。 根据 PWM 协议、CLB 用于控制包含21个 LED 的 LED 条。 每个逻辑值对应于不同的占空比。 PWM 频率大约为800kHz。 如您所知、拉取 FIFO 具有4个字的深度、因此、由于 LED 消耗高达32位的数据来理解命令、因此我最多可以控制4个 LED。 调度程序中用于更新 LED 条的更新任务具有1ms 的周期性。
我们想知道是否有其他选项的原因是、如果我使用中断、它们需要与更重要的中断的其余部分实现很好的同步、这样在重新加载 CLB 时、它们永远不会触发。 这会在数据线中引起延迟、并且可能会达到 LED 发出新命令所需的最短复位时间。 此外、我们目前的 CPU 时间也很短。 我们想让这个管理之王留给另一个外设或另一个简单的外设来减轻 CPU 的负担。
您 在原帖中"扩展有效深度"是什么意思? 您是指从不同的外设扩展 FIFO 的有效深度吗?
说到有效的深度、我的意思是如果可以有任何方法将所有 LED 数据放入 FIFO 或类似文件中、这样 CLB 或其他外设就可以直接消耗这些数据、因此无需为 CLB 拉动 FIFO 充电。 理想情况下、DMA 是理想的备选器件、因为它会将数据从一个方向移动到另一个方向、从而有效地增加 FIFO 深度。
此致、
大卫