⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eeprom.c

📁 这是mpc860 iic总线下eeprom芯片AT24C64的驱动源代码
💻 C
字号:
#include <stdio.h>
#include <string.h>


#define WRITE_AT24C64_ADDR    0xa0
#define READ_AT24C64_ADDR     0xa1
#define MAX_BYTES_ONETIME     32

extern _VOID ppc860I2C_Init();
extern _ULONG32 I2CSend( _UCHAR8 *buffer, _USHORT16 length );
extern _ULONG32 I2CSendStartTwice( _UCHAR8 *ucFirstBuf,_UCHAR8 uclength1, _UCHAR8 *ucSecondBuf,_UCHAR8 uclength2);
extern _ULONG32  I2CReceive(_UCHAR8 *buffer, _USHORT16 *length);


_ULONG32 WriteEEPROM( _USHORT16 wAddr,_UCHAR8 pdatabuf[],_UCHAR8 length )
{
    _UCHAR8 ucBufferTemp[MAX_BYTES_ONETIME+3];
    _UCHAR8 i;
    
    ppc860I2C_Init();
    if( length > MAX_BYTES_ONETIME )
    {
        printf("\r\nEEPROM:Error! u want to write to AT24C64 over 32 bytes one time!");
        return OS_ERROR;
    }
      
    ucBufferTemp[0] = WRITE_AT24C64_ADDR;
    ucBufferTemp[1] = ( _UCHAR8 )( wAddr >>8 );
    ucBufferTemp[2] = ( _UCHAR8 )( wAddr );
    printf("\r\nEEPROM: U want to write addr %x%x",ucBufferTemp[1],ucBufferTemp[2]);
    for( i=0;i<length;i++ )
    {
        ucBufferTemp[i+3] = pdatabuf[i];
    }
    I2CSend( ucBufferTemp,length+3 );
    return OS_OK;
}

_ULONG32 ReadEEPROM( _USHORT16 wAddr,_UCHAR8 pdatabuf[],_USHORT16  length)
{
    _UCHAR8 ucBufferFirst[3];
    _UCHAR8 ucBufferSec[3];
    _UCHAR8 ucRcvBuffer[MAX_BYTES_ONETIME];
    _UCHAR8 i;
    
    ppc860I2C_Init();
    ucBufferFirst[0] = WRITE_AT24C64_ADDR;
    ucBufferFirst[1] = (_UCHAR8)(wAddr>>8);
    ucBufferFirst[2] = (_UCHAR8)wAddr;
    
    ucBufferSec[0] = READ_AT24C64_ADDR;
    for( i=0;i<length;i++)
    {
        ucBufferSec[i+1] = 0;
    }

    I2CSendStartTwice( ucBufferFirst, 3, ucBufferSec,(_UCHAR8)(length+1) );
    I2CReceive( ucRcvBuffer,&length);
    memcpy( ( void *)pdatabuf, ( void * )ucRcvBuffer, length);
    return OS_OK;
}

_VOID TestEEPROM()
{
    _UCHAR8 ucWriteAddr;
    _UCHAR8 ucWriteDataBuf[3];
    _UCHAR8 ucRcvDataBuf[3];

    ucWriteAddr = 0x40;
    ucWriteDataBuf[0] = 0x32;
    ucWriteDataBuf[1] = 0x54;
    ucWriteDataBuf[2] = 0x68;
    WriteEEPROM( ucWriteAddr,ucWriteDataBuf,3 );
    ReadEEPROM( ucWriteAddr,ucRcvDataBuf,3 );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -