XMC4200 DAC 问题

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

我正在尝试将 XMC4200 的 DAC 与 DMA 一起使用,但是 DMA 控制器没有传输数据。
DAC 通道 0 配置为数据模式,具有内部触发器,频率为 24kHz。 设置了 “服务请求”、“运行” 和 “模拟启用” 位。

DMA 线路路由器 (DLR) 配置为线路 1,RS1 = 5,即 DAC.SR0。 设置了 LN1 后,线路 1 已启用。

DMA 通道 1 配置的目标地址寄存器设置为 0x48018014,这是 DAC 输入寄存器。 如果使用 DLR 第 1 行,CFGH.DEST_PER 设置为 1,CFGL.HS_SEL_DST 设置为 0 以选择硬件握手。
在设置 DMACFGREG.DMA_EN 后启用 DMA。

据我所知,所有配置都正确,但它不起作用!
该应用程序是修改后的版本,它使用DMA将数据发送到USIC,并且可以正常运行。

有人知道问题可能出在哪里吗?

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/td-p/670979

0 点赞
15 回复数
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

@amanning

由于 USIC-DMA 代码示例在您这边起作用,因此我们必须验证修改后的代码,如果可能的话,请共享相同的代码。

请再次查看SPI_DMA - XMC4200和自述文件的示例代码,这些代码与 ModusToolbox™中的配置和设置相关。

请允许我知道您的应用程序中 DMA 的触发源是什么。

谢谢

Sateesh M

 

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/672576

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

我附上了一个包含一些代码片段的文本文件,显示了我的 DAC 和 DMA 的初始化代码。

DMA 触发器应为 DAC FIFO 空服务请求。 如果我正确理解硬件,它应该按如下方式工作:
-将 DAC 设置为内部触发模式,频率为 24kHz
-DMA 向 DAC 输入 FIFO 填充数据
-DAC 接收输入数据直到 FIFO 为空
-空 FIFO 触发服务请求 0
-DMA 通过 DLR 触发下一次传输
-这种情况一直持续到 DMA 传输所有数据为止-DMA 设置其服务请求

我不确定启动序列的正确顺序是什么。 我尝试了不同的序列,但还没有任何效果。 看来如果在数据进入FIFO之前启用了DAC触发器,它将立即清除运行位。 因此,现在在启用 DAC 之前,我先启动 DMA 以填充 DAC 的输入 FIFO。 任何文件中描述的顺序是否正确?

我看到的是第一个字节已传输,但其余的字节不会继续 DMA。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/673127

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

在 XMC4200 勘误表中我刚刚看到了这个:


DAC_CM.003 “数据处理模式”中的FIFO使用限制
参考手册在 DAC 章节的第 X.2.1.2 节中描述了
FIFO“......引入以允许更长的请求延迟...”。
“数据处理模式”是FIFO使用时唯一 TLE9243QK_BASE_BOARD 操作模式。
在此模式下,仅在 DAC 触发后 FIFO
进入空状态时才会发出服务请求。
实际上,服务请求会在每次DAC触发后发生。 此外,某些
服务请求可能会延迟。 由于这种不当行为,无法实现可靠的充值
机制。
影响
来自 DAC FIFO 的意外延迟和多余服务请求
禁止在中断服务上实现有用的重新填充机制TLE9243QK_BASE_BOARD
例程或 GPDMA 服务。
解决方法
无。

这是它不起作用的原因吗?

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/673815

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

@amanning

请仔细阅读随附的 DAC 应用说明,您将了解 DAC 的工作原理。 此外,您在共享代码示例中提到的前面问题也得到了澄清。

请使用此代码示例,它将包含所有必要的代码流和有关初始化的信息,要使用此代码示例,您必须 ModusToolbox™ IDE 中安装。

看起来代码配置是正确的,请与随附的代码示例进行比较来检查 DMA 的初始化顺序。

 

谢谢

Sateesh M

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/675108

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@amanning 写道:

我正在尝试将 XMC4200 的 DAC 与 DMA 一起使用,但是 DMA 控制器没有传输数据。
DAC 通道 0 配置为数据模式,具有内部触发器,频率为 24kHz。 设置了 “服务请求”、“运行” 和 “模拟启用” 位。

DMA 线路路由器 (DLR) 配置为线路 1,RS1 = 5,即 DAC.SR0。 设置了 LN1 后,线路 1 已启用。

DMA 通道 1 配置的目标地址寄存器设置为 0x48018014,这是 DAC 输入寄存器。 如果使用 DLR 第 1 行,CFGH.DEST_PER 设置为 1,CFGL.HS_SEL_DST 设置为 0 以选择硬件握手。
在设置 DMACFGREG.DMA_EN 后启用 DMA。

据我所知,所有配置都正确,但它不起作用!
该应用程序是修改后的版本,它使用DMA将数据发送到USIC,并且可以正常运行。

有人知道问题可能出在哪里吗?


我经常遇到数据完整性问题。 尽管根据数据表和参考手册配置了SPI设置,但接收到的数据似乎包含错误或不一致之处。 我已经验证了硬件连接,交叉检查了时钟和数据配置,甚至调整了时序参数,但失败了。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/676004

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

大家好

请查看随附的使用 DMA 的 DAC 代码示例。

随附的代码从 DMA_PWM 修改为 DMA_DAC。

随附的代码将在没有任何中断的情况下使用 DMA 传输生成斜坡/三角形电压,并且是为单通道创建的。

代码流就像:

1) 来自 main-> cybsp_init ();-> init_cycfg_all ();-> cycfg_config_init ();-> init_cycfg_dmas ();-init_cycfg_dmas ();

2) 在这个 DMA_CH0_Config 配置中,根据要求进行了修改,根据您的请求为 DAC (#define pwm_0_ sr0_0_trigger_IN 5) 设置了触发源 pwm_0_sr0_0_trigger_IN 5) 的触发源 pwm_0_trigger_IN 定义

3) 外设初始化后,返回主界面

1) DAC GPIO & DAC 外设初始化

2) 启用 DMA

结果将 TESTBOARD_150PC_OUT 在XMC4200 COOLDIM_PRG_BOARD - MICROBUS引脚AN/P14.5上。

DAC Output.jpg

请查看并提供您的反馈,如有任何详细信息,请告诉我。

 

谢谢

Sateesh M

 

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/680874

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

谢谢你的例子。 我还没有安装 ModusToolbox™ ,所以我无法直接测试您的示例。

但是从源代码和配置文件来看,似乎这个项目是为 XMC4500 Relax KIT_A2G_TC387_MOTORCTR TDA5235_915_5_BOARD配置的,带有 XMC4500-F100x1024 控制器。

如果你的输出来自这个控制器,我相信它能正常工作,但是同样的代码适用于 XMC4200 控制器吗? 据我所见,DMA 和 DAC 的配置与我的示例相同,但是 DAC 不会触发下一次 DMA 传输。

据我所知,DAC ch0 输出位于引脚 P14.8 上,而不是上面提到的 P14.5 上。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/685710

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

我已经安装了 ModulToolBox,并尝试使用您的示例,但无法正常工作。

从配置文件来看,该示例似乎已配置为在 XMC4500 Relax KIT_A2G_TC387_MOTORCTR上运行,因此我也从此配置开始。

示例的构建和下载都正确无误,但没有 DAC 输出。 当我看到代码时,我无法理解它是如何工作的!

在 main.c 中,*LLP 变量被设置为&dma_ll[0]。 这似乎是正确的,但在 cycfg_dmas.c 中,变量 LLP 用于配置 DMA 通道 0。该通道不能连接到 DAC SR0。 需要使用 DMA 通道 1,但通道 1 是为 CCU4 SR 配置的,目标指针也是 CCU4 寄存器。

能否请您检查一下您的示例(也许可以稍微清理一下,因为所有内容都是针对 PWM 的)。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/689774

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager
  1. 验证 DMA 设置:仔细检查 DMA 配置,确保其符合修改后的 in shot 应用程序下载要求。
  2. 调试 USIC 通信:检查 DMA 和 USIC 之间的交互作用,查找数据传输中的任何差异或问题。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/685321

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@amanning

请在您的工作机器上安装 MTB,如果可能,请检查代码,从英飞凌开始,我们将在所有平台设备上支持 MTB。

从共享代码中我了解到,DAC 初始化顺序没有得到正确遵守。

根据示例代码的实际序列如下所示:

xmc_DMA_Init (XMC_DMA0);xmc_DMA_CH_INIT(DMA_CH0_HW,DMA_CH0_NUM,& dma_CH0_Config);xmc_DMA_CH0_enableEvent(DMA_CH0_HW、DMA_CH0_NUM、
DMA_CH0_EVENTS);xmc_DMA_CH0_Events MA_CH_setEventHandler(DMA_CH0_HW,DMA_CH0_NUM,NULL);

根据您的共享代码,dma_ch0_config 在初始化后已完成,请重新检查并相应地修改代码。

希望这能解决您的问题,仍然存在问题,请告诉我,我们可以随时 MULTICH_CONNECT_PCB 并讨论。

谢谢 & 最诚挚的问候

Sateesh M

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/685888

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

对不起,我不明白你想告诉我什么!

您说" DMA_CH0_config在初始化" 之后完成。但我的代码中没有"DMA_CH0_config" 。

在我的代码中,我首先通过"XMC_DMA_Init()" 对 DMA 进行初始化,然后通过"XMC_DMA_CH_Init()" 对通道进行初始化,这与您的示例代码相同。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/689765

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 @amanning 

我为 XMC4200 创建了使用 DMA 的 DAC 示例代码,所附代码示例将使用 DMA 在 P14.8 引脚生成 DAC 输出。

在本代码示例中,我配置了两个 DMA 通道 0& 1 用于向 DAC 传输数据& 使用通道 0 与 DAC 一起工作,您也可以使用 DMA 通道 1 进行相同的应用。

谢谢

Sateesh M

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/690110

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

我试过这个新版本,但它对我不起作用。 我只看到 DAC 输出跃升至 1.77V。

我对正确的区块大小有些困惑。 数值表的长度为 72 个字,因此我认为数据块的大小也应为 72。 在链表中,该值被设置为 72,但在 cycfg_dmas.c 配置和重载中,该值被设置为 1。 我试着把它改为 72,但没有用。

我不明白的是,为什么程序运行时 GPDMA0_CH0::CTLH::BLOCK_TS 会变为 32。

据我所知,所有配置都正确无误,但 DMA 就是无法将数据传输到 DAC。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/690478

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@amanning

请共享范围输出轨迹。 我会安排会面。

 

谢谢

Sateesh M

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/690627

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

范围输出结果附后。 这并不有趣。 程序启动时,输出刚从高阻抗变为 1.77V 的输出值。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC4200-DAC-problem/m-p/690811

0 点赞