关于T2G_SDL_TV i ibe1m的mdma的mem to mem 例子问题

公告

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

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

cross mob
lock attach
Attachments are accessible only for community members.
barbarian
Level 2
Level 2
5 questions asked 5 replies posted 10 sign-ins

用的是CYTVII-B-E-1M-SK 板子,学习SDL下面TViibe1m的dma操作下mdma案例,发现结果是显示erro,而不是例子里面的结果。

 

操作步骤如下:

1. 开发板和电脑连接,打开IAR软件

2. project\options\Debugger\Driver\CMSIS DAP

3. project\rebuild all\此时没有任何错误

4.download and debug\无论是否运行go。最终watch1 里面au8DestBuffer0 以及 auDesBuffer1 的value都是Error。

另外,这个例子代码1处填充内存的数组数据 ,2 处触发,但好像不需要我们做什么吧? 3 是死循环1空语句(为死循环,有何用?)

0 点赞
1 解答
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

你好,

运行sample code,查看此buffer是正确的

JimmyLiu_0-1675822556027.png

您watch的变量是不对的,并没有定义au8DestBuffer0 和au8DestBuffer1,只有au8DestBuffer。

在原帖中查看解决方案

0 点赞
7 回复数
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

你好,

运行sample code,查看此buffer是正确的

JimmyLiu_0-1675822556027.png

您watch的变量是不对的,并没有定义au8DestBuffer0 和au8DestBuffer1,只有au8DestBuffer。

0 点赞
barbarian
Level 2
Level 2
5 questions asked 5 replies posted 10 sign-ins

1. 这个操作是需要cytvii的开发板吧,这样看到的buffler之间的传输就是内存之间的数据了?

2. 如果把debugger改成simulator,是不是就不需要开发半,这样看到的buffler数据就是模拟量了

3. watch 变量的设置,我在Keil里面是选中变量buffler,然后右键添加到watch 窗口,在IAR里面也是一样吗?

0 点赞
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

你好,

1. 需要开发板,DMA是芯片内部的功能模块,DMA传输就是把源地址数据传送给目标地址,您可以看au8SrcBuffer和au8DestBuffer的数据变化

2. 这个我不明白您的意思,如果只是buffer之间的赋值,并不能说明内存数据的改变,所以开发板还是需要的

3. IAR里面右键点击变量,选择add to watch就可以查看了,用法和keil一样的

0 点赞
barbarian
Level 2
Level 2
5 questions asked 5 replies posted 10 sign-ins

1. 看样子是对IAR 的适用软件不熟悉。

2. 在编译完代码并且download and debug 后,选中变量声明au8SrcBuffer[BUFFER_SIZE]右键Add to Watch之后,需要在Watch窗口把[Buffer_SIZE]删除,然后才可以看到?同理au8DestBuffer[BUFFER_SIZE]?

3. 另外,想看*p_src以及i变量也一样吗?

0 点赞
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

你好,

选择变量名就可以,不需要完整的定义,IAR会自己展开数组大小或者结构体内容。

您可以自己尝试一下,然后就熟悉了。

0 点赞
barbarian
Level 2
Level 2
5 questions asked 5 replies posted 10 sign-ins

你好,

1. 我在static  cy_stc_mdma_descr_config_t stcDmaDescrConfig的结构体配置里面直接找到了源地址和目的地地址: .srcAddr = au8SrcBuffer, .destAddr= au8DestBuffer. 这里面加到watch 窗口便可。

2. 宏定义Cy_MDMA_Enable(DMAC)的DMAC的芯片寄存器里面看到DMAC的寄存器基地址为0X402A0000.

3. 在watch 窗口的变量的au8SrcBuffer的基地址0x8000E10,以及这个内存的数值是怎么来的?同理目的内存的地址是怎么来的?

4. 另外,代码里面的for 死循环有啥作用吗?

5. 以及那个Trigger Mux的代码作用?

0 点赞
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

你好,

au8SrcBuffer这些是变量,地址在SRAM中,您可以查看cyt2b75cae.h找到memory相关的地址和大小。for循环没啥作用,你也可以用while(1),您也可以在里面添加您想要执行的代码,DMA是通过中断触发的,不受此循环影响。trigger这里用来触发DMA的,详细应用可以参考https://www.infineon.com/dgdl/Infineon-AN228104_How_to_Use_Trigger_Multiplexer_in_Traveo_II_Family-A...

另外有关TraveoII的文档您可以在官网查看

https://www.infineon.com/cms/en/product/microcontroller/32-bit-traveo-t2g-arm-cortex-microcontroller... 

0 点赞