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

多主机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. Maven报错Missing artifact jdk.tools:jdk.tools:jar:1.7--转
  2. PS教程第二课:PS安装
  3. 1092. To Buy or Not to Buy (20)
  4. python用户标识符条件_使用sum(if…)或条件语句操作两个数据集,这些语句没有hivehadooppython的公共标识符...
  5. Linux里sra文件是什么,prefetch命令下载SRA文件
  6. 省钱有简单的祛痘方法 - 健康程序员,至尚生活!
  7. 移动应用开发者在区块链中怎么赚钱?
  8. Centos7挂载iso镜像文件配置本地yum源
  9. EOS REX 安全系列之从源码开始玩转 REX(一)
  10. 摩托罗拉defy.apk+安装recovery和刷机的教程
  11. java代码下划线是啥意思_关于语法:在这个Java代码中,下划线实际上做了什么?...
  12. START 0.296.1 中文版 (腾讯官方云游戏平台)
  13. 大二Web课程设计 HTML+CSS制作苹果商城网站 Apple商城 8个页面
  14. 微信公众号开发——模板消息
  15. Foreign Language_english_感叹句
  16. 重视“中心+网格化+信息化”建设,推进城市平稳发展
  17. jad文件的错误代码,分享
  18. jQuery第5章简答题4(使用css()方法添加图片边框)5(制作林徽因简介页面)
  19. sqrt函数的几种实现方法
  20. 基础运放电路-含波形图分析-运算放大器

热门文章

  1. it工种分类_什么是运维?运维工种有哪些
  2. 图像去燥:NLM、BM3D
  3. 概论 经典车间生产调度问题模型及其算法
  4. 中国科学院大学计算机考研信息汇总
  5. 随机小姐姐404单页网站源码
  6. mathtype向上取整函数
  7. Lost connection to MySQL server during query问题
  8. Python是如何将“中文”转“拼音”的?
  9. web开发中前端页面是如何跟后端服务器数据交互的
  10. windows 网络正常 浏览器却打不开网页解决办法