#include "44B.h"<br />typedef unsigned int unint16;<br /><br />/****************************************<br />函数名称:I2C_Init<br />功能说明:完成I2C操作之前的初始化<br />函数参数:<br />i2c_address:I2C设备地址(格式为00000000,最后一位不用)<br />mode:为1时设为master模式;为0时设为slave模式<br />****************************************/<br />void I2C_Init(int mode,int I2c_Address)<br />{<br /> rPCONF=rPCONF|0x00000A;/*配置GPIO口为I2C功能*/<br /> rPUPF=rPUPF|0x03;/*禁止内部上拉电阻*/<br /> if (I2c_Address!=0)<br /> rIICADD=I2c_Address;<br /> rIICCON=0xEF;/*允许中断,允许ACK*/<br /> if (mode==0) /*slave mode*/<br /> rIICSTAT=0x10;<br /> else if (mode==1) /*master mode*/<br /> rIICSTAT=0x90;<br /> else<br /> printf("I2C_Init error,check mode bit!");<br />}<br /><br />/*************************************************<br />函数名称:I2C_Operetion<br />功能说明:完成I2C读写操作<br />函数变量:<br />I2C_TxdBufferAddress:要传送的数据的起始地址<br />I2C_RxdBufferAddress:接受数据所放的起始地址<br />I2C_TxdBufferSize:要传送的数据的长度<br />I2C_RxdBufferSize:要接受的数据的长度<br />I2C_ReadWrite:为0时为发送模式;为1时为接收模式<br />I2C_Address:要操作的i2c设备的地址<br />*************************************************/<br /><br />int I2C_Operation(int * I2C_TxdBufferAddress,int * I2C_RxdBufferAddress,int I2C_TxdBufferSize,int I2C_RxdBufferSize,int I2C_ReadWrite,int I2C_Address)<br />{<br /> int I2c_data=0;<br /> int I2C_BufferSize;<br /><br /> if (I2C_ReadWrite==1)<br /> { rIICSTAT=rIICSTAT&0xBF;/*configure Master/receiver Mode*/<br /> I2C_BufferSize=I2C_RxdBufferSize;}<br /> else if (I2C_ReadWrite==0)<br /> { rIICSTAT=rIICSTAT&0xFF;/*configure Master/Transmitter Mode*/<br /> I2C_BufferSize=I2C_TxdBufferSize;}<br /> else<br /> printf("I2C_ReadWrite set error
");<br /> return;<br /><br /> rIICDS=I2C_Address;/*write I2C address slave eeprom*/<br /> rIICSTAT=rIICSTAT|0x20;/*start generation*/<br /><br /> while (I2C_BufferSize!=0)<br /> {<br /> if (I2C_ReadWrite==1)/*receive*/<br /> {(*I2C_RxdBufferAddress)=((int)rIICDS);/*write data*/<br /> I2C_RxdBufferAddress++;}<br /> else<br /> {rIICDS=(unint16)(&I2C_TxdBufferAddress);<br /> I2C_TxdBufferAddress++;}<br /> rIICCON=rIICCON&0xEF;/*Clear pending bit*/<br /> while((rIICCON&0x10)!=0x10);/*wait for ack signal*/<br /> I2C_BufferSize--; <br /> }<br /><br /> rIICSTAT=rIICSTAT&0xDF;/*stop generation*/<br /> rIICCON=rIICCON&0xEF;<br /> while((rIICSTAT&0x06)!=0x00); <br />}<br /><br />用以上程序来调试,I2C写不了数据到eeprom里面,操作的I2C设备为KS24C080 |
|