This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

aic3106芯片与emif ADC采集之间的冲突问题

   之前用AD8568采集外部模拟声音信号,然后在DSP里处理,现在想把处理后的声音数字信号通过MCASP外接音频芯片AIC3106播放出来听。但是发现在原来代码上加入以下代码后,调试器显示采集的信号变成了全0了;于是我对下面4行代码一行行的加入到原有代码中去,加前两行都没事,和原来一样采集到幅值不同的信号,但是加入第三行InitAIC31I2S()的时候采集到的信号就是全0了,或者说没有采集到信号(全局变量初始值就是0);请问在初始化 AIC31 音频芯片的时候会和EMIF或者AD8568冲突吗,怎么解决。
// I2C 模块引脚配置
    I2CPinMuxSetup(0);
    // McASP 引脚配置
    McASPPinMuxSetup();

    // 初始化 AIC31 音频芯片
    InitAIC31I2S();
    // 初始化 McASP 为查询方式
    InitMcaspPoll();
  • 请问用的是哪款DSP? 看一下数据手册里EMIF管脚, McASP管脚的复用情况。
  • 用的是TMSC6748
  • EMIF和McASP管脚没有复用,应该不会影响。或者您可以先初始化mcasp,再去初始化AD8568看能否采集。
  • 先初始化ADC模块,调试器显示刚开始采集到数值不等的采样值,但是一直就是同样的值,不会改变。
  • PSCInit();

    // DSP 中断初始化
    InterruptInit();

    //初始化LCD
    LcdInit();

    // 触摸屏初始化
    TouchInit();

    // AD8568 初始化 采样率510K
    AD8568Init(800); //// 先初始化ADC再只加上124条语句,会采集到初始值但是不会变,若是后初始ADC则采集到的全为0

    I2CPinMuxSetup(0);

    //McASP 引脚配置
    McASPPinMuxSetup();


    // 初始化 AIC31 音频芯片
    InitAIC31I2S();

    // 初始化 McASP 为查询方式
    //InitMcaspPoll();
  • AIC31 音频芯片的初始化里面的每条语句都会导致采集不到数据,而初始化 McASP 为中断方式这条语句中只有一条语句导致采集不到数据。不知道该怎么该。而且当把AD8568的初始化放到他们前面去以后,可以采集到数据,但是数据不会变(只能采一次数据,然后就采集不到了)。
    另外怎样看音频芯片和AD8568芯片有没有管教复用。


    I2CPinMuxSetup(0);

    //McASP 引脚配置
    McASPPinMuxSetup();

    // 初始化 AIC31 音频芯片 //1,2,3
    //InitAIC31I2S();

    // 初始化 McASP 为中断方式
    InitMcaspIntr();



    void InitMcaspIntr(void)
    {
    // 初始化 McASP 为 I2S 模式
    McASPI2SConfigure(MCASP_TX_MODE, WORD_SIZE, SLOT_SIZE, I2S_SLOTS, MCASP_MODE_NON_DMA);

    // 使能发送中断
    McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DATAREADY);

    // 设置 McASP 发送中断
    McASPIntSetup(C674X_MASK_INT6, McASPIsr);

    // 启动 McASP 发送
    I2SDataTxRxActivate(MCASP_TX_MODE); //加上这一句就采集不了,下面展开这个函数
    }


    void I2SDataTxRxActivate(unsigned char transmitMode)
    {
    if(transmitMode & MCASP_TX_MODE)
    {
    // 启动使用外部时钟
    McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_EXTERNAL);

    // 启动串行器
    McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);

    // 使能状态机
    McASPTxEnable(SOC_MCASP_0_CTRL_REGS); //当注释掉这一句就可以采集到数据


    // 发送数据0
    McASPTxBufWrite(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX, 0);
    }
    }
  • 会不会和中断号有关。MCASP我换成了中断的工作方式。AD8568Init(Fs)初始化函数里面用到了 TimerInterruptInit(), 使用的是C674X_MASK_INT5。InitMcaspIntr()里面有一条语句是McASPIntSetup(C674X_MASK_INT6, McASPIsr); I2C初始化里面也用到了中断5
    // 初始化 I2C 接口地址为 AIC31 的地址
    I2CSetup(SOC_I2C_0_REGS, I2C_SLAVE_CODEC_AIC31);
    I2CIntRegister(C674X_MASK_INT5, SYS_INT_I2C0_INT);
    会因为中断号冲突而产生AD8568采样不了吗