⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csi24wc02.c

📁 Easyarm实验开发平台
💻 C
字号:
/****************************************************************************
* File:CSI24WC02.C
* 功能:使用LPC210x模拟EEPROM器件CSI24WC02。LPC210x具有硬件I2C接口,使用其从方式进行
*      I2C器件模拟,本例使用了256字节的RAM作为存储单元。
* 说明:将跳线器JP12断开,然后与主机连接。
****************************************************************************/
#include  "config.h" 

#define  CSI24WC02     0xA1             /* 定义从要地址,忽略通用地址 */

uint8   eeprom[256];                    /* 定义EEPROM存储单元,256字节 */
uint8   adrpoint;                       /* 定义EEPROM读写操作指针 */
uint8   slarv;                          /* 定义子地址接收标志,为1时表示己接收从机地址 */

/****************************************************************************
* 名称:IRQ_I2C()
* 功能:I2C中断服务函数,实规从机操作。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void   __irq IRQ_I2C(void)
{  uint8  sta;
   
   sta = I2STAT;                    // 取得I2C状态字
   sta &= 0xF8;
   switch(sta)
   {  case  0x60:                   // 接收到自身SLA+W
      case  0x68:   
            slarv = 0;
            I2CONSET = 0x04;
            break;
            
      case  0xA8:                   // 接收到SLA+R,或已发送数据并接收到ACK位。
      case  0xB0:
      case  0xB8:
            I2DAT = eeprom[adrpoint];
            adrpoint++;
            I2CONSET = 0x04;
            break;
            
      case  0x80:                   // 接收到数据
            if(0==slarv)
            {  adrpoint = I2DAT;
               slarv = 1;
            }
            else
            {  eeprom[adrpoint] = I2DAT;
               adrpoint++;
            }
            I2CONSET = 0x04;
            break;
            
      case  0xA0:                   // 已发送数据,并接收到非ACK
      case  0xC0:                   // 总线结束,或总线重新启动
      default:                      // 其它状态
            I2CONSET = 0x04;
   }
   
   I2CONCLR = 0x38;                 // 清除标I2C标志位,STA、STO、SI
   
   VICVectAddr = 0x00;   
}

/****************************************************************************
* 名称:main()
* 功能:初始化I2C口连接,并初始化向量中断控制器。 
****************************************************************************/
int  main(void)
{  adrpoint = 0;
   slarv = 0;
   
   PINSEL0 = 0x00000050;			// 设置I2C口连接
   PINSEL1 = 0x00000000;			// P0.16设置为EINT0
   
   I2ADR = CSI24WC02;               // 设置从机地址
   I2CONSET = 0x44;                 // I2C配置为从机模式
   
   VICIntSelect = 0x00000000;		// 设置所有通道为IRQ中断
   VICVectCntl0 = 0x29;				// I2C通道分配到IRQ slot 0
   VICVectAddr0 = (int)IRQ_I2C;	    // 设置I2C中断向量地址
   VICIntEnable = 0x00000200;		// 使能I2C中断
   
   while(1);						// 等待中断
   return(0);
}










⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -