打印

S3C44BOX的I2C程序问题请教

[复制链接]
1916|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhenglixin|  楼主 | 2007-5-20 18:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "44B.h"
typedef unsigned int unint16;

/****************************************
函数名称:I2C_Init
功能说明:完成I2C操作之前的初始化
函数参数:
i2c_address:I2C设备地址(格式为00000000,最后一位不用)
mode:为1时设为master模式;为0时设为slave模式
****************************************/
void I2C_Init(int mode,int I2c_Address)
{
    rPCONF=rPCONF|0x00000A;/*配置GPIO口为I2C功能*/
    rPUPF=rPUPF|0x03;/*禁止内部上拉电阻*/
    if (I2c_Address!=0)
             rIICADD=I2c_Address;
    rIICCON=0xEF;/*允许中断,允许ACK*/
    if (mode==0)  /*slave mode*/
          rIICSTAT=0x10;
    else if (mode==1)              /*master mode*/
          rIICSTAT=0x90;
    else
          printf("I2C_Init error,check mode bit!");
}

/*************************************************
函数名称:I2C_Operetion
功能说明:完成I2C读写操作
函数变量:
I2C_TxdBufferAddress:要传送的数据的起始地址
I2C_RxdBufferAddress:接受数据所放的起始地址
I2C_TxdBufferSize:要传送的数据的长度
I2C_RxdBufferSize:要接受的数据的长度
I2C_ReadWrite:为0时为发送模式;为1时为接收模式
I2C_Address:要操作的i2c设备的地址
*************************************************/

int I2C_Operation(int * I2C_TxdBufferAddress,int * I2C_RxdBufferAddress,int I2C_TxdBufferSize,int I2C_RxdBufferSize,int I2C_ReadWrite,int I2C_Address)
{
    int I2c_data=0;
    int I2C_BufferSize;

    if (I2C_ReadWrite==1)
           {   rIICSTAT=rIICSTAT&0xBF;/*configure Master/receiver Mode*/
           I2C_BufferSize=I2C_RxdBufferSize;}
    else if (I2C_ReadWrite==0)
         {  rIICSTAT=rIICSTAT&0xFF;/*configure Master/Transmitter Mode*/
           I2C_BufferSize=I2C_TxdBufferSize;}
    else
        printf("I2C_ReadWrite set error ");
           return;

           rIICDS=I2C_Address;/*write I2C address slave eeprom*/
              rIICSTAT=rIICSTAT|0x20;/*start generation*/

    while (I2C_BufferSize!=0)
             {
                 if (I2C_ReadWrite==1)/*receive*/
                {(*I2C_RxdBufferAddress)=((int)rIICDS);/*write data*/
                 I2C_RxdBufferAddress++;}
                 else
                     {rIICDS=(unint16)(&I2C_TxdBufferAddress);
                     I2C_TxdBufferAddress++;}
              rIICCON=rIICCON&0xEF;/*Clear pending bit*/
           while((rIICCON&0x10)!=0x10);/*wait for ack signal*/
              I2C_BufferSize--;  
         }

         rIICSTAT=rIICSTAT&0xDF;/*stop generation*/
               rIICCON=rIICCON&0xEF;
               while((rIICSTAT&0x06)!=0x00);     
}

用以上程序来调试,I2C写不了数据到eeprom里面,操作的I2C设备为KS24C080

相关帖子

沙发
zhenglixin|  楼主 | 2007-5-20 18:51 | 只看该作者

小弟初学程序,请多指教

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

607

帖子

1

粉丝