登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

ARM2214的I2C接at24c1024问题????

作者:andreas168 栏目:ARM技术
ARM2214的I2C接AT24C1024.html">AT24C1024问题????
我以前购买的是EASYARM2104的开发板,上面有I2C接24C02的代码,但我现在的项目中要使用AT24C1024,必须在读写时写入16位的数据地址,我对
void  __irq  IRQ_I2C(void) 这段代码理解不够,所以不知道如何修改,请各位大侠帮忙。谢谢。  QQ:359473028。



/****************************************************************************
* File:I2CINT.C
* 功能:使用硬件I2C对E2PROM进行操作,利用中断方式操作。
* 说明:将跳线器JP8_LED1、JP12短接。
****************************************************************************/
#include  "config.h"

#define   CSI24WC02 0xA0            /* 定义器件地址 */

#define      LED1CON    0x00000400        /* P0.10引脚控制LED1,低电平点亮 */


/* 以下为I2C操作时所需要的变量,在调用I2C子程序前要设置好这些变量 */
volatile  uint8  I2C_sla;           // 从机地址
volatile  uint8  I2C_suba;          // 子地址
volatile  uint8  *I2C_buf;          // 数据缓冲区指针 (读操作时会被更改)
volatile  uint8  I2C_num;           // 操作数据个数 (会被更改)
volatile  uint8  I2C_end;           // 操作结束标志,为1时表示操作结束,为0xFF时表示操作失败 (会被设置)
volatile  uint8  I2C_suba_en;       // 子地址使能控制,读操作时请设置为1,写操作时请设置为2 (会被更改)



/****************************************************************************
* 名称:IRQ_I2C()
* 功能:I2C中断,通过判断I2C状态字进行相应的操作。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  __irq  IRQ_I2C(void)
{  uint8  sta;

   sta = I2STAT;                    // 读出I2C状态字
   SWITCH(sta)
   {  case  0x08:                   // 己发送起始条件
            if(1==I2C_suba_en) I2DAT = I2C_sla&0xFE;    // 指定子地址读时,先写入地址
              else I2DAT = I2C_sla;                     // 否则直接发送从机地址
            I2CONCLR = 0x28;        // SI=0
            break;
            
      case  0x10:
            I2DAT = I2C_sla;        // 重启动总线后,发送从地址
            I2CONCLR = 0x28;        // SI=0
            break;
   
      case  0x18:                   // 已发送SLA+W,并已接收应答
            if(0==I2C_suba_en)      // 无子地址,则直接发送数据
            {  if(I2C_num>0)
               {  I2DAT = *I2C_buf++;
                  I2CONCLR = 0x28;
                  I2C_num--;
               }
               else
               {  I2CONSET = 0x10;  // 无数据发送,结束总线
                  I2CONCLR = 0x28;
                  I2C_end = 1;      // 设置总线操作结束标志
               }
               break;
            }
            if(1==I2C_suba_en)      // 发送子地址
            {  I2DAT = I2C_suba;
               I2CONCLR = 0x28;
            }
            if(2==I2C_suba_en)
            {  I2DAT = I2C_suba;
               I2CONCLR = 0x28;
               I2C_suba_en = 0;     // 子地址己处理
            }
            break;
            
      case  0x28:                   // 已发送I2C数据,并接收到应答
            if(0==I2C_suba_en)      // 无子地址,则直接发送数据
            {  if(I2C_num>0)
               {  I2DAT = *I2C_buf++;
                  I2CONCLR = 0x28;
                  I2C_num--;
               }
               else
               {  I2CONSET = 0x10;  // 无数据发送,结束总线
参与讨论
昵称:
讨论内容:
 
 
相关帖子
LPC2210开发板的SPI1做从机中断方式接收数据的问题
请问zlg网站那里有ucos-II在lpc系列arm上的移植代码下载
设计与选型的疑惑
SmartARM2200上的LCM_Disp程序修改后运行问题
求助magicARM2200用的芯片是2290中relinchip烧写后就无法烧写了
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号