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