/****************************************Copyright (c)**************************************************** ** Guangzhou ZHIYUAN electronics Co.,LTD. ** ** http://www.embedtools.com ** **--------------File Info--------------------------------------------------------------------------------- ** File name: main.c ** Last modified Date: 2010-02-04 ** Last Version: V1.0 ** Descriptions: The main() function example template ** **-------------------------------------------------------------------------------------------------------- ** Created by: Lanwuqiang ** Created date: 2010-02-05 ** Version: V1.0 ** Descriptions: 添加用户应用程序 ** **-------------------------------------------------------------------------------------------------------- ** Modified by: ZhangNingbo ** Modified date: 2010-02-25 ** Version: V1.0 ** Descriptions: I2C读写CAT1025示例程序 ** **-------------------------------------------------------------------------------------------------------- ** Modified by: ** Modified date: ** Version: ** Descriptions: ** ** Rechecked by: *********************************************************************************************************/ #include "..\config.h" /********************************************************************************************************* 宏定义 *********************************************************************************************************/ #define BEEP (1ul << 7) #define BEEP_OFF() GPIO2DATA |= BEEP /* 蜂鸣器关 */ #define BEEP_ON() GPIO2DATA &=~BEEP /* 蜂鸣器开 */ #define CAT1025 0xA0 /* CAT1025器件从地址 */ /********************************************************************************************************* 全局变量 *********************************************************************************************************/ /********************************************************************************************************* ** Function name: myDelay ** Descriptions: 软件延时 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void myDelay (INT32U ulTime) { INT32U i; i = 0; while (ulTime--) { for (i = 0; i < 5000; i++); } } /********************************************************************************************************* ** Function name: i2cInit ** Descriptions: 主模式I2C初始化,包括初始化其管脚连接以及向量IRQ中断 ** input parameters: ulFi2c: 初始化I2C总线速率,最大值为400K ** Output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void i2cInit (INT32U ulFi2c) { if (ulFi2c > 400000) { ulFi2c = 400000; } /* * 使用I2C模块的时候,必须在外设复位寄存器PRESETCTRL中的I2C_RST_N位写1,取消外设复位 */ PRESETCTRL |= (0x01 << 1); /* 禁止复位I2C(必须) */ SYSAHBCLKCTRL |= (0x01 << 5); /* 打开i2c功能部件时钟 */ I2CSCLH = (FAHBCLK / ulFi2c + 1) / 2; /* 设置I2C时钟为fi2c */ I2CSCLL = (FAHBCLK / ulFi2c) / 2; I2CCONCLR = 0x2C; zyIsrSet(NVIC_I2C, (unsigned long)i2cIsr, PRIO_ONE); /* 设置I2C1中断优先级并使能中断*/ I2CCONSET = 0x40; /* 使能主I2C */ } /********************************************************************************************************* ** Function name: main ** Descriptions: 当硬件基于EasyCortex M3-1300开发板时,需要短接P0.4与SCL、P0.5与SDA,读取正确蜂鸣器 ** 只鸣叫一次,否则连续鸣叫。注意:使用I2C模块的时候,必须在外设复位寄存器PRESETCTRL ** 中的I2C_RST_N位写1,取消外设复位 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ int main (void) { INT8U Data_Buf[10]; INT32U i; targetInit(); /* 初始化目标板,切勿删除 */ pinInit(); /* 引脚初始化 */ SYSAHBCLKCTRL |= (1ul << 6); /* 打开GPIO功能部件时钟 */ GPIO2DIR |= BEEP; /* 设置P2.7为输出 */ i2cInit(100000); /* I2C初始化,100K */ for (i = 0; i < 10; i++) { /* 数据0~9,转换成ASCII码 */ Data_Buf[i] = i + '0'; } I2C_WriteNByte (CAT1025, ONE_BYTE_SUBA, 0x00, Data_Buf, 10); /* 往起始地址0x00开始写10个数据*/ myDelay(20); for (i = 0; i < 10; i++) { /* 清零数据缓冲区,防止出错 */ Data_Buf[i] = 0; } I2C_ReadNByte (CAT1025, ONE_BYTE_SUBA, 0x00, Data_Buf, 10); /* 读回刚才写入的数据 */ myDelay(20); /* * 出错,连续蜂鸣 */ for (i = 0; i < 10; i++) { if (Data_Buf[i] != (i + '0')) { while (1) { BEEP_ON(); myDelay(200); BEEP_OFF(); myDelay(200); } } } /* * 正确,蜂鸣一声 */ BEEP_ON(); myDelay(200); BEEP_OFF(); myDelay(200); while(1); } /********************************************************************************************************* End Of File *********************************************************************************************************/