voidi2c_init(I2C_Type *base) {base->I2CR &= ~(1<<7);//disable I2Cbase->IFDR=0x15;//640分频,clk=103.125KHzbase->I2CR |= (1<<7);//I2C Enable} 初始化里只是设置了个分频器,我们使用的时钟源是66MHz,选择640分频,速率为103.125KHz,设置分频器前要将I2C停止,设置完成后一定要使能I2C,其他...
I2C核心层的实现位于drivers/i2c/i2c-core.c中,笔者从i2c_init函数开始分析。 代码语言:javascript 复制 staticint __initi2c_init(void){int retval;retval=bus_register(&i2c_bus_type);// 注册I2C总线if(retval)returnretval;#ifdefCONFIG_I2C_COMPATi2c_adapter_compat_class=class_compat_register("i2c-adapte...
00000869 ret = s3c24xx_i2c_init(i2c); 00000870 if (ret != 0) 00000871 goto err_iomap; 00000872 00000873 /* find the IRQ for this unit (note, this relies on the init call to 00000874 * ensure no current IRQs pending 00000875 */ 00000876 00000877 i2c->irq = ret = platform_get_irq(...
i2c_init函数三个参数分别为:所使用的I2C、数字滤波值和主机时钟配置值。i2c_transmit_set函数用于初始化通信参数,包括:所使用的I2C、从机地址、传输字节数、停止条件产生模式和起始条件产生模式。i2c_addr10_mode_enable函数用于使能10位地址模式。i2c_addr10_header_enable函数用于使能10位地址头读取时序,即主机发送...
I2C_Init(I2C2 ,&I2C_InitStructure); I2C_Cmd (I2C2 ,Enable); }voidI2C_Wirte (Uint8_t RegAddress,Uint8_t Data ){ I2C_GenerateStart(I2C2 ,ENABLE );//起始While (I2C_CheckEvent (I2C2,I2C_EVENT_MASTER_MODE_SELECT)!=SUCCESS);//等待EV5事件发生I2C_Send7bitAddress(I2C2 , MPU6050_Address...
void IICInit(void) { SCL = 0; IICStop(); } 发送和接收一个字节 发送一个字节和接收一个字节也是I2C 总线的基本操作。对I2C 的写操作需要用到这 两个操作。发送一个字节使用函数IICSend()实现。函数IICSend()的代码见程序清单 4.19。流程图见图4.3。函数同时处理了应答位。
同时,如果查看I2C_Init()初始化函数,内部会自动根据用户设置的通信频率来配置时钟,同时关于CCR寄存器的配置中相应时间值的计算,参考《STM32F103参考手册》。 同时以常见的AT24C02为测试对象进行验证,其地址为0XA0。ATC24C02的访问方式为:设备地址+存储单元地址+数据。验证流程如下: ...
I2C_init(); //IIC初始化 EA = 1; //使能总中断 delay_ms(10); //初始化后延时 test_len = 256; while(1) { btn_val=buttons_scan(0); //获取开发板用户按键检测值,不支持连按 //按下KEY1:从地址0x0000开始连续写入256个字节数据 if(btn_val == BUTTON1_PRESSED) { j = ...
解析:i2c_transfer接口函数,调用选择的p_i2c_con_selected成员中master_xfer函数。 代码语言:javascript 复制 voidi2c_init(void){/* 注册下面的I2C控制器 */s3c2440_i2c_con_add();/* 选择某款I2C控制器 *//* 调用它的init函数 */} 解析:s3c2440_i2c_con_add()函数,把定义的s3c2440_i2c_con结构体注册...