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

多主机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();

}

转载于:https://www.cnblogs.com/suncoolcat/p/3297285.html

S3C2440 I2C总线控制相关推荐

  1. I2C之知(四)--I2C总线的7bit从机地址

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

  2. I2C总线学习—查缺补漏—S3C2440的I2C控制器

    I2C总线学习-查缺补漏-S3C2440的I2C控制器                  学习了IIC总线协议的理论部分,觉得应该学习具体操作2440的IIC控制器,毕竟最终都是为了学习S3C2440 ...

  3. linux i2c dev.h freq,Linux I2C总线控制器驱动(S3C2440)

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

  4. S3C2440 I2C实现

    S3C2440 I2C实现 1:I2C原理 总线的构成及信号类型 I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据.在CPU与被控IC之间.IC与IC之间进行双向传送,最高传送速 ...

  5. Linux设备驱动之——I2C总线

    2  I2C子系统 2.1 LinuxI2C子系统架构 在内核中已经提供I2C子系统,所以在做I2C驱动之前,就必须要熟悉该子系统. 2.2 三大组成部分 1.I2C核心(i2c-core) I2C核 ...

  6. SylixOS iMX6平台I2C总线驱动

    原理概述 I2C总线驱动概述 I2C总线驱动是I2C适配器的软件实现,提供I2C适配器与从设备间完成数据通信的能力,比如起始,停止,应答信号和MasterXfer的实现函数.驱动程序包含初始化I2C总 ...

  7. I2C 总线原理与架构

    一.I2C总线原理 I2C是一种常用的串行总线,由串行数据线SDA 和串行时钟线SCL组成.I2C是一种多主机控制总线,它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须 ...

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

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

  9. Linux I2C子系统分析之(一) ----- 用GPIO模拟I2C总线

    在drivers/i2c/busses下包含各种I2C总线驱动,如S3C2440的I2C总线驱动i2c-s3c2410.c,使用GPIO模拟I2C总线的驱动i2c-gpio.c,这里只分析i2c-gp ...

最新文章

  1. 使用MyBatis简化枚举类值的存储和读取
  2. 计算机专业英文简历和求职信,计算机专业生英文求职信范文
  3. 织梦换了html模板样式没了,织梦(dedecms)如何更换网站模板?
  4. Ubuntu16.04 配置SSH无密码登录
  5. Custom.pll : ZOOM小测试
  6. Tensorflow:操作执行原理
  7. Kafka从上手到实践 - 实践真知:Kafka Java Consumer | 凌云时刻
  8. 显控触摸屏与STC51单片机modbus通讯程序,包含触摸屏程序与c51代码
  9. Alsa是Linux高级音频接口(百度文库无下载券抄来的)
  10. 安卓手机投屏到win10电脑无需安装任何软件(电脑和手机必须连接同一网络或者wifi)【投影到此电脑灰色无法操作怎么办?】by qiweb 端午节
  11. ABP vNext 缓存使用
  12. 教程丨GIS制图教程01
  13. 在Excel中激活数据分析工具
  14. 7-13 大家一起来玩游戏 (20 分)
  15. 升级主机后网站显示服务器过期,虚拟主机常见问题解答
  16. 安卓Android基于百度云平台人脸识别学生考勤签到系统设计
  17. TCP三次握手常见问题
  18. 企业如何有效防止内部文件泄密风险...
  19. 二分查找,返回第一次出现的位置
  20. matlab 奇异谱分析,SSA寻北-奇异谱分析

热门文章

  1. 计算机键盘无法使用的原因,电脑键盘失灵的原因及其解决方法
  2. python 两点曲线_Python自学教程| 3万字详解每个重要知识点(内附视频)
  3. Error: unable to perform an operation on node ‘rabbit@rabbitma‘ please see diamostics infoxmation
  4. Alpha阶段敏捷冲刺①Scrum 冲刺博客
  5. 02《区块链财富指北》私钥篇(2):百行Python代码演示一私钥生成多公链公钥原理。
  6. xposed hook之360加固的APP过模拟器检测
  7. pageCache和bufferCache
  8. 华为认证人工智能工程师 HCIA-AI V3.5(中文版) 发布通知
  9. 音视频开发:直播推流技术指南
  10. python符号积分