打印

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

[复制链接]
1762|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
time_12|  楼主 | 2014-3-5 11:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 | 只看该作者
检查状态寄存器的值。

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
zhangmangui + 4 很给力!欢迎新朋友
板凳
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
用的是CSL库   w = I2C_RGET(I2CSTR)&(0x1000);
意思就是读取I2CSTR寄存器当前的值  然后与0x1000按位与运 ...

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

使用特权

评论回复
5
time_12|  楼主 | 2014-3-6 10:53 | 只看该作者
km_zzy 发表于 2014-3-5 11:54
检查状态寄存器的值。

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

使用特权

评论回复
6
zhangmangui| | 2014-3-6 11:32 | 只看该作者
time_12 发表于 2014-3-6 10:51
我想问问:I2C_RGET(I2CSTR)  具体是和哪个管脚还是和DSP的管脚没关系,我用的是TMS320 VC5509 ...

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

使用特权

评论回复
7
time_12|  楼主 | 2014-3-6 14:17 | 只看该作者
zhangmangui 发表于 2014-3-6 11:32
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中找到的)

使用特权

评论回复
8
zhangmangui| | 2014-3-6 21:43 | 只看该作者
time_12 发表于 2014-3-6 14:17
/*--------------------- Register: I2CSTR -----------------------*/
#define _I2C_I2CSTR_ADDR                (0x3C ...

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

使用特权

评论回复
9
time_12|  楼主 | 2014-3-7 08:29 | 只看该作者
zhangmangui 发表于 2014-3-6 21:43
只有一个前提  就是你好好看看CSL库吧

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

使用特权

评论回复
10
zhangmangui| | 2014-3-7 09:10 | 只看该作者
time_12 发表于 2014-3-7 08:29
你说的CSL库是在程序里么,我在网上没找到,求个链接  谢谢!!

TMS320C55x Chip Support Library API Reference Guide重点.pdf (1.18 MB)

这是介绍   

使用特权

评论回复
11
time_12|  楼主 | 2014-3-7 14:27 | 只看该作者
zhangmangui 发表于 2014-3-7 09:10
这是介绍

我现在是一个DSP和两个MSP430进行I2C通信,然后拔掉一个430的模块另一个430就无法通信了。我看了CSL库,还是没搞明白

使用特权

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

本版积分规则

4

主题

36

帖子

0

粉丝