- 用的芯片是aic23bpw,和DM642的Mcasp正常连接。
首先主程序是想用查表法输出一个频率为1000HZ的正弦波。
因为是由一个声音回放程序改过来的,有些乱。正弦表有48个Uint32格式的数。
aic23b的设置没改:
其实是其他两路,不知道是不是我搞错了,奇想达示例程序注释错的似乎很多。
一共三块aic23b和mcasp连接的。以上这段程序不太确定大概是一个aic主模式供时钟,另两个从模式和mcasp一起接受时钟。如果这地方理解有误望纠正= ̄ω ̄=
然后我们用来输出音频的xbuf连接的引脚,大概是连接的上面2号aic,从模式的那个。
codecstate之前用一个default配置过。
具体如下:
#define QXDDM642_AIC23_DEFAULTCONFIG {
0x0017, /* Set-Up Reg 0 Left line input channel volume control */
/* LRS 0 simultaneous left/right volume: disabled */
/* LIM 0 left line input mute: disabled */
/* XX 00 reserved */
/* LIV 10111 left line input volume: 0 dB */
0x0017, /* Set-Up Reg 1 Right line input channel volume control */
/* RLS 0 simultaneous right/left volume: disabled */
/* RIM 0 right line input mute: disabled */
/* XX 00 reserved */
/* RIV 10111 right line input volume: 0 dB */
0x01f9, /* Set-Up Reg 2 Left channel headphone volume control */
/* LRS 1 simultaneous left/right volume: enabled */
/* LZC 1 left channel zero-cross detect: enabled */
/* LHV 1111001 left headphone volume: 0 dB */
0x01f9, /* Set-Up Reg 3 Right channel headphone volume control */
/* RLS 1 simultaneous right/left volume: enabled */
/* RZC 1 right channel zero-cross detect: enabled */
/* RHV 1111001 right headphone volume: 0 dB */
0x0011, /* 0x0011 0x0015 Set-Up Reg 4 Analog audio path control */
/* X 0 reserved */
/* STA 00 sidetone attenuation: -6 dB */
/* STE 0 sidetone: disabled */
/* DAC 1 DAC: selected */
/* BYP 0 bypass: off */
/* INSEL 0 input select for ADC: line */
/* MICM 0 microphone mute: disabled */
/* MICB 1 microphone boost: enabled */
0x0000, /* Set-Up Reg 5 Digital audio path control */
/* XXXXX 00000 reserved */
/* DACM 0 DAC soft mute: disabled */
/* DEEMP 00 deemphasis control: disabled */
/* ADCHP 0 ADC high-pass filter: disabled */
0x0000, /* Set-Up Reg 6 Power down control */
/* X 0 reserved */
/* OFF 0 device power: on (i.e. not off) */
/* CLK 0 clock: on */
/* OSC 0 oscillator: on */
/* OUT 0 outputs: on */
/* DAC 0 DAC: on */
/* ADC 0 ADC: on */
/* MIC 0 microphone: on */
/* LINE 0 line input: on */
0x0053, /* Set-Up Reg 7 Digital audio interface format */
/* XX 00 reserved */
/* MS 1 master/slave mode: master */
/* LRSWAP 0 DAC left/right swap: disabled */
/* LRP 0 DAC lrp: MSB on 1st BCLK */
/* IWL 00 input bit length: 16 bit */
/* FOR 11 data format: DSP format */
0x0002, /* Set-Up Reg 8 Sample rate control */
/* X 0 reserved */
/* CLKOUT 1 clock output divider: 2 (MCLK/2) */
/* CLKIN 0 clock input divider: 1 (MCLK) */
/* SR,BOSR 00001 sampling rate: ADC 48 kHz DAC 48 kHz */
/* USB/N 0 clock mode select (USB/normal): USB */
0x0001 /* Set-Up Reg 9 Digital interface activation */
/* XX..X 00000000 reserved */
/* ACT 1 active */
}
这部分完全没动,Reg7的注释似乎又错了,LRP设的其实是1吧,为什么这么设定不太清楚。
其他的大概没错,48KHZ输入输出,16位数据。
然后mcasp经过部分改动,最后设定如下:
MCASP_ConfigGbl mcaspCfgDataGbl = {
0x00000000, /* PFUNC - All pins as McASP ,所有的管脚均为McAPS功能*/
0x00000055, /* PDIR - 0,2,4,6为output,1,3,5,7为XMT DATA input, 其它的为输入 */
0x00000000, /* DITCTL - DIT mode disable */
0x00000000, /* DLBCTL - Loopback disabled */
0x00000000 /* AMUTE - Never drive AMUTE */
};
MCASP_ConfigRcv mcaspCfgDataRcv = {
0xffffffff, /* RMASK - Use all 32 bits,左声道与右声道各16位 */
0x000180f8, /* RFMT - MSB first, 32-bit slots,0-pad,CPU bus, 1 bit delay,数据格式 */
0x00000100, /* AFSRCTL - 2-slot tdm, single bit frame sync, ext FS 帧同步的格式*/
0x00000080, /* ACLKRCTL - Sample on rising CLK, divide by 1, ext CLK */
0x00000000, /* AHCLKRCTL - External HCLK */
0x00000003, /* RTDM - Slots 0,1 are active */
0x00000000, /* RINTCTL - No interrupts */
0x00000000 /* RCLKCHK - Not used */
};
MCASP_ConfigXmt mcaspCfgDataXmt = {
0xffffffff, /* XMASK - Use all 32 bits */
0x000180f8, /* XFMT - MSB first, 32-bit slots, CPU bus, 1 bit delay */
0x00000100, /* AFSXCTL - 2-slot tdm, single bit frame sync, ext FS */
0x00000080, /* ACLKXCTL - Sample on falling CLK, divide by 1, ext CLK ,发送与接收同步*/
0x00000000, /* AHCLKXCTL - External HCLK */
0x00000003, /* XTDM - 0,1 enable*/
0x00000000, /* XINTCTL - No interrupts */
0x00000000 /* XCLKCHK - Not used */
};
MCASP_ConfigSrctl mcaspCfgDataSrctl = {
0x00000000, /* SRCTL0 - */
0x00000000, /* SRCTL1 - */
0x00000000, /* SRCTL2 - */
0x00000000, /* SRCTL3 - */
0x00000005, /* SRCTL4 - transmit, reserve */
0x00000000, /* SRCTL5 - */
0x00000000, /* SRCTL6 - */
0x00000000 /* SRCTL7 - */
};
PDIR没改,因为当初是那啥回放程序么,所以8个引脚都开了。
首先这样测试的结果,是放出了约为1300HZ左右不知道什么类型的波(或许是正弦),因为我们那边是软件测的,也许不准。是单通道的,用的分开的音箱。
而且音质感觉很奇怪,更奇怪的是把主程序输出音频之后那句codecdata[3]=MCASP_RGETH云云的接收语句加上(应该没实际作用吧,引脚都关了),声音会变尖,似乎还有失真。
然后我们试着在codecdata[3]=sinetable[n];之后加上
codecdata[3] = codecdata[3] | sinetable[n]<<16;结果确实输出了双声道,但是声音都是那种很尖而且有些失真的感觉,比1300HZ要高。
因为是完全的初学者,所以问题可能很傻,能帮忙回答一个两个也很谢谢了。
1. 首先是数据是16位双声道的情况下,是不是应该像这样把mcasp一个slot设成32位的?好像听有人说应该设成16位的。
2.AFSX/R 中2-slot tdm模式相当于一帧两个slot吧?那XTDM到底应该使能几个slot?我们这样两个可以吗?如果一个或是全部32个都使能会有什么影响呢?
3.因为我们之后还会使能输入音频的引脚,然后想实时计算。然而现在这样48KHZ似乎对dsp压力很大,我们试过在前面加上空循环(前面主程序注释掉的部分有),大概1000个循环左右就开始不发声音了...所以估计会降低采样频率,这是一方面,在Ti网站上看到http://software-dl.ti.com/dsps/dsps_public_sw/c6000/web/c62c64_fastrts/latest/index_FDS.html这个文件,请问这个是不是添加能让一些基础算法快一些?比如sin函数之类的。
0.当然程序中设置哪里有问题望指教
0
|
|
|
|