概述:话不多说,直接上图

多主机IIC总线控制(IICCON):

IIC控制总线状态(IICSTAT):

IIC总线地址(IICADD):

IIC发送,接收总线寄存器(IICDS)

IIC总线控制寄存器:

源码如下:

void Rd24C080(U32 slvAddr,U32 addr,U8 *data)
{
 _iicMode      = SETRDADDR;
 _iicPt        = 0;
 _iicData[0]   = (U8)addr;
 _iicDataCount = 1;

rIICDS   = slvAddr;
 rIICSTAT = 0xf0;                    //MasTx,Start 
 //Clearing the pending bit isn't needed because the pending bit has been cleared.
 while(_iicDataCount!=-1);

_iicMode      = RDDATA;
 _iicPt        = 0;
 _iicDataCount = 1;
   
 rIICDS        = slvAddr;
 rIICSTAT      = 0xb0;               //MasRx,Start
 rIICCON       = 0xaf;               //Resumes IIC operation.  
 while(_iicDataCount!=-1);

*data = _iicData[1];
}

void Wr24C080(U32 slvAddr,U32 addr,U8 data)
{
 _iicMode      = WRDATA;
 _iicPt        = 0;
 _iicData[0]   = (U8)addr;
 _iicData[1]   = data;
 _iicDataCount = 2;
   
 rIICDS   = slvAddr;                 //0xa0
 rIICSTAT = 0xf0;                    //MasTx,Start
 //Clearing the pending bit isn't needed because the pending bit has been cleared.
   
 while(_iicDataCount!=-1);

_iicMode = POLLACK;

while(1)
 {
  rIICDS     = slvAddr;
  _iicStatus = 0x100;
  rIICSTAT   = 0xf0;              //MasTx,Start
  rIICCON    = 0xaf;              //Resumes IIC operation.
          
  while(_iicStatus==0x100);
          
  if(!(_iicStatus&0x1))
   break;                      //When ACK is received
 }
 rIICSTAT = 0xd0;                    //Stop MasTx condition
 rIICCON  = 0xaf;                    //Resumes IIC operation.
 Delay(1);                           //Wait until stop condtion is in effect.
 //Write is completed.
}

void Test_Iic(void)
{
 unsigned int i,j,save_E,save_PE;
 static U8 data[256];

Uart_Printf("\nIIC Test(Interrupt) using AT24C02\n");

save_E   = rGPECON;
 save_PE  = rGPEUP;
 rGPEUP  |= 0xc000;                  //Pull-up disable
 rGPECON |= 0xa00000;                //GPE15:IICSDA , GPE14:IICSCL

pISR_IIC = (unsigned)IicInt;
 rINTMSK &= ~(BIT_IIC);

//Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
 // If PCLK 50.7MHz, IICCLK = 3.17MHz, Tx Clock = 0.198MHz
 rIICCON = (1<<7) | (0<<6) | (1<<5) | (0xf);

rIICADD  = 0x10;                    //2440 slave address = [7:1]
 rIICSTAT = 0x10;                    //IIC bus data output enable(Rx/Tx)
 rIICLC = (1<<2)|(1);      // Filter enable, 15 clocks SDA output delay       added by junon
   
 Uart_Printf("Write test data into AT24C02\n");

for(i=0;i<256;i++)
  Wr24C080(0xa0,(U8)i,i);
          
 for(i=0;i<256;i++)
  data[i] = 0;

Uart_Printf("Read test data from AT24C02\n");
   
 for(i=0;i<256;i++)
  Rd24C080(0xa0,(U8)i,&(data[i]));

//Line changed 0 ~ f
 for(i=0;i<16;i++)
 {
  for(j=0;j<16;j++)
   Uart_Printf("%2x ",data[i*16+j]);
  Uart_Printf("\n");
 }
 rINTMSK |= BIT_IIC;   
 rGPEUP  = save_PE;
 rGPECON = save_E;
}

void main()

{

Test_Iic();

}

S3C2440 I2C总线控制的更多相关文章

  1. I2C总线和S5PV210的I2C总线控制器

    一.什么是I2C通信协议? 1.物理接口:SCL + SDA (1)SCL(serial clock):时钟线,传输CLK信号,一般是I2C主设备向从设备提供时钟的通道. (2)SDA(serial ...

  2. (4)I2C总线的7bit从机地址

    时钟拉伸(Clock stretching)clock stretching通过将SCL线拉低来暂停一个传输.直到释放SCL线为高电平,传输才继续进行.clock stretching是可选的,实际上 ...

  3. 关于具有I2C总线的TEA6320的使用

    现在先了解一下TEA6320,TEA6320是一个I2C总线控制音响应用的立体声放大器,,它的I2C协议和音量控制如下: 它的主要代码: void delay1ms(unsigned int Dela ...

  4. Linux I2C总线控制器驱动(S3C2440)

    s3c2440的i2c控制器驱动(精简DIY),直接上代码,注释很详细: #include <linux/kernel.h> #include <linux/module.h> ...

  5. s3c2440的IIC控制

    在tq2440和mini2440上都连接着EEPROM 它们作用也不过測试I2C总线能否用. 当中在mini2440上EEPROM型号是 AT24C08,在tq2440上这个型号是 AT24C02A. ...

  6. i2c总线,设备,驱动之间的关系

    ------ 总线上先添加好所有具体驱动,i2c.c遍历i2c_boardinfo链表,依次建立i2c_client, 并对每一个i2c_client与所有这个线上的驱动匹配,匹配上,就调用这个驱动的 ...

  7. [I2C]I2C总线协议图解

    转自:http://blog.csdn.net/w89436838/article/details/38660631 1  I2C总线物理拓扑结构      I2C 总线在物理连接上非常简单,分别由S ...

  8. Linux设备驱动模型之I2C总线

    一.I2C子系统总体架构 1.三大组成部分 (1)I2C核心(i2c-core):I2C核心提供了I2C总线驱动(适配器)和设备驱动的注册.注销方法,提供了与具体硬件无关的I2C读写函数. (2)I2 ...

  9. Linux+I2C总线分析(主要是probe的方式)

    Linux I2C 总线浅析 ㈠ Overview Linux的I2C体系结构分为3个组成部分: ·I2C核心: I2C核心提供了I2C总线驱动和设备驱动的注册.注销方法,I2C通信方法(即“algo ...

随机推荐

  1. Node.js的长连接

    之前写的js服务器脚本,在服务器上运行的挺好的.也经过了压力测试,单次接受4000次的连接不成问题.在5s里,可以应答1W多次的连接.对于这个连接次数,我们还是挺满意的,但是Boss说:客户端每2分钟 ...

  2. jQuery慢慢啃之CSS(六)

    1.css(name|pro|[,val|fn])//访问匹配元素的样式属性 $("p").css("color");//获取 $("p") ...

  3. PHP 用Class构造JSON数据

    header('Content-type: appliction/json; charset=shift-JIS'); // error //{ // "result": fals ...

  4. SWFUpload(转载)

    网上的例子介绍的文档真的很多.下面简单介绍一下 SWFUpload的文件上传流程是这样的: 1.引入相应的js文件 2.实例化SWFUpload对象,传入一个配置参数对象进行各方面的配置. 3.点击S ...

  5. mysql,left join on

    转自http://www.oschina.net/question/89964_65912 觉得很有帮助,用来学习. 即使你认为自己已对 MySQL 的 LEFT JOIN 理解深刻,但我敢打赌,这篇 ...

  6. 实用的透明背景mark图标

  7. TatukGIS-TGIS_ShapeArc.GetPointOnLine

    function GetPointOnLine(const _distance: Double; const _offset: Double; const _part: Integer): TGIS_ ...

  8. 【python常用模块】os.path

    os.path.abspath(path) #返回绝对路径 os.path.basename(path) #返回文件名 os.path.commonprefix(list) #返回list(多个路径) ...

  9. 为Ubuntu配置ssh服务 方便远程登陆

    Ubuntu系统必须开启ssh服务后,XP或者其他的主机才可以远程登陆到Ubuntu系统. 1,安装软件包,执行sudo apt-get install openssh-server Ubuntu缺省 ...

  10. WSS存储服务器(Windows Storage Server) 2012新功能解析

    虽然最近一段时间有关微软的新闻大多数集中在Windows 8以及Surface平板设备身上,但数周之前Windows Server 2012新版本中所包含的Windows Storage Server ...