CC3200——IIC从机地址计算

在SDK 的i2c_demo例程中,有两个IIC器件,温度传感器TMP006和三轴加速度传感器BMA222E,下面 以TMP006为例总结一下IIC从机地址的计算步骤:

1、根据TMP006数据手册找到其从机地址定义的地方,有些设备的从机地址是 固定的,有些则根据其引脚的电平决定,这样就可以在一根总线上挂载多个从机设备,TMP006就是这样。CC3200——IIC从机地址计算_第1张图片

 

2、根据CC3200开发板的硬件原理图,可以确定ADR1=0,ADR0=1,所以上面的7位从机地址应该选1000001

 

3、查看CC3200的数据手册,找到其发送IIC地址的时序如下图所示:

CC3200——IIC从机地址计算_第2张图片

大概意思就是说发送的从机地址由从机的7位地址最后加上一位读写标志位,然后从高位向低位依次发送。其中读写标志位规定1读0写。

 

4、而i2c_demo的例程中是需要读取设备ID寄存器,寄存器地址为0XFE。因此,可以确定最后一位应该是取1,那么主机需要发送的数据也就确定了:10000011=0x83

 

5、但是发现在TI给出的例程的说明书中,发送的地址却不是0x83,而是0x41,如下图:

CC3200——IIC从机地址计算_第3张图片

这又是怎么回事呢?

首先上面的分析肯定没有问题,那么就看他的程序是怎么实现的,下图是写从机地址时调用的函数:

CC3200——IIC从机地址计算_第4张图片

看来他调用了MAP_I2CMasterSlaveAddrSet(I2C_BASE, ucDevAddr, false);函数,通过查看库函数的帮助文档,看这个函数到底干了什么:

CC3200——IIC从机地址计算_第5张图片

下面还有这么一段话的介绍 :

This function configures the address that the I2C Master places on the bus when initiating a transaction. When the bReceive parameter is set to true, the address indicates that the I2C Master is initiating a read from the slave; otherwise the address indicates that the I2C Master is initiating a write to the slave.

原来TI早就给我们封装好了,只要知道7位从机地址并确定读写操作,直接当做参数传给这个函数就行了。所以他传入的0x41就是1000001作为低7位时的值(高位补0)。

你可能感兴趣的:(毕业设计——CC3200)