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