S3C2440 I2C总线控制

发布者:温柔的心情最新更新时间:2024-07-23 来源: cnblogs关键字:S3C2440  I2C  总线控制 手机看文章 扫描二维码
随时随地手机看文章

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

 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 AT24C02n');

 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 AT24C02n');
   
 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  总线控制 引用地址:S3C2440 I2C总线控制

上一篇:ARM中的---汇编指令
下一篇:S3C2440时钟体系

推荐阅读最新更新时间:2024-11-17 11:26

s3c2440裸机-内存控制器2-不同位宽外设与CPU地址总线的连接
不同位宽设备的连接 我们先看一下2440芯片手册上外设rom是如何与CPU地址总线连接的。 8bit rom与CPU地址线的连接 8bit*2 rom与CPU地址线的连接 8bit*4 rom与CPU地址线的连接 16bit rom与CPU地址线的连接 16bit*2 rom与CPU地址线的连接 从上面的图中,我们知道可以对2片位宽为8bit的外设扩展级联成1个16bit的外设,同理可用4片位宽为8bit的外设进行级联成1个32bit的外设... 从上面的图中,我们还看见一个规律: 当外设总线位宽为8bit时, 外设A0接CPU的地址总线ADDR , A - ADDR ...A - AD
[单片机]
ALSA声卡08_从零编写之框架_学习笔记
1、整体框架 (1)图示((DAI(全称Digital Audio Interface)接口)) 在嵌入式系统里面,声卡驱动是ASOC,是在ALSA驱动上封装的一层,包括以下三大块 (2)程序框架 machine:s3c2440_uda1341.c codec: UDA1341,WM8976 platform:IIS ,DMA 2、s3c2440_uda1341.c(参考s3c24xx_uda134x.c) (1)分配一个平台为soc-audio的平台设备, 在这平台设备里面有一个核心结构体snd_soc_s3c24xx_uda134x设置到私有数据里面 snd_soc_s3c24xx_uda134x结构体
[单片机]
ALSA声卡08_从零编写之框架_学习笔记
S3C2440 gpio
WATCHDOG TIMER 原理图 手册 举例 start.S .globl _start _start:/* 关看门狗 *//* 往WTCON(0x53000000)写0 */ ldr r0, =0x53000000 mov r1, #0 str r1, @ str, store, /* 设置GPFCON让GPF5作为输出引脚 */ ldr r1, =0x56000050 mov r0, #(1 10) str r0, /* 设置GPFDAT让GPF5输出0 */ ldr r1, =0x56000054 mov r0, #0 str r0, /* 无限循环 */halt: b h
[单片机]
<font color='red'>S3C2440</font> gpio
OpenCV2.0.0移植到ARM9(三)(JZ2440----S3c2440)
在前面已经交叉编译生成了OpenCV的库,libjpeg相关的库。下面尝试OpenCV应用程序编写与交叉编译。 1、opencv测试程序 test.cpp程序代码: #include stdio.h #include highgui.h #include imgproc.h int main(int argc,char *argv ) { IplImage* img = cvLoadImage( abc.jpg ); cvNamedWindow( Example1 , CV_WINDOW_AUTOSIZE); cvShowImage( Example1 , img); cvWaitKey(
[单片机]
OpenCV2.0.0移植到ARM9(三)(JZ2440----S3c2440)
u-boot-2011.06在基于s3c2440开发板的移植之支持YAFFS2
YAFFS和YAFFS2是由AlephOne公司开发的NAND Flash文件系统。YAFFS和YAFFS2主要差异在于PAGE读写size的大小,YAFFS2可支持到2Kper page,远高于YAFFS的512 Bytes,因此YAFFS2对于大容量NANDflash来说更具优势。 就u-boot来说,主要是能够使它支持下载YAFFS文件,以供操作系统使用,因此只要能够实现YAFFS的写入功能即可,无需实现读取功能。 u-boot-2011.06是支持写入YAFFS文件的,但默认情况下,该功能没有开启。要想开启该功能,就必须在include/configs/zhaocj2440.h文件内定义CONFIG_CMD_N
[单片机]
从0开始学Keil下的S3C2440裸机开发-2使用外部SDRAM
和使用内部RAM一样,关键设置分散加载文件,同时设置JLINK初始化配置文件。 1、新增工程配置组。 2设置分散加载组 3设置ini文件 Ext_Ram内容: FUNC void SetupForStart (void) { // o Program Entry Point PC = 0x30000000; } FUNC void Init (void) { _WDWORD(0x4A000008, 0xFFFFFFFF); // Disable All Interrupts _WDWORD(0x53000000, 0x00000000); // Disable Watchdog Timer
[单片机]
从0开始学Keil下的<font color='red'>S3C2440</font>裸机开发-2使用外部SDRAM
MSP430F5529 DriverLib 库函数学习笔记(十二)I2C实战
平台:Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 上机实战 I2C给 DAC 芯片 DAC7571 写入数字量 DAC7571 介绍 DAC7571 是低功耗,单通道 12 位 DA 转换器.DAC7571 兼容 I2C 接口,通过这两条数据线和外部通信,时钟的最高速度为 3.4Mbps. DAC7571 的外观图和引脚定义 如上图所示: 1 脚:模拟电压输出脚. 2 脚:接地. 3 脚:电源输入脚. 4 脚:串行数据输入引脚. 5 脚:串行时钟输入引脚. 6 脚:地址选择脚. DAC
[单片机]
MSP430F5529 DriverLib 库函数学习笔记(十二)<font color='red'>I2C</font>实战
基于CAN总线的蓄电池组充放电集散控制系统的设计
引 言 随着高科技及其产业的迅速发展,大存储容量的蓄电池组能源系统已经越来越被人们所重视,在诸如电动汽车、大功率UPS、电厂及变电站直流系统、通信系统等很多领域中都得到广泛应用。 蓄电池组是由一定数量的单体电池串联组成的,在使用过程中可能会有百次直至千次的充、放电。各单体蓄电池过充电、过放电或者放电不足均易引起电池的故障,某个单体蓄电池的故障也会导致整个蓄电池组的故障和损坏。因此,在线实时检测蓄电池组充放电各单体蓄电池的充放电电压、充放电时的温升以及整个蓄电池组的充放电电流、电压等参数,及时找出损坏或性能显著降低的蓄电池,对于延长电池的使用寿命、降低成本特别是提高直流供电系统的可靠性至关重要。鉴于上述情况,我们研制了蓄电池组充
[电源管理]
基于CAN<font color='red'>总线</font>的蓄电池组充放电集散<font color='red'>控制</font>系统的设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved