s3c2440A操作24C08
来源:互联网 发布:数据挖掘与r语言 源码 编辑:程序博客网 时间:2024/05/28 09:32
我这里实现的是非中断模式下的IIC操作
数据手册和代码对照着很容易看懂,尤其是数据手册上IIC那一章的几张程序流程图,一目了然。
下面是代码:
//这里没有用精确延时void delay1(){int i = 0;int j = 0;for(i = 0; i < 100; i++){for(j = 0; j < 100; j++);}}/*************************************************************Function name: IIC_InitDescription:Initialize IIC registersParameters:NoneReturns:None**************************************************************/void IIC_Init(){//GPE14:IICSCL GPE15:IICSDArGPECON = rGPECON & (~(0xf << 28)) | (0xa << 28);//GPE14 GPE15 poll up function disabledrGPEUP = 0xc000;//rIICCON[7] = 1: enable IIC_bus acknowledge bit//rIICCON[6] = 0: IICCLK = fPCLK / 16//rIICCON[5] = 1: Tx/Rx interrupt enable//rIICCON[3..0]: Tx clock = IICCLK/(IICCON[3:0]+1)rIICCON = (1 << 7) | (0 << 6) | (1 << 5) | 0x0f;//rIICSTAT[4] = 1: enable Rx/TxrIICSTAT = (1 << 4);rIICADD = 0x10;}/*************************************************************Function name: Write24C08_nbyteDescription:Write data to 24C08Parameters:slave_addr: the address of IIC device, often set to "0xa0"IIC_addr: exact data addressIIC_data:value of dataReturns:None**************************************************************/void Write24C08_nbyte(unsigned int slave_addr, unsigned int IIC_addr, unsigned char IIC_data){ unsigned int i = 0;unsigned int j = 0;rIICDS = slave_addr; //从设备地址//rIICSTAT[7:6]:11--master Tx mode//rIICSTAT[5]: 1--start signal//rIICSTAT[4]: 1--enable Rx/TxrIICSTAT = 0xf0; //开始写while(!(rIICCON & 0x10)); //等待应答信号,该位为1,收到应答rIICDS = IIC_addr; //向移位寄存器送数据:数据地址for(i = 0; i < 10; i++);rIICCON = 0xaf;while(!(rIICCON & 0x10));rIICDS = IIC_data; //向移位寄存器送数据rIICCON = 0xaf; //rIICCON[4] = 0:清空挂起位while(!(rIICCON & 0x10));Uart_Printf("Send %d data %d to IIC\n", IIC_addr, IIC_data);rIICSTAT = 0xd0; //rIICSTAT[5] = 0:STOP signal generation when write,停止信号rIICCON = 0xaf; //清空挂起位for(i = 0; i < 10; i++);}/*************************************************************Function name:Read24C08_nbyteDescription:Read data from 24C08Parameters:slave_addr: the address of IIC device, often set to "0xa0"IIC_addr: exact data addressdatabuffer:used to storage data valueReturns:None**************************************************************/void Read24C08_nbyte(U32 slave_addr,U32 IIC_addr,U8 *databuffer){ unsigned int i = 0;unsigned int j = 0;unsigned int add_in = IIC_addr; U32 temp = 0;U32 tt = 0; rIICDS = slave_addr;//0xa0 rIICSTAT = 0xf0; //开启IIC写功能,写IIC地址while(!(rIICCON & 0x10)); rIICDS = (U8)add_in; //数据具体地址 for(i=0;i<10;i++); rIICCON = 0xaf; //清空挂起标志位resumes IIC operation. while(!(rIICCON & 0x10));rIICDS = slave_addr; rIICSTAT = 0xb0; //bit[7:6]:10--master Rx mode,master receive mode rIICCON = 0xaf; while(!(rIICCON & 0x10)); temp = rIICDS; rIICCON = 0x2f; for(i=0;i<10;i++);while(!(rIICCON & 0x10)); tt = rIICDS;Uart_Printf("databuffer = 0x%x, %d IIC_addr = %d, temp = %d\n", tt, tt, IIC_addr, temp); rIICSTAT = 0x90; //停止读 rIICCON = 0xaf; delay1();}
- s3c2440A操作24C08
- c08
- S3C2440A
- S3C2440A
- linux i2c 24c08 tiny6410 一个24c08的设备驱动
- I2C总线的EEPROM(24C08)Linux驱动
- I2C总线的EEPROM(24C08)Linux驱动
- 原机拷贝康佳SP21SK391原机数据(24C08 OM8373PS/N3/A/1914)
- I2C总线的EEPROM(24C08)Linux驱动(原创)
- C08(初见AWT)
- S3C2440A的中断控制器
- S3C2440A处理器开发板
- 基于S3C2440A+SDRAM(K4M51163)
- 基于S3C2440A+SDRAM(K4M51163)
- s3c2440a启动过程详解
- s3c2440a启动过程详解
- S3C2440A中断小记
- s3c2440a时钟模块
- XML序列化以及反序列化
- u-boot-2009.08在2440上的移植详解(四)
- 2010年中兴面试题
- Driver Development Part 1: Introduction to Drivers
- 至广大Java学习者的一封信
- s3c2440A操作24C08
- u-boot-2009.08在2440上的移植详解(五)
- 弹珠小程序
- Oracle is #1 in the RDBMS Market Share Worldwide for 2012
- 设计模式之二:观察者模式
- opencv 笔记02Core_Scan
- dialog,activity 屏蔽Home键详解
- 13 Table View javafx
- 拷贝构造函数作用测试