用的芯片是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.当然程序中设置哪里有问题望指教
user151383853:
看看官方的数据手册和参考一下TLV320AIC23 评估模块 (EVM) 的资料.
http://www.ti.com.cn/tool/cn/tlv320aic23evm2