/****************************************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: Chenxibing ** Modified date: 2005-01-14 ** Version: ** Descriptions: ** ********************************************************************************************************/ #include "config.h" #include "../I2C/I2CINT.h" #define CAT1025 0xA0 /* CAT1025器件从地址 */ #define BEEP 1 << 7 /* 蜂鸣器BEEP控制口,P0.7,低电平蜂鸣 */ /* ********************************************************************************************************* ** 函数名称 :DelayNS() ** 函数功能 :长软件延时 ** 入口参数 :dly 延时参数,值越大,延时越久 ** 出口参数 :无 ********************************************************************************************************* */ void DelayNS (uint32 dly) { uint32 i; for ( ; dly>0; dly--) for (i=0; i<50000; i++); } /* ********************************************************************************************************* ** 函数名称 :I2cInit() ** 函数功能 :I2C初始化 ** 入口参数 :Fi2c I2C总线频率(最大400K) ** 出口参数 :无 ********************************************************************************************************* */ void I2cInit(uint32 Fi2c) { if (Fi2c > 400000) Fi2c = 400000; //PINSEL0 = (PINSEL0 & 0xFFFFFF0F) | 0x50; /* 设置I2C控制口有效 */ PINSEL0 = (PINSEL0 & (~0xF0)) | 0x50; /* 不影响其它管脚连接 */ I2SCLH = (Fpclk/Fi2c + 1) / 2; /* 设定I2C时钟 */ I2SCLL = (Fpclk/Fi2c)/2; I2CONCLR = 0x2C; I2CONSET = 0x40; /* 使能主I2C */ /* 设置I2C中断允许 */ VICIntSelect = 0x00000000; /* 设置所有通道为IRQ中断 */ VICVectCntl0 = (0x20 | 0x09); /* I2C通道分配到IRQ slot0,最高优先级 */ VICVectAddr0 = (int32)IRQ_I2C; /* 设置I2C中断向量 */ VICIntEnable = (1 << 9); /* 使能I2C中断 */ } /* ********************************************************************************************************* ** 函数名称 :main() ** 函数功能 :往CAT1025写入10个数据,然后读回校验。 ** 正确的话蜂鸣器蜂鸣1声,否则连续蜂鸣。 ** 调试说明 : ********************************************************************************************************* */ int main (void) { uint8 i; uint8 data_buf[32]; PINSEL0 = 0x00000000; /* 设置管脚连接GPIO */ PINSEL1 = 0x00000000; IO0DIR = BEEP; /* 设置蜂鸣器控制口输出 */ IO0SET = BEEP; /* 先关闭蜂鸣器 */ IRQEnable(); /* 打开中断 */ I2cInit(400000); /* I2C初始化,100K */ for (i=0; i<10; i++) data_buf[i] = i + '0'; /* 数据0~9,转换成ASCII码 */ /* 往起始地址0x00开始写入10个数据 */ I2C_WriteNByte(CAT1025, ONE_BYTE_SUBA, 0x00, data_buf, 10); //I2C_WriteNByte(CAT24WC02, 0, 0x00, &i, 1); DelayNS(10); /* 清零数据缓冲区,防止出错 */ for (i=0; i<10; i++) data_buf[i] = 0; /* 读回刚才写入的数据 */ I2C_ReadNByte(CAT1025, ONE_BYTE_SUBA, 0x00, data_buf, 10); /* 判断读回的数据是否正确 */ for (i=0; i<10; i++) { if (data_buf[i] != (i + '0')) { while (1) { /* 出错,连续蜂鸣 */ IO0SET = BEEP; DelayNS(20); IO0CLR = BEEP; DelayNS(20); } } } /* 正确,蜂鸣一次 */ IO0CLR = BEEP; DelayNS(50); IO0SET = BEEP; while (1); return 0; } /********************************************************************************************************* ** End Of File ********************************************************************************************************/