S3C44BOX的I2C程序问题请教

[复制链接]
 楼主| zhenglixin 发表于 2007-5-20 18:49 | 显示全部楼层 |阅读模式
#include&nbsp;&quot;44B.h&quot;<br />typedef&nbsp;unsigned&nbsp;int&nbsp;unint16;<br /><br />/****************************************<br />函数名称:I2C_Init<br />功能说明:完成I2C操作之前的初始化<br />函数参数:<br />i2c_address:I2C设备地址(格式为00000000,最后一位不用)<br />mode:为1时设为master模式;为0时设为slave模式<br />****************************************/<br />void&nbsp;I2C_Init(int&nbsp;mode,int&nbsp;I2c_Address)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;rPCONF=rPCONF|0x00000A;/*配置GPIO口为I2C功能*/<br />&nbsp;&nbsp;&nbsp;&nbsp;rPUPF=rPUPF|0x03;/*禁止内部上拉电阻*/<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(I2c_Address!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rIICADD=I2c_Address;<br />&nbsp;&nbsp;&nbsp;&nbsp;rIICCON=0xEF;/*允许中断,允许ACK*/<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(mode==0)&nbsp;&nbsp;/*slave&nbsp;mode*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rIICSTAT=0x10;<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(mode==1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*master&nbsp;mode*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rIICSTAT=0x90;<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;I2C_Init&nbsp;error,check&nbsp;mode&nbsp;bit!&quot;);<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&nbsp;I2C_Operation(int&nbsp;*&nbsp;I2C_TxdBufferAddress,int&nbsp;*&nbsp;I2C_RxdBufferAddress,int&nbsp;I2C_TxdBufferSize,int&nbsp;I2C_RxdBufferSize,int&nbsp;I2C_ReadWrite,int&nbsp;I2C_Address)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;I2c_data=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;I2C_BufferSize;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(I2C_ReadWrite==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;rIICSTAT=rIICSTAT&0xBF;/*configure&nbsp;Master/receiver&nbsp;Mode*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2C_BufferSize=I2C_RxdBufferSize;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(I2C_ReadWrite==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;rIICSTAT=rIICSTAT&0xFF;/*configure&nbsp;Master/Transmitter&nbsp;Mode*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2C_BufferSize=I2C_TxdBufferSize;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;I2C_ReadWrite&nbsp;set&nbsp;error
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rIICDS=I2C_Address;/*write&nbsp;I2C&nbsp;address&nbsp;slave&nbsp;eeprom*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rIICSTAT=rIICSTAT|0x20;/*start&nbsp;generation*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(I2C_BufferSize!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(I2C_ReadWrite==1)/*receive*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{(*I2C_RxdBufferAddress)=((int)rIICDS);/*write&nbsp;data*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2C_RxdBufferAddress++;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{rIICDS=(unint16)(&I2C_TxdBufferAddress);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2C_TxdBufferAddress++;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rIICCON=rIICCON&0xEF;/*Clear&nbsp;pending&nbsp;bit*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while((rIICCON&0x10)!=0x10);/*wait&nbsp;for&nbsp;ack&nbsp;signal*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2C_BufferSize--;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rIICSTAT=rIICSTAT&0xDF;/*stop&nbsp;generation*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rIICCON=rIICCON&0xEF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while((rIICSTAT&0x06)!=0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />用以上程序来调试,I2C写不了数据到eeprom里面,操作的I2C设备为KS24C080
 楼主| zhenglixin 发表于 2007-5-20 18:51 | 显示全部楼层

小弟初学程序,请多指教

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

607

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部