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

📄 main.c

📁 ARMlpc2300技术笔记上册例程I2C读写FM24cl04
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			
** Modified date:		
** Version:				
** Descriptions:		使用硬件I2C对铁电存储器进行操作,利用中断方式操作。
**                      向FM24CL04中0x03地址写入100字节数据,并检验,如果检验成功则蜂鸣器响一下,否则不断报警
**                      
**                      铁电FM24CL04,封装和普通的E2PROM一致,读写方式和E2PROM均采用I2C总线,和E2PROM不同的是
**                      铁电存储器可以当成是RAM来使用,可以说是串行的RAM,可以随机的读写  
****************************************************************************/
#include  "config.h" 

#define   FM24CL04 0xA0            /* 定义器件地址,0xA0是一个页(256Byte),0xA1是另一个页(256Byte) */

#define	  BEEPCON	(1<<27)			

 uint8  data_buf[100];

/****************************************************************************
* 名称:I2C_Init
* 功能:主模式I2C初始化,包括初始化其管脚连接以及向量IRQ中断。
* 入口参数:fi2c		初始化I2C总线速率,最大值为400K
* 出口参数:无
****************************************************************************/
void  I2C_Init(uint32 fi2c)
{  if(fi2c>400000) fi2c = 400000;

   //PINSEL1 |= 0x05 << 22;								/* 设置I2C控制口有效,P0.27、P0.28	*/
   PINSEL1 = (PINSEL1 & ~(0xff << 22))|(  0x05 << 22 );  /* 设置I2C控制口有效,P0.27、P0.28	*/

   I2SCLH = (Fpclk/fi2c + 1) / 2;	// 设置I2C时钟为fi2c
   I2SCLL = (Fpclk/fi2c) / 2;
   I2CONCLR = 0x2C;
   I2CONSET = 0x40;					// 使能主I2C
   
   /* 设置I2C中断允许 */
	VICIntSelect = 0x00;				// 所有中断通道设置为IRQ中断		
	VICVectPri9 = 00;					// 设I2C中断最高优先级	
	VICVectAddr9 = (uint32)IRQ_I2C;	    // 设置中断服务程序地址					
	VICIntEnable = 1 << 0x09;			// 使能I2C中断
}


/****************************************************************************
* 名称:DelayNS
* 功能:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  DelayNS(uint32  dly)
{  uint32  i;

   for(; dly>0; dly--) 
      for(i=0; i<50000; i++);
}
	
	
/****************************************************************************
* 名称:WrErr
* 功能:读写出错蜂鸣报警。
* 入口参数:无
* 出口参数:无
****************************************************************************/	
void  WrErr(void)	
{  while(1)
   {  IO1SET = BEEPCON;
      DelayNS(3);
      IO1CLR = BEEPCON;
      DelayNS(3);
   }
}
			

/****************************************************************************
* 名称:main
* 功能:向FM随机的地址写入100字节数据(注意E2PROM不支持这种操作),然后读出判断是否正确写入。
* 说明:在CONFIG.H文件中包含I2CINT.H。
****************************************************************************/
int  main(void)
{  uint8  i;
  
   PINSEL1 = 0x00000000;		
   IO1DIR = BEEPCON;
   IO1SET = BEEPCON;
   
   I2C_Init(50000);                      	// I2C初始化
   IRQEnable();
   
   for(i=0; i<100; i++) data_buf[i] = i;
   
	/* 往起始地址0x03开始写入100个数据,最后一个写入数据的地址为0x66*/
	I2C_WriteNByte(FM24CL04, ONE_BYTE_SUBA, 0x03, data_buf, 100);
	
	/* 清零数据缓冲区,防止出错	*/
	for (i=0; i<100; i++)
		data_buf[i] = 0;
	
	/* 从起始地址0x03读回刚才写入的100个数据 */
	I2C_ReadNByte(FM24CL04, ONE_BYTE_SUBA, 0x03, data_buf, 100);
  
   /* 校验读出的数据,若不正确则蜂鸣报警 */
   for(i=0; i<100; i++)
    {  
     if(data_buf[i]!=i) 
   	    WrErr();
    }

   IO1CLR = BEEPCON;
   DelayNS(30);
   IO1SET = BEEPCON;
   
   while(1);
   return(0);					
}

⌨️ 快捷键说明

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