time_12 发表于 2014-3-5 11:05

DSP里I2C通信问题 急急!!!

extern void transmitFunc(void)
{
        int w = 0;
        int i;
//        IIC_Flag = 1;
        Counter1 = 2;
        while(Counter1)
        {
                if (IIC_Free_Flag == 0)
                {       
                        IIC_Free_Flag = 1;
                        break;
                }
        }
        IIC_flag_receive_finish = 0;
        IIC_Tx_Num = 0;

    I2C_config(&Config);       
        I2C_RSET(I2CSAR,IIC_Address);
    I2C_RSET(I2CCNT,master_transmit_number); //设置发送数据的个数   
        w = I2C_RGET(I2CSTR)&(0x1000);
        if(w==0)//总线空闲
        {
                I2C_start();                          
        }
        else
        {
                I2C_reset();
                for(i=0;i<500;i++);
                w = I2C_RGET(I2CSTR)&(0x1000);
                if(w==0)
                I2C_start();
                else;
        }
}

w = I2C_RGET(I2CSTR)&(0x1000); 这句话什么意思,程序运行时一直是4096,我想让 w=0 进入空闲状态
I2C_RGET(I2CSTR)什么意思求大神解答,谢谢!!

km_zzy 发表于 2014-3-5 11:54

检查状态寄存器的值。

zhangmangui 发表于 2014-3-5 17:40

用的是CSL库   w = I2C_RGET(I2CSTR)&(0x1000);
意思就是读取I2CSTR寄存器当前的值然后与0x1000按位与运算
这是在判断某一个状态位
你多多看看你使用处理器的CSL库介绍

time_12 发表于 2014-3-6 10:51

zhangmangui 发表于 2014-3-5 17:40 static/image/common/back.gif
用的是CSL库   w = I2C_RGET(I2CSTR)&(0x1000);
意思就是读取I2CSTR寄存器当前的值然后与0x1000按位与运 ...

我想问问:I2C_RGET(I2CSTR)具体是和哪个管脚还是和DSP的管脚没关系,我用的是TMS320 VC5509

time_12 发表于 2014-3-6 10:53

km_zzy 发表于 2014-3-5 11:54 static/image/common/back.gif
检查状态寄存器的值。

嗯,我以前没接触过DSP,现在也不知道具体怎么改,寄存器状态应该是1吧

zhangmangui 发表于 2014-3-6 11:32

time_12 发表于 2014-3-6 10:51 static/image/common/back.gif
我想问问:I2C_RGET(I2CSTR)具体是和哪个管脚还是和DSP的管脚没关系,我用的是TMS320 VC5509 ...

I2CSTR这是个寄存器啊是利用CSL库里面的函数把他的值读到了而已

time_12 发表于 2014-3-6 14:17

zhangmangui 发表于 2014-3-6 11:32 static/image/common/back.gif
I2CSTR这是个寄存器啊是利用CSL库里面的函数把他的值读到了而已

/*--------------------- Register: I2CSTR -----------------------*/
#define _I2C_I2CSTR_ADDR                (0x3C02u)
#define _I2C_I2CSTR                        PREG16(_I2C_I2CSTR_ADDR)
#define I2CSTR                        _I2C_I2CSTR

#define I2C_RGET(Reg)                  _I2C_##Reg##_GET
w = I2C_RGET(I2CSTR)&(0x1000);

IDEF void I2C_getConfig(I2C_Config *Config) {

int old_intm;
old_intm = IRQ_globalDisable();
Config->i2coar = I2C_RGET(I2COAR);
Config->i2cier = I2C_RGET(I2CIER);
Config->i2cpsc = I2C_RGET(I2CPSC);
Config->i2cclkl = I2C_RGET(I2CCLKL);
Config->i2cclkh = I2C_RGET(I2CCLKH);
Config->i2ccnt = I2C_RGET(I2CCNT);
Config->i2csar = I2C_RGET(I2CSAR);
Config->i2cmdr = I2C_RGET(I2CMDR);
Config->i2cstr = I2C_RGET(I2CSTR);
Config->i2cisrc = I2C_RGET(I2CISRC);
IRQ_globalRestore(old_intm);   

}

我在程序里找到这些,还是不懂(在csl_i2c.h和csl_i2chal.h中找到的)

zhangmangui 发表于 2014-3-6 21:43

time_12 发表于 2014-3-6 14:17 static/image/common/back.gif
/*--------------------- Register: I2CSTR -----------------------*/
#define _I2C_I2CSTR_ADDR                (0x3C ...

只有一个前提就是你好好看看CSL库吧

time_12 发表于 2014-3-7 08:29

zhangmangui 发表于 2014-3-6 21:43 static/image/common/back.gif
只有一个前提就是你好好看看CSL库吧

你说的CSL库是在程序里么,我在网上没找到,求个链接谢谢!!

zhangmangui 发表于 2014-3-7 09:10

time_12 发表于 2014-3-7 08:29 static/image/common/back.gif
你说的CSL库是在程序里么,我在网上没找到,求个链接谢谢!!



这是介绍   

time_12 发表于 2014-3-7 14:27

zhangmangui 发表于 2014-3-7 09:10 static/image/common/back.gif
这是介绍

我现在是一个DSP和两个MSP430进行I2C通信,然后拔掉一个430的模块另一个430就无法通信了。我看了CSL库,还是没搞明白
页: [1]
查看完整版本: DSP里I2C通信问题 急急!!!