打印

谁能帮我看一下这个I2C 页写函数是否能够实现??

[复制链接]
1325|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lacfg|  楼主 | 2013-6-15 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

//#define _HC_EEPROM    是否为双字节地址


#define MAX_ONE_PAGE 0x0f   一页的最大地址尾数
#define MAX_ADDRESS 0x0f   最大地址







void I2cPageWrite(unsigned int Address,unsigned int Length,unsigned char *Data_Handle)
{
        if(Length>(MAX_ADDRESS-Address+1))
        {
                I2c_State=NO_ENOUGH_ROM;
        }
        else
        {               
                while(Length>0)
                {
                        I2c_State=I2C_WRITTING;
                        I2cStart();
                        I2cSend(I2C_WRITE_COMMAND);
                        #ifdef _HC_EEPROM
                                I2cSend((unsigned char)(Address/256));
                        #endif
                        I2cSend((unsigned char)(Address%256));
                        do
                        {
                                I2cSend(*Data_Handle);
                                Length--;
                                Data_Handle++;
                                Address++;
                        }while(((Address&MAX_ONE_PAGE)!=0)&&(Length>0));                       
                        I2cStop();
                        I2cDelay();                       
                }       
                I2c_State=I2C_WRITE_OVER;
        }
}






void I2cPageRead(unsigned int Address,unsigned int Length,unsigned char *Data_Handle)
{
        if(Length>(MAX_ADDRESS-Address+1))
        {
                I2c_State=OVER_MAX_ROM;
        }
        else
        {               
                while(Length>0)
                {
                        I2c_State=I2C_READING;
                        I2cStart();
                        I2cSend(I2C_WRITE_COMMAND);
                        #ifdef _HC_EEPROM
                                I2cSend((unsigned char)(Address/256));
                        #endif
                        I2cSend((unsigned char)(Address%256));
                        I2cStart();
                        I2cSend(I2C_READ_COMMAND);
                        do
                        {
                                *Data_Handle=I2cRead();
                                Length--;                               
                                Data_Handle++;
                                Address++;
                                if(((Address&MAX_ONE_PAGE)!=0)&&(Length>0))
                                        I2cAck();
                                else
                                        I2cNoAck();
                        }while(((Address&MAX_ONE_PAGE)!=0)&&(Length>0));
                        I2cStop();                       
                }
                I2c_State=I2C_READ_OVER;
        }
}













相关帖子

沙发
lacfg|  楼主 | 2013-6-15 11:29 | 只看该作者
   连续读的时候需要考虑一页长度吗??

使用特权

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

本版积分规则

6

主题

15

帖子

1

粉丝