S3C2440IIC中断方式

发布者:Qianfeng最新更新时间:2016-04-18 来源: eefocus关键字:S3C2440  IIC  中断方式 手机看文章 扫描二维码
随时随地手机看文章
  1. #include   
  2. #include "2440addr.h"  
  3. #include "2440lib.h"  
  4. #include "Option.h"  
  5. #include "def.h"  
  6.   
  7. int flag;   //中断标志(在中断子程序里清零,即未中断flag=1,中断后flag=0)  
  8.   
  9. void __irq IicInt(void);   
  10. void Wr24C02(U32 slvAddr,U32 addr,U8 data);       
  11. void Rd24C02(U32 slvAddr,U32 addr,U8 *data);      
  12.   
  13. void Main(void)  
  14. {  
  15.     unsigned int i,j;  
  16.     static U8 data[256];    //用于存储AT24C02读出的数据  
  17.       
  18.     SelectFclk(2);  //设置系统时钟 400M       
  19.     ChangeClockDivider(2, 1);      //设置分频 1:4:8  
  20.     CalcBusClk();           //计算总线频率  
  21.       
  22.     rGPHCON &=~((3<<4)|(3<<6));     
  23.     rGPHCON |=(2<<4)|(2<<6);    //GPH2--TXD[0];GPH3--RXD[0]     
  24.         
  25.     rGPHUP=0x00;        //使能上拉功能  
  26.           
  27.     Uart_Init(0,115200);  
  28.     Uart_Select(0);  
  29.       
  30.     Uart_Printf("[ IIC Test(Polling) using AT24C020 ]\n");  
  31.   
  32.     rGPEUP  |= 0xc000;                 //关上拉  
  33.       
  34.     rGPECON &= ~0xf0000000;  
  35.     rGPECON |= 0xa0000000;       //GPE15:IICSDA , GPE14:IICSCL    
  36.       
  37.     pISR_IIC=(unsigned)IicInt;  //设置中断程序地址  
  38.     rINTMSK &=~(BIT_IIC);   //开中断源    
  39.   
  40.     //使能应答, IIC总线时钟IICCLK=PCLK/16, 使能中断, 发送时钟IICCLK/16  
  41.     rIICCON  = (1<<7) | (0<<6) | (1<<5) | (0xf);  
  42.   
  43.     rIICADD  = 0x10;            //2440 从机地址 = [7:1]  
  44.     rIICSTAT = 0x10;            //IIC总线数据输出使能(Rx/Tx)  
  45.       
  46.     Uart_Printf("Write test data into AT24C02\n");  
  47.   
  48.     for(i=0;i<256;i++)  
  49.         Wr24C02(0xa0,(U8)i,i);//写入数据到AT24C02  
  50.           
  51.     for(i=0;i<256;i++)   //数组数据清零  
  52.         data[i] = 0;  
  53.   
  54.     Uart_Printf("Read test data from AT24C02\n");  
  55.     for(i=0;i<256;i++)  
  56.         Rd24C02(0xa0,(U8)i,&(data[i]));//读取AT24C02的数据放入data数组中  
  57.   
  58.     for(i=0;i<16;i++)  
  59.     {  
  60.         for(j=0;j<16;j++)  
  61.             Uart_Printf("%2x ",data[i*16+j]); //打印从AT24C02读出的数据  
  62.         Uart_Printf("\n");  
  63.     }     
  64. }  
  65.   
  66. void Wr24C02(U32 slvAddr, U32 addr, U8 data)  
  67. {  
  68.     flag=1;   
  69.     rIICDS = slvAddr;  //从器件地址写入数据移位寄存器  
  70.     rIICSTAT=0xf0;    //主发模式,产生起始信号,使能Rx/Tx  
  71.     rIICCON &=~0x10;  //清除Tx/Rx中断挂起标志  
  72.     while(flag==1)  //等待发送完成  
  73.     Delay(1);  
  74.           
  75.     flag=1;  
  76.     rIICDS = addr;  //写入存储字节的地址到数据移位寄存器  
  77.     rIICCON &=~0x10;  //清除Tx/Rx中断挂起标志  
  78.     while(flag==1)  //等待发送完成  
  79.     Delay(1);  
  80.       
  81.     flag=1;  
  82.     rIICDS = data;  //把要发送的数据写入数据移位寄存器  
  83.     rIICCON &=~0x10;  //清除Tx/Rx中断挂起标志  
  84.     while(flag==1)  //等待发送完成  
  85.     Delay(1);  
  86.           
  87.     rIICSTAT = 0xd0;    //禁止Rx/Tx  
  88.     rIICCON = 0xaf;     //Resumes IIC operation.   
  89.     Delay(1);  
  90. }  
  91.   
  92. void Rd24C02(U32 slvAddr, U32 addr, U8 *data)  
  93. {  
  94.     U8 temp;  
  95.     flag=1;  
  96.     rIICDS = slvAddr;  //从器件地址写入数据移位寄存器  
  97.     rIICSTAT=0xf0;    //主发模式,产生起始信号,使能Rx/Tx  
  98.     rIICCON &=~0x10;  //清除Tx/Rx中断挂起标志  
  99.     while(flag==1)  //等待发送完成  
  100.     Delay(1);  
  101.       
  102.     flag=1;  
  103.     rIICDS = addr;  //写入存储字节的地址到数据移位寄存器  
  104.     rIICCON &=~0x10;  //清除Tx/Rx中断挂起标志  
  105.     while(flag==1)  //等待发送完成  
  106.     Delay(1);  
  107.       
  108.     flag=1;  
  109.     rIICDS = slvAddr;     
  110.     rIICSTAT=0xb0;    //主接收模式,使能Rx/Tx  
  111.     rIICCON &=~0x10;  //清除Tx/Rx中断挂起标志  
  112.     while(flag==1)  //等待发送完成  
  113.     Delay(1);  
  114.       
  115.      //注意:读取下面这个字节必须进行,因为在发送带有读命令的从设备地址后,     
  116.     //AT24C02A会再返回一个从设备地址信息或从设备内存地址信息作为应答,所以  
  117.     //一定要把该字节读取后抛弃,因为它不是我们所要读取的信息;  
  118.     flag=1;  
  119.     temp=rIICDS;  
  120.     rIICCON &=~0x10;  //清除Tx/Rx中断挂起标志  
  121.     while(flag==1)  
  122.     Delay(1);  
  123.       
  124.     rIICCON=0x2f;   //Resumes IIC operation.禁止应答  
  125.     *data=rIICDS;  
  126.     Delay(1);  
  127.       
  128.     rIICSTAT = 0x90;                //Stop MasRx condition      
  129.     rIICCON  = 0xaf;                //Resumes IIC operation.     
  130.     Delay(1);                       //Wait until stop condtion is in effect.  
  131.  }  
  132.    
  133. void __irq IicInt(void)  
  134. {  
  135.     ClearPending(BIT_IIC);  
  136.     flag=0;  
  137. }  
关键字:S3C2440  IIC  中断方式 引用地址:S3C2440IIC中断方式

上一篇:s3c2410与s3c2440的部分细节区别整理
下一篇:S3C2440 IIC总线接口

推荐阅读最新更新时间:2024-03-16 14:50

S3C2440学习笔记五(2440slib.s源程序的分析)
以下程序是什么意思: 为啥这个文件是一堆的汇编代码,因为这里面涉及到了底层驱动,这里既是CPU的核心控制。涉及到了直接操作的寄存器和高速缓存,实际上和51的CPU是一回事,就是51可以干一件事,他就要干几十件事,没有强悍的架构和强大的寄存器和缓存团队,他就没法强悍!就跑400M吧,他为了效率加了cp15这个比较高速的协处理器,这个cp15的本质是数据处理中心。只有早期的PC机和现行的ARM还有这个东西,现在的PC机跑得非常快了,不需要CP15这类东西帮忙了。 补充一点是,CP15可以理解为MMU,它主要的工作是地址映射,也就是给CPU提供地址。SDRAM一般为32M或64M,但是对于32位的CPU,可以管理4G的空间。那么就把这个4
[单片机]
S3C2440定时器汇编程序
S3C2440定时器源程序如下: ;************口地址及数据符号化定义区********************** pWTCON EQU 0x53000000 pLOCKTIME EQU 0x4c000000 pCLKDIVN EQU 0x4c000014 pUPLLCON EQU 0x4c000008 pMPLLCON EQU 0x4c000004 pBWSCON EQU 0x48000000 pSRCPND EQU 0x4a000000 ;中断源悬挂寄存器地址 pINTPND EQU
[单片机]
S3C2440之SDRAM
前言 本文记录的是内存控制器如何访问SDRAM 测试程序:如果能成功访问SDRAM,就把LED点亮 一、思维导图 二、代码 关键代码 init.c(示例): #include S3C2440.h void sdram_init(void) { BWSCON = 0x22000000; BANKCON6 = 0x18001; BANKCON7 = 0x18001; REFRESH = 0x8404F5; BANKSIZE = 0xb1; MRSRB6 = 0x20; MRSRB7 = 0x20; } int sdram_test(void) { volat
[单片机]
<font color='red'>S3C2440</font>之SDRAM
最简单的s3c2440的UART功能测试
* 文件名称:UART.c * 实现功能:最基本的UART发送与接收 * 作者:无jianqi * 版本:1.0 #include 2440addr.h //包含2440相关寄存器的设置 #include def.h //四个LED对应GPB5.6.7.8。 #define LED1 5 #define LED2 6 #define LED3 7 #define LED4 8 #define BAUD 115200 //波特率 #define Bit(x) (1 x) //将某位置位 #define Output(x) (1 2*x) //将对应IO置为输出 #define LED_On(x) rGPBDAT=~Bit(x
[单片机]
单片机iic通信的工作原理简述
单片机IIC通信是指在单片机控制下,通过IIC总线进行的数据传输和通信。IIC通信是一种串行通信方式,通过SCL和SDA两个线路进行数据传输,SCL线路是时钟线,SDA线路是数据线。IIC通信协议采用主从式通信,主设备发出请求,从设备响应请求,从设备返回数据,主设备接收数据,通信过程中主从设备的角色可以互换。 IIC通信分为两种模式:传输模式和寄存器访问模式,其中传输模式是指数据的传输,寄存器访问模式是指对设备的寄存器进行读写操作。在传输模式中,主设备发出开始信号,从设备接收到开始信号后,开始等待数据的接收。主设备发送数据时,从设备按位接收数据,接收完数据后,从设备发送应答信号。主设备接收到应答信号后,继续发送数据,直到发送完
[单片机]
单片机<font color='red'>iic</font>通信的工作原理简述
S3C2440时钟设置详解
S3C2440A中的时钟控制逻辑可以产生必须的时钟信号,包括CPU的FCLK,AHB总线外设的HCLK以及APB总线外设的PCLK。S3C2440A包含两个锁相环(PLL):一个提供给FCLK、HCLK和PCLK,另一个专用于USB模块(48MHz)。时钟控制逻辑可以不使用PLL来减慢时钟,并且可以由软件连接或断开各外设模块的时钟,以降低功耗。 S3C2440A的主时钟源由外部时钟(EXTCLK)或者外部晶振(XTIPll)提供,输入时钟源由模式控制引脚OM3和OM2控制选择,在复位信号的上升沿参考OM3和OM2的引脚将OM 的状态在内部锁定,如图1所示 图1 引导启动时的时钟源选择 选择不同输入时钟源时连接方式
[单片机]
<font color='red'>S3C2440</font>时钟设置详解
stm32硬件i2c stm32硬件iic缺陷如何解决
STM32单片机具有IIC接口,IIC接口具有多主机功能、主设备功能、C地址检测、产生和检测7位/10位地址和广播呼叫和支持不同的通讯速度。 STM硬件I2C的状态标签如下: 发送器/接收器模式标志、字节发送结束标志、中先忙标志、错误标志 STM硬件有9个寄存器。 STM32硬件I2C的CLK在50kHz及以下情况下工作,短时间内不会出现任何情况下的卡住。 STM32硬件I2C的CLK在常用的100kHz和400kHz下工作,一小时内大概率出现卡住现象。 STM32硬件I2C的CLK在任何频率下工作,在读取或发送数据时不允许有其他中断事件干扰,否则将有卡住现象。 总的来说,STM32硬件I2C是个坑,对正常工作的环境要求非常高
[单片机]
51单片机STC89C52 iic
SCL BIT P2.1 SDA BIT P2.0 ORG 0000H LJMP MAIN ORG 0050H MAIN: MOV SP,#30H MOV P1,#0FFH ;灭LED MOV R6,#2 ;R6保存AT24C02内部待写地址,用于传递参数 MOV R7,#55H ;R7保存待写数据,用于传递参数 LCALL iic_Write ;调用写函数,将R7的数据写入AT24C02 R6所指地址 LCALL DELAY10MS ;延时 MOV R6,#2 ;R6保存AT24C02内部待读地址,用于给读函数传递参数 LCALL iic_Read ;调用读函数 MOV
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved