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

📄 main.c

📁 SmartARM2400系列开发板全套资料
💻 C
字号:
/****************************************Copyright (c)****************************************************
**                         Guangzhou ZHIYUAN electronics Co.,LTD.                               
**                                     
**                               http://www.embedtools.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:
**
*********************************************************************************************************/
#include "main.h"


#define   CAT24C04 0xA4                                                 /* 定义器件地址,0xA4是一个页    */
                                                                        /* 0xA6是另一个页               */

#define	  BEEPCON	(1<<30)			

 uint8  data_buf[10];

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

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

   I2SCLH = (unsigned long)(Fpclk/fi2c + 1) / 2;						/* 设置I2C时钟为fi2c             */
   I2SCLL = (unsigned long)(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){  
      FIO3SET = BEEPCON;
      DelayNS(3);
      FIO3CLR = BEEPCON;
      DelayNS(3);
   }
}
			

/*********************************************************************************************************
* 名称:main
* 功能:向CAT24C04起始地址写入10字节数据,然后读出判断是否正确写入。
* 说明:在main.H文件中包含I2CINT.H。
**********************************************************************************************************/
int  main(void)
{  uint8  i;
  
   PINSEL7 = 0x00000000;		
   FIO3DIR = BEEPCON;
   FIO3SET = BEEPCON;
   
   I2C_Init(50000);                      	                            /* I2C初始化                     */
   IRQEnable();
   
   for(i=0; i<10; i++) data_buf[i] = i;
   
	
	I2C_WriteNByte(CAT24C04, ONE_BYTE_SUBA, 0x00, data_buf, 10);        /* 往起始地址0x00开始写入10个数据*/
	DelayNS(3);
	
	
	for (i=0; i<10; i++)                                                /* 清零数据缓冲区,防止出错      */
		data_buf[i] = 0;
	
	
	I2C_ReadNByte(CAT24C04, ONE_BYTE_SUBA, 0x00, data_buf, 10);         /* 从起始地址0x00读回刚才写入的  */
	                                                                    /* 10个数据                      */
  
  
   for(i=0; i<10; i++) {                                                /* 校验读出的数据                */
                                                                        /* 若不正确则蜂鸣报警            */
     if(data_buf[i]!=i) 
   	    WrErr();
    }

   FIO3CLR = BEEPCON;
   DelayNS(15);
   FIO3SET = BEEPCON;
   
   while(1);
   return(0);					
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

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