谁有PC与6657之间DMA通信的示例代码? - TMS320C665x - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6417|回复: 9

[已解决] 谁有PC与6657之间DMA通信的示例代码?

[复制链接]

2

主题

7

帖子

46

积分

新手上路

Rank: 1

积分
46
发表于 2016-6-22 17:17:00 | 显示全部楼层 |阅读模式
买了一块创龙的6657开发板,6657作为EP端,我想在PC端的驱动添加DMA操作的代码,我直接复制DMA操作在LED程序加载之后,
发现驱动模块加载一只停留在HAL_writeDMA 接口

请问一下各位高手
1.  我这样操作DMA是不是有什么问题
2.  有没有Tronlong板子DMA操作的示例代码可以给我看看,因为这部分代码原来的demo里面只是给667X实现的




程序修改如下:

#if GPIO_LED
        /* Load "GPIO_LED or UART0_POLL" demo into DSP */
        pushData(bootCode, 0, &bootEntryAddr);

        /* Write boot entry address into MAGIC_ADDR */
        writeDSPMemory(0, MAGIC_ADDR, &bootEntryAddr, 4);
#endif

        /*********************************/
        /******* DMA Testing ****************/
        printk("Allocating consistent memory ...\n");
        wDataVirt = (uint8_t*)dma_alloc_coherent(&PCIE_DEV->dev, DMA_TRANSFER_SIZE, &wData, GFP_KERNEL);
        rDataVirt = (uint8_t*)dma_alloc_coherent(&PCIE_DEV->dev, DMA_TRANSFER_SIZE, &rData, GFP_KERNEL);

        for (i = 0; i < DMA_TRANSFER_SIZE; i++) {
            wDataVirt[i] = i;
            rDataVirt[i] = 0;
        }

        /* Wait 2 second for DDR init */
        mdelay(2000);

        printk ("Write DMA to DSP ...\n");
        do_gettimeofday(&test_time1);
        HAL_writeDMA (wData, DDR_START, DMA_TRANSFER_SIZE, 1);   /* Move from GPP to DSP */
        do_gettimeofday(&test_time2);

        mdelay(1000);

        printk("Read DMA from DSP ...\n");
        do_gettimeofday(&test_time3);
        HAL_readDMA(DDR_START, rData, DMA_TRANSFER_SIZE, 1);     /* Move from DSP to GPP */
        do_gettimeofday(&test_time4);
        
        mdelay(1000);

        /* For demo how to move inside DSP purpose only, you can directly move between GPP and DSP using flag = 1 */
        //    HAL_writeDMA (0x80000000, 0x11800000, 0x10000, 0);        
        //    HAL_writeDMA (0x11800000, 0x0C000000, 0x10000, 0);

        diff = (test_time2.tv_sec - test_time1.tv_sec)*1000000 + (test_time2.tv_usec - test_time1.tv_usec);
        printk("DMA write throughput is: %d.%02d MB/s\n", DMA_TRANSFER_SIZE/(1024*1024)*1000*1000/diff,
                ((DMA_TRANSFER_SIZE/(1024*1024)*1000*1000)%diff)*100/diff);

        diff = (test_time4.tv_sec - test_time3.tv_sec)*1000000 + (test_time4.tv_usec - test_time3.tv_usec);
        printk("DMA read throughput is: %d.%02d MB/s\n", DMA_TRANSFER_SIZE/(1024*1024)*1000*1000/diff,
                ((DMA_TRANSFER_SIZE/(1024*1024)*1000*1000)%diff)*100/diff);

        printk("Freeing consistent memory ...\n");
        dma_free_coherent(&PCIE_DEV->dev, DMA_TRANSFER_SIZE, wDataVirt, wData);
        dma_free_coherent(&PCIE_DEV->dev, DMA_TRANSFER_SIZE, rDataVirt, rData);

回复

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
发表于 2016-6-24 22:14:09 | 显示全部楼层
这是pc端linux dma 使用跟dsp关系不大 c6678 简单修改就能在c6657使用
回复 支持 反对

使用道具 举报

2

主题

7

帖子

46

积分

新手上路

Rank: 1

积分
46
 楼主| 发表于 2016-6-26 10:00:56 | 显示全部楼层
希望缄默 发表于 2016-6-24 22:14
这是pc端linux dma 使用跟dsp关系不大 c6678 简单修改就能在c6657使用

能告诉一下该如何修改吗,目前我直接把6678的HAL_readDMA 和 HAL_writeDMA 拿过来用, 会一直停留在接口的while循环部分,那部分代码是用来判断DMA操作是否完成。
刚接触6657的DSP,还不知道如何修改,希望高手能指点一下。

点评

[attachimg]880[/attachimg] 改 0x02740000  详情 回复 发表于 2016-6-27 09:27
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
发表于 2016-6-27 09:27:09 | 显示全部楼层
wangyf 发表于 2016-6-26 10:00
能告诉一下该如何修改吗,目前我直接把6678的HAL_readDMA 和 HAL_writeDMA 拿过来用, 会一直停留在接口 ...




0x02740000

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

2

主题

7

帖子

46

积分

新手上路

Rank: 1

积分
46
 楼主| 发表于 2016-6-27 16:35:10 | 显示全部楼层

你好,
请问是该 0x02704000   PARAM_0_OPT 吗?
我把它改成了  myIowrite32(0x00100008, pReg + PARAM_0_OPT/4);
按照文档《Enhanced Direct Memory Access (EDMA3) Controller User Guide》,这是block move example里面的值。
目前测试也是不成功的。请问我这样设置正确吗?
回复 支持 反对

使用道具 举报

2

主题

7

帖子

46

积分

新手上路

Rank: 1

积分
46
 楼主| 发表于 2016-6-27 16:37:07 | 显示全部楼层

你好,
是不是 4XXX 这些寄存器的值都要改一下?

点评

嗯 因为这个实际上是通过 PCIe 链路配置 DSP EDMA3 寄存器 而 C6678 与 C6657 EDM3 差异大一些 有些宏要对照数据手册改  详情 回复 发表于 2016-6-28 09:10
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
发表于 2016-6-28 09:10:07 | 显示全部楼层
wangyf 发表于 2016-6-27 16:37
你好,
是不是 4XXX 这些寄存器的值都要改一下?

嗯 因为这个实际上是通过 PCIe 链路配置 DSP EDMA3 寄存器
而 C6678 与 C6657 EDM3 差异大一些 有些宏要对照数据手册改
回复 支持 反对

使用道具 举报

2

主题

7

帖子

46

积分

新手上路

Rank: 1

积分
46
 楼主| 发表于 2016-6-30 10:16:18 | 显示全部楼层
希望缄默 发表于 2016-6-28 09:10
嗯 因为这个实际上是通过 PCIe 链路配置 DSP EDMA3 寄存器
而 C6678 与 C6657 EDM3 差异大一些 有些宏要 ...

谢谢 能够工作了
回复 支持 反对

使用道具 举报

0

主题

2

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2018-1-6 21:44:01 | 显示全部楼层
请问你是怎么解决C6657在PC上被识别的呢?根据官方的文档并不能使C6657的板卡被PC识别
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-3-28 22:59 , Processed in 0.043244 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表