TI论坛
直播中

李燕

7年用户 1541经验值
私信 关注
[问答]

求助,关于aic23bpw TDM模式下一些设置问题求解


  • 用的芯片是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.当然程序中设置哪里有问题望指教

回帖(1)

尚文清

2024-11-1 09:50:41
从您的描述来看,您正在使用aic23bpw芯片与DM642的Mcasp进行连接,并尝试使用查表法输出一个频率为1000Hz的正弦波。这里有几个关键点需要注意:

1. **理解aic23bpw的TDM模式**:TDM(Time Division Multiplexing)模式允许多个音频流在同一个物理通道上传输。在这种模式下,每个芯片可以作为主模式(提供时钟)或从模式(接受时钟)。您提到的“一个aic主模式供时钟,另两个从模式和mcasp一起接受时钟”是正确的理解。

2. **查表法输出正弦波**:您提到有一个包含48个Uint32格式数的正弦表。这意味着您需要从这个表中读取值并将其输出到音频设备。每个Uint32值代表一个样本,您需要按照正弦波的频率(1000Hz)来输出这些样本。

3. **设置aic23bpw**:您提到aic23b的设置没有改,这可能意味着您需要检查并确保aic23bpw的配置正确,包括采样率、位深等参数,以匹配您的音频输出需求。

4. **连接和引脚配置**:您提到xbuf连接的引脚大概是连接的上面2号aic,从模式的那个。确保引脚配置正确,并且与您的硬件连接相匹配。

5. **codecstate和示例程序**:您提到codecstate之前用一,以及奇想达示例程序注释错的似乎很多。这可能意味着您需要仔细检查示例程序的注释和代码,确保您理解每一部分的功能,并根据您的具体需求进行调整。

6. **调试和验证**:在实际运行程序之前,建议您进行逐步调试,验证每一步的输出是否符合预期。这包括检查正弦波的输出是否正确,以及TDM模式下的数据传输是否正常。

如果您有具体的代码片段或更详细的配置信息,我可以提供更具体的建议。希望这些信息能帮助您解决问题。
举报

更多回帖

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