关于提高emifa速度的driver.lib影响mcasp - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4230|回复: 2
打印 上一主题 下一主题

关于提高emifa速度的driver.lib影响mcasp

[复制链接]

34

主题

54

帖子

1307

积分

金牌会员

Rank: 6Rank: 6

积分
1307
跳转到指定楼层
楼主
发表于 2014-11-27 10:14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
驱动问题咨询


你好!
   在本月调试tms320c6748的emifa速率时,贵公司提供了一个新的静态库drivers.lib,同时附带有文件emifa.c。
   在使用了新的drivers.lib后,使用memcpy()方式读取与emifa相连的外部fifo,使用cs2,速度能达到5M字节每秒。emifa的时钟给的是114M。
  不过在调试的过程中产生了这样一个问题:
  1. 使用以前的drivers.lib,使用edma方式从mcasp读取数据,能够读取到正确的数据。因为要读取的音频数据是24位的,所以edma的param设置如下:

static struct EDMA3CCPaRAMEntry const rxDefaultPar =
       {
           (unsigned int)(EDMA3CC_OPT_SAM  | (0x02 << 8u)), /* Opt field */
           (unsigned int)SOC_MCASP_0_DATA_REGS, /* source address */
           (unsigned short)(4), /* aCnt */
           (unsigned short)(336), /* bCnt */
           (unsigned int)rxBuf0, /* dest address */
           (short) (0), /* source bIdx */
           (short)(3), /* dest bIdx */ //lzh 1009
           (unsigned short)(PAR_RX_START * SIZE_PARAMSET), /* link address */
           (unsigned short)(0), /* bCnt reload value */
           (short)(0), /* source cIdx */
           (short)(0), /* dest cIdx */
           (unsigned short)1 /* cCnt */
       };
    上面的aCnt设置成3也能够采集到正确的音频数据。

    2. 使用最新的drivers.lib,使用edma方式从mcasp读取数据,读取不到正确数据。edma的param设置如上。
   
    3. 不管使用旧的drivers.lib还是新的,使用edma方式从mcasp读取数据,如果音频数据是16位,则能够读取到正确的数据。edma的param设置如下:
static struct EDMA3CCPaRAMEntry const rxDefaultPar =
       {
           (unsigned int)(EDMA3CC_OPT_SAM  | (0x02 << 8u)), /* Opt field */
           (unsigned int)SOC_MCASP_0_DATA_REGS, /* source address */
           (unsigned short)(4), /* aCnt */        
           (unsigned short)(504), /* bCnt */
           (unsigned int)rxBuf0, /* dest address */
           (short) (0), /* source bIdx */
           (short)(2), /* dest bIdx */ //lzh 1009
           (unsigned short)(PAR_RX_START * SIZE_PARAMSET), /* link address */
           (unsigned short)(0), /* bCnt reload value */
           (short)(0), /* source cIdx */
           (short)(0), /* dest cIdx */
           (unsigned short)1 /* cCnt */
       };
    上面的aCnt设置成2也能够采集到正确的音频数据。
emifa的设置如下:

    SYSCFG0Regs.PINMUX6.bit.PINMUX6_3_0 = 0x1;
    SYSCFG0Regs.PINMUX7.bit.PINMUX7_27_24 = 0x1;
    SYSCFG0Regs.PINMUX7.bit.PINMUX7_23_20 = 0x1;
    SYSCFG0Regs.PINMUX7.bit.PINMUX7_19_16 = 0x1;
    SYSCFG0Regs.PINMUX7.bit.PINMUX7_3_0 = 0x1;
    SYSCFG0Regs.PINMUX8.all = 0x11111111;
    SYSCFG0Regs.PINMUX9.all = 0x11111111;

    /*配置数据总线16bit*/
    EMIFAAsyncDevDataBusWidthSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_2,
                                    EMIFA_DATA_BUSWITTH_16BIT);

    /*选着Normal模式*/
    EMIFAAsyncDevOpModeSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_2,
                               EMIFA_ASYNC_INTERFACE_NORMAL_MODE);

    /*禁止WAIT引脚*/
    EMIFAExtendedWaitConfig(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_2,
                             EMIFA_EXTENDED_WAIT_DISABLE);

    /*配置W_SETUP/R_SETUP   W_STROBE/R_STROBE    W_HOLD/R_HOLD    TA等参数*/
    EMIFAWaitTimingConfig(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_2,
                           EMIFA_ASYNC_WAITTIME_CONFIG(1, 2, 1, 1, 2, 1, 0 ));


现在就想咨询一下这个新的drivers.lib和旧的有什么区别,对edma有什么影响。是不是用这个新的drivers.lib的话edma的地址必须以偶数字节递增。
有没有办法以奇数字节递增。

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

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
沙发
发表于 2014-11-27 10:38:52 | 只看该作者
新的 drivers.lib 主要是改善 EMIF 性能~
你也可以使用之前 drivers.lib 但是把最新的 emifa.c 添加到你的工程~
回复 支持 反对

使用道具 举报

34

主题

54

帖子

1307

积分

金牌会员

Rank: 6Rank: 6

积分
1307
板凳
 楼主| 发表于 2014-11-27 11:27:40 | 只看该作者
您说的意思是直接放到我工程中和其它的c文件平齐的位置吗?emifa.h也加进来吗?是放到include里面吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 07:18 , Processed in 0.036099 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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