|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
ARM2214的I2C接at24c1024问题???? |
作者:andreas168 栏目:ARM技术 |
我以前购买的是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; // 无数据发送,结束总线 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |