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

多主机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. jQuery慢慢啃之特效(八)

    1.show([speed,[easing],[fn]])\\显示隐藏的匹配元素 //speed:三种预定速度之一的字符串("slow","normal", o ...

  2. request.getSession()

    request.getSession(); 与request.getSession(false);区别 服务器把session信息发送给浏览器   浏览器会将session信息存入本地cookie中 ...

  3. centos6.5安装vsftp服务并配置虚拟账户ftp

      当我们的用户量越来越大时,继续创建更多的系统用户是不明智的,这时就需要为vsftpd创建虚拟账户,但vsftpd虚拟账户的数据库要保存在Berkeley DB格式的数据文件中,所以需要安装db4- ...

  4. php基础知识【函数】(5)正则preg

    一.匹配次数 (1) * 匹配前面的子表达式零次或多次 (2) + 匹配前面的子表达式一次或多次,+ 等价于 {1,} (3) ? 匹配前面的子表达式零次或一次,? 等价于 {0,1} (4){n} ...

  5. php流行笔试题及答案

    1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中:而链接到当前页面的URL记录在预定义变量(2)中. 答:echo $_SERVER['PHP_SELF']; echo ...

  6. github 中redisPhpAdmin redis 可视化界面

    GITHUB地址:https://github.com/ErikDubbelboer/phpRedisAdmin 在php目录下执行 git clone https://github.com/Erik ...

  7. PHP_EOL常量

    PHP_EOL 换行符 unix系列用 \n windows系列用 \r\n mac用 \r PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性 如: <?php echo PHP ...

  8. Linq/EF/lambda Group by/Order by 多个字段详细用法

    1)单个字段Group by: //a.Key类型与a.Province字段类型一样  .GroupBy(a => a.Province).Select(a => a.Key).ToLis ...

  9. ParentWindow属性及其一系列函数的作用——适合于那些不需要父控件管理内存释放的子控件

    TWinControl = class(TControl) property ParentWindow: HWnd read FParentWindow write SetParentWindow; ...

  10. 浅谈RDD

    RDD(Resilient Distributed Datasets)弹性分布式数据集,是在集群应用中分享数据的一种高效,通用,容错的抽象,是Spark提供的最重要的抽象的概念, 它是一种有容错机制 ...