打印

DSP6713的关于TLV320AIC23B的IIC配置

[复制链接]
4594|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tiger2010|  楼主 | 2010-2-8 13:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位仁兄,本人最近用SEED公司的DSP6713的I2C0控制TLV320AIC23B的寄存器时,程序调试总出现问题,现贴出来,做过这方面的仁兄请指导一下:
    #include <csl.h>
#include <csl_i2c.h>
#include <csl_irq.h>
#include "DEC6713.h"
#include "aic23.h"
#include <stdio.h>
/********************************************************************************/
/* Set I2C registers. */
        I2C_Config MyI2CCfgT = {
                I2C_FMKS(I2COAR,A,OF(0x00)),        //Not used if master.
               
                I2C_FMKS(I2CIMR,ICXRDY,MSK)        |
                I2C_FMKS(I2CIMR,ICRRDY,MSK)        |
                I2C_FMKS(I2CIMR,ARDY,MSK)        |
                I2C_FMKS(I2CIMR,NACK,MSK)        |
                I2C_FMKS(I2CIMR,AL,MSK),
               
                /* Master clock frequency is 200kHz(SYSCLK2 is 150MHz). */
                I2C_FMKS(I2CCLKL,ICCL,OF(14)),
                I2C_FMKS(I2CCLKH,ICCH,OF(14)),
               
                I2C_FMKS(I2CCNT,ICDC,OF(20)),
               
                I2C_FMKS(I2CSAR,A,OF(26)),
               
                I2C_FMKS(I2CMDR,FREE,RFREE)                |
            I2C_FMKS(I2CMDR,STT,START)      |
                I2C_FMKS(I2CMDR,MST,MASTER)                |
                I2C_FMKS(I2CMDR,TRX,XMT)                |
                I2C_FMKS(I2CMDR,RM,REPEAD)                |
                I2C_FMKS(I2CMDR,IRS,NRST)                |
                I2C_FMKS(I2CMDR,FDF,NONE)                |
                I2C_FMKS(I2CMDR,BC,BIT8FDF)                |
                I2C_FMKS(I2CMDR,STB,NONE),  
               
                I2C_FMKS(I2CPSC,IPSC,OF(15-1))               
        };
        
        I2C_Config MyI2CCfgR = {
                I2C_FMKS(I2COAR,A,OF(0x00)),
               
                I2C_FMKS(I2CIMR,ICXRDY,MSK)        |
                I2C_FMKS(I2CIMR,ICRRDY,MSK)        |
                I2C_FMKS(I2CIMR,ARDY,MSK)        |
                I2C_FMKS(I2CIMR,NACK,MSK)        |
                I2C_FMKS(I2CIMR,AL,MSK),
               
                /* Master clock frequency is 200kHz(SYSCLK2 is 150MHz). */
                I2C_FMKS(I2CCLKL,ICCL,OF(19)),
                I2C_FMKS(I2CCLKH,ICCH,OF(19)),
               
                I2C_FMKS(I2CCNT,ICDC,OF(1)),
               
                I2C_FMKS(I2CSAR,A,OF(0)),
               
                I2C_FMKS(I2CMDR,FREE,RFREE)                |
                I2C_FMKS(I2CMDR,MST,MASTER)                |
                I2C_FMKS(I2CMDR,TRX,RCV)                |
                I2C_FMKS(I2CMDR,IRS,NRST)                |
                I2C_FMKS(I2CMDR,STB,NONE),  
               
                I2C_FMKS(I2CPSC,IPSC,OF(15-1))               
        };

Uint16 I2C_write16(I2C_Handle hI2C,Uint8 regnum,Uint8 regval)
{
        Uint8 tempdata = 0;
               
        //Waiting for Bit12 of ICSTR ie. BB (Bus Busy) to clear
    waitForBusFree(hI2C);
   
        /* Configure I2C. */
        I2C_config(hI2C,&MyI2CCfgT);
        //Write the low data into Data Transmit register
    tempdata = regnum;
    I2C_writeByte(hI2C, tempdata&0xFF);
   
    //To invoke the start condition
    I2C_start(hI2C);
   
    /* Wait until MSB transmit is done */
    while(!I2C_xrdy(hI2C));
   
    //Write the high data into Data Transmit register.
    tempdata = regval;
    I2C_writeByte(hI2C, tempdata&0xFF);
    //Generate Stop condition
    I2C_sendStop(hI2C);
   
    //Waiting for Bit12 of ICSTR ie. BB (Bus Busy) to clear
    waitForBusFree(hI2C);
   
    return TRUE;

}

extern far void vectors();

I2C_Handle hI2c;

void main()
{
        CSL_init();
        
        /* Initialize DEC6713 board. */
        DEC6713_init();
        
        IRQ_setVecs(vectors);
    IRQ_nmiEnable();
    IRQ_globalEnable();
   
   
           hI2c = I2C_open(I2C_DEV0,I2C_OPEN_RESET);
               

   
        /* Configure I2C. */
//        I2C_config(hI2c,&MyI2CCfgT);
   // I2C_config(hI2c,&MyI2CCfgT);
   //左通道音量控制
  I2C_write16(hI2c,0x00,0x17);
    //右通道音量控制
    I2C_write16(hI2c,0x02,0x17);
    //左通道麦克风音量控制
    I2C_write16(hI2c,0x05,0xFF);
    //右通道麦克风音量控制
    I2C_write16(hI2c,0x07,0xFF);
    //模拟音频路径控制
    I2C_write16(hI2c,0x08,0x0C);
    //数字音频路径控制
    I2C_write16(hI2c,0x0B,0x00);
    //电源控制
    I2C_write16(hI2c,0x0D,0xFF);
    //数字端口模式控制
    I2C_write16(hI2c,0x0E,0x02);
    //采样频率控制
    I2C_write16(hI2c,0x10,0x0D);
    //数字端口开启控制
    I2C_write16(hI2c,0x12,0x01);        
     while(1){};
}

我本想通过IIC0来配置AIC23B的寄存器,使AIC23B为Bypass模式,这样就可以直接将音频信号输出来,以验证AIC23B配置的正确.可总也出不来,不知道哪位知道原因,请指教.
沙发
tiger2010|  楼主 | 2010-2-8 13:03 | 只看该作者
MCASP_ConfigRcv MyMCASPcfgRcv = {
                /* RMASK */
                0xffffffff, /* RMASK -     Use all 32 bits */
     //   0x0000ffff,
            0x000180f8, /* RFMT -      MSB first, 32-bit slots, CPU bus, 1 bit delay */
     //   0x00018078,
            0x00000100, /* AFSRCTL -   burst, 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-31 are active */
            0x00000000, /* RINTCTL -   No interrupts */
            0x00000000  /* RCLKCHK -   Not used */
        };

请问一下高手,我要从TLV320AIC23B采集16位无符号整数数据,那么McASP的接收部分的数据形式该怎样配置?是否必须以32位进行采集?

使用特权

评论回复
板凳
thf2008| | 2010-2-8 13:04 | 只看该作者
6000系列的片子,没用过

使用特权

评论回复
地板
午夜粪车| | 2010-2-9 00:17 | 只看该作者
这样的实验我没有做过,但是我感觉要分析一下TLV320AIC23B采集原理,注意点评转化的方向和使能,MCBSP的初始化尤为重要!!

使用特权

评论回复
5
午夜粪车| | 2010-2-9 00:18 | 只看该作者
只要仔细耐心地去讲起匹配一定会有所收获的!!!

使用特权

评论回复
6
linhai2009| | 2010-2-9 12:46 | 只看该作者
哎,又慢了一步

使用特权

评论回复
7
llljh| | 2010-2-9 18:52 | 只看该作者
程序慢了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

338

帖子

0

粉丝