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

多主机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. PHPCMS(2)PHPCMS V9 环境搭建(转)

    转自:http://www.cnblogs.com/Braveliu/p/5072920.html PHPCMS V9的学习总结分为以下几点: [1]PHPCMS 简介 PHP原始为Personal ...

  2. jQuery API中文文档

    jQuery API中文文档 http://www.css88.com/jqapi-1.9/category/events/event-handler-attachment/ jQuery UI AP ...

  3. BZOJ 3872 Ant colony

    Description There is an entrance to the ant hill in every chamber with only one corridor leading int ...

  4. 查看Ubuntu操作系统位数

    查看系统是32位还是64位 #查看long的位数,返回32或64 getconf LONG_BIT

  5. I2C的主机从机模拟

    好久没有在csdn上面做笔记了,主要是最近琐碎的事情太多,乱七八糟的事情让自己不能坚定下来做自己喜欢做的事情.上了星期花了两天的时间模拟了I2C的主机和从机通信.一般都是主机模拟,从机直接用硬件I2C ...

  6. AOP实现方法

    原文地址 http://michael-softtech.iteye.com/blog/650779 (1)使用ProxyFactoryBean的代理 Java代码 package chapter4; ...

  7. Church encoding

    In mathematics, Church encoding is a means of representing data and operators in the lambda calculus ...

  8. java学习面向对象之继承

    在我们编写程序的过程当中,会遇到这种情况: 比如现在有一个狗,他的功能有跑,有跳,有吃,有叫,属性有雌雄,大小,颜色等等,同时现在我们也有一个猫,上述功能她也有.这个时候我们写代码的时候,就得分别把上 ...

  9. linux内核空间与用户空间信息交互方法

    linux内核空间与用户空间信息交互方法     本文作者: 康华:计算机硕士,主要从事Linux操作系统内核.Linux技术标准.计算机安全.软件测试等领域的研究与开发工作,现就职于信息产业部软件与 ...

  10. Linux kernel ‘net/key/af_key.c’信息泄露漏洞

    漏洞名称: Linux kernel ‘net/key/af_key.c’信息泄露漏洞 CNNVD编号: CNNVD-201307-071 发布时间: 2013-07-05 更新时间: 2013-07 ...