20151126-2:I2C分析

2018-11-11  本文已影响0人  skylaugher

20151126-2:I2C分析

一:I2C模组的基本结构和基本函数

The restrictionson reading and clock stretching do not apply to xCORE-200 devices。

在工程的makefile中只列出了下面两个I2C模组:module_i2c_shared,module_i2c_single_port。

在module_i2c_single_port、module_i2c_simple、module_i2c_master中所有的接口函数都定义为同样名称的四个函数(同样的i2c中定义):

i2c_master_init(),i2c_master_rx(),
i2c_master_read_reg(),i2c_master_write_reg()

其中module_i2c_shared为母类。根据makefile中导入的模组名调用该模组下的对应函数,module_i2c_shared对应也有四个函数,我们在应用程序中调用这四个shared函数:

i2c_shared_master_init,i2c_shared_master_rx,
i2c_shared_master_read_reg,i2c_shared_master_write_reg

每一个函数的结构均如下例所示:

inti2c_shared_master_read_reg(REFERENCE_PARAM(struct r_i2c, i2cPorts), int device,int reg_addr, unsigned char data[], int nbytes)
{
   int retval;
   swlock_acquire(&i2c_swlock);     //软加锁
   retval = i2c_master_read_reg(device, reg_addr, data, nbytes, i2cPorts);     //执行操作
   swlock_release(&i2c_swlock);      //解锁
   return retval;
}

注意:(20151221添加)这里的I2C地址为实际的写地址右移一位,比如写地址为0x98,则函数中的I2C地址为0x98/2=0x4C.(原始地址中的最低位始终是读写区分位)

二:I2C重要参数和函数说明

1、i2c端口速率定义

/** This constant defines the time in clockticks between successive bits. By default set to 1000 for 100 Kbit devices, butit can be overridden to 250 for 400 Kbit devices. */
\#define I2C_BIT_TIME 1000

2、i2c端口说明:

struct r_i2c {
   port scl;      /**< Port onwhich clock wire is attached. Must be on bit 0 */
   port sda;      /**< Port onwhich data wire is attached. Must be on bit 0 */
};

3、i2c_shared_master_rx函数没有被调用。

4、在audiohw.xc中定义了各种宏,用于对各种i2c设备进行读写操作。

三:AudioHwInit()、AudioHwConfig()

AudioHwInit()、AudioHwConfig()这两个函数中只有管脚设置和i2c寄存器设置。

AudioHwInit()的调用关系:

main()->usb_audio_io()作为一个Par->audio()->AudioHwInit() 在while(1)循环前。

AudioHwConfig()的调用关系:根据采样率的变化重新设置。

main()->usb_audio_io()作为一个Par->audio()->AudioHwConfig()在while(1)循环里。

上一篇下一篇

猜你喜欢

热点阅读