关于DSP通过EMIFA读取FPGA里的数据问题 - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3248|回复: 3
打印 上一主题 下一主题

关于DSP通过EMIFA读取FPGA里的数据问题

[复制链接]

7

主题

13

帖子

87

积分

注册会员

Rank: 2

积分
87
跳转到指定楼层
楼主
发表于 2016-7-9 17:40:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过FPGA采集AD7606的转化数据,放在两个缓冲区里,当其中一个缓冲区满后,就会有一个脚产生下降沿,输入到DSP,DSP进入BANK中断,里进行
数据读取。利用普通的方式存储数据是OK的,但是速度太慢,想要用FPGA读取数据,但是读出的数据并不正确,请问什么原因?

void FPGAIntIsr0(UArg arg)
{

#ifdef FPGA_EDMA3_Transport

                        AD7606_CHIP0_SELECTED; // 选中片0

                        char retVal;

                // 设置数据传输 源/目标 地址
                    srcBuff = (char *)(SOC_EMIFA_CS2_ADDR);
//                        srcBuff = (char *)(TX_buffer);
                    dstBuff = (char *)(emif_rbuffer);

                    // 初始化EDMA配置参数
                    Init_EDMA3();

                    // 缓存
//                    Cache_wbInv(&SOC_EMIFA_CS2_ADDR, MAX_BUFFER_SIZE, Cache_Type_ALLD, true);
                        // 使能DMA3传输
                        retVal = EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, chNum, EDMA3_TRIG_MODE_MANUAL);
                        // 缓存
                        Cache_wbInv(&emif_rbuffer, MAX_BUFFER_SIZE, Cache_Type_ALLD, true);
                        if (TRUE != retVal)
                        {
//                                UARTPuts ("edma3Test: EDMA3EnableTransfer Failed.\r\n", -1);
                        }


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2016-7-11 12:07:38 | 只看该作者
提高EMIFA的读写速度主要可以从三个方面来考虑:

1、对时序进行调节。根据外设时序调节建立(Setup)、触发(Strobe)、保持(Hold)的周期

2、使能DSP的缓存。使能缓存后CPU对EMIFA的读写速度会大大提高

3、使用EDMA来访问EMIFA。(可参考EMIFA_FPGA_DMA)

回复 支持 反对

使用道具 举报

7

主题

13

帖子

87

积分

注册会员

Rank: 2

积分
87
板凳
 楼主| 发表于 2016-7-11 14:41:32 | 只看该作者
Lewis 发表于 2016-7-11 12:07
提高EMIFA的读写速度主要可以从三个方面来考虑:

1、对时序进行调节。根据外设时序调节建立(Setup)、触发( ...

我是在SYS/BIOS操作系统下进行的,是不是需要注意存放数据不能放到DDR里。
我看了EDMA3的SYS/BIOS工程:
// 按照计算的次数使能传输
retVal = EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, chNum, EDMA3_TRIG_MODE_MANUAL);
// 缓存
Cache_wbInv(&_dstBuff, MAX_BUFFER_SIZE, Cache_Type_ALLD, true);

开缓存,何时需要释放,需要注意缓存一致性的问题吗?
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
地板
发表于 2016-7-20 12:04:12 | 只看该作者
EMIFA发送数据前,需要对EMDA3的源地址区域缓存写回,而EMIFA接受数据时,需要对EDMA3的目的地址失效缓存。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 21:56 , Processed in 0.036062 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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