创龙科技
直播中

张云

7年用户 201经验值
私信 关注

提高emifa速度的driver.lib读取不到正确数据

[tr]驱动问题咨询


你好!
   在本月调试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的地址必须以偶数字节递增。
有没有办法以奇数字节递增。


[/tr]

回帖(2)

李建

2019-5-17 13:36:52
新的 drivers.lib 主要是改善 EMIF 性能~
你也可以使用之前 drivers.lib 但是把最新的 emifa.c 添加到你的工程~

举报

刘玉珍

2019-5-17 13:46:53
您说的意思是直接放到我工程中和其它的c文件平齐的位置吗?emifa.h也加进来吗?是放到include里面吗?

举报

更多回帖

发帖
×
20
完善资料,
赚取积分