/*******************************************************************************
------------Copyright (c) 2005 ~ 2016 Miartech. All Rights Reserved.------------
********************************************************************************
** Created By: C JY
** Created Date: 2016-07-05
** Descriptions: main.c
*******************************************************************************/
/*---------------------------------Include------------------------------------*/
#include "..\Include\main.h"
/*******************************************************************************
** Function Name:EEPROM_Start
** Input Parameters:None
** Output Parameters:None
** Description:Start Condition Of EEPROM's Operation Cycle
*******************************************************************************/
void EEPROM_Start(void)
{
EEPROM_SDA_HIGH;
EEPROM_SCK_HIGH;
Nop_N();
EEPROM_SDA_LOW;
Nop_N();
return;
}
/*******************************************************************************
** Function Name:EEPROM_Stop
** Input Parameters:None
** Output Parameters:None
** Implement:Stop Condition Of EEPROM's Operation Cycle
*******************************************************************************/
void EEPROM_Stop(void)
{
EEPROM_SDA_LOW;
EEPROM_SCK_HIGH;
Nop_N();
EEPROM_SDA_HIGH;
Nop_N();
return;
}
/*******************************************************************************
** Function Name:EEPROM_ACK
** Input Parameters:None
** Output Parameters:None
** Implement:Acknowledge Send To EEPROM After EEPROM Received Each Word.
*******************************************************************************/
void EEPROM_ACK(void)
{
EEPROM_SDA_LOW;
Nop_N();
EEPROM_SCK_HIGH;
Nop_N();
EEPROM_SCK_LOW;
return;
}
/*******************************************************************************
** Function Name: EEPROM_NoACK
** Input Parameters:None
** Output Parameters:None
** Implement:No Acknowledge Need to Send When Read the Data of Current Address
*******************************************************************************/
void EEPROM_NoACK(void)
{
EEPROM_SDA_HIGH;
Nop_N();
EEPROM_SCK_HIGH;
Nop_N();
EEPROM_SCK_LOW;
return;
}
/*******************************************************************************
** Function Name:EEPROM_Wirte
** Input Parameters:cData:The Data Need to Send
** Output Parameters:None
** Implement:Send Data Byte to EEPROM
*******************************************************************************/
void EEPROM_Wirte(BYTE cData)
{
BYTE cBit_Counter = 8;
BYTE cTmp_Data = 0;
do
{
cTmp_Data = cData;
EEPROM_SCK_LOW;
Nop_N();
if((cTmp_Data & 0x80) == 0x80)
{
EEPROM_SDA_HIGH;
}
else
{
EEPROM_SDA_LOW;
}
EEPROM_SCK_HIGH;
cTmp_Data = (cData << 1);
cData = cTmp_Data;
cBit_Counter--;
}
while(cBit_Counter > 0);
EEPROM_SCK_LOW;
return;
}
/*******************************************************************************
** Function Name:EEPROM_Read
** Input Parameters:None
** Output Parameters:cData:The Data Need to Read
** Implement:Read Data Byte From EEPROM
*******************************************************************************/
BYTE EEPROM_Read(void)
{
BYTE cData = 0;
BYTE cTmp_Data = 0;
BYTE cBit_Counter = 8;
#ifdef MCU_51CORE
EEPROM_SDA_HIGH;
#endif
#ifdef MCU_NECCORE
PM6 |= BIT1; //0 Out,1 In
#endif
do
{
EEPROM_SCK_LOW;
Nop_N();
EEPROM_SCK_HIGH;
Nop_N();
if(EEPROM_SDA_STATUS)
{
cData = (cData | 0x01);
}
else
{
cData = (cData & 0xfe);
}
if(cBit_Counter - 1)
{
cTmp_Data = (cData << 1);
cData = cTmp_Data;
}
cBit_Counter--;
}
while(cBit_Counter > 0);
#ifdef MCU_NECCORE
PM6 &= ~BIT1; //0 Out,1 In
#endif
return(cData);
}
/*******************************************************************************
** Function Name:EEPROM_Write_Data
** Input Parameters:cAddr:The Address of Data;cData:The Data Write to EEPROM
** Output Parameters:None
** Implement:Wirte Data to EEPROM
*******************************************************************************/
void EEPROM_Write_Data(WORD cAddr, BYTE cData)
{
BYTE cForCnt = 0;
BYTE cPage_Addr = 0;
for(cForCnt = 0 ; cForCnt < 5; cForCnt++)
{
if(EEPROM_TYPE > M2416)
{
cPage_Addr = (DEVICE_ADDR & 0x07);
}
else
{
cPage_Addr = ((BYTE)(cAddr >> 8) & 0x07);
}
cPage_Addr = (cPage_Addr << 1);
EEPROM_WP_LOW;
EEPROM_Start();
EEPROM_Wirte(AddrDevWr | cPage_Addr);
EEPROM_ACK();
if(EEPROM_TYPE > M2416)
{
EEPROM_Wirte((unsigned char)(cAddr >> 8));
EEPROM_ACK();
}
EEPROM_Wirte((unsigned char)(cAddr & 0x00FF));
EEPROM_ACK();
EEPROM_Wirte(cData);
EEPROM_ACK();
EEPROM_Stop();
TOOL_DelayMs(12);
EEPROM_WP_HIGH;
if(cData == EEPROM_Read_Data(cAddr))
{
return;
}
}
return;
}
/*******************************************************************************
** Function Name:EE_Read_From
** Input Parameters:cAddr:The Address of Data
** Output Parameters:cData:The Data Need to Read From EEPROM
** Implement:Read Data From EEPROM
*******************************************************************************/
BYTE EEPROM_Read_Data(WORD cAddr)
{
BYTE cForCnt = 0;
BYTE cData = 0;
BYTE cDataTmp = 0;
BYTE cPage_Addr = 0;
for(cForCnt = 0 ; cForCnt < 5; cForCnt++)
{
if(EEPROM_TYPE > M2416)
{
cPage_Addr = (DEVICE_ADDR & 0x07);
}
else
{
cPage_Addr = ((BYTE)(cAddr >> 8) & 0x07);
}
cPage_Addr = (cPage_Addr << 1);
EEPROM_Start();
EEPROM_Wirte(AddrDevWr | cPage_Addr);
EEPROM_ACK();
if(EEPROM_TYPE > M2416)
{
EEPROM_Wirte((unsigned char)(cAddr >> 8));
EEPROM_ACK();
}
EEPROM_Wirte((unsigned char)(cAddr & 0x00FF));
EEPROM_ACK();
EEPROM_Start();
EEPROM_Wirte(AddrDevRd | cPage_Addr);
EEPROM_ACK();
cData = EEPROM_Read();
EEPROM_SCK_LOW;
EEPROM_NoACK();
EEPROM_Stop();
if(EEPROM_TYPE > M2416)
{
cPage_Addr = (DEVICE_ADDR & 0x07);
}
else
{
cPage_Addr = ((BYTE)(cAddr >> 8) & 0x07);
}
cPage_Addr = (cPage_Addr << 1);
EEPROM_Start();
EEPROM_Wirte(AddrDevWr | cPage_Addr);
EEPROM_ACK();
if(EEPROM_TYPE > M2416)
{
EEPROM_Wirte((unsigned char)(cAddr >> 8));
EEPROM_ACK();
}
EEPROM_Wirte((unsigned char)(cAddr & 0x00FF));
EEPROM_ACK();
EEPROM_Start();
EEPROM_Wirte(AddrDevRd | cPage_Addr);
EEPROM_ACK();
cDataTmp = EEPROM_Read();
EEPROM_SCK_LOW;
EEPROM_NoACK();
EEPROM_Stop();
if(cData == cDataTmp)
{
return cData;
}
}
return(cData);
}
/*******************************************************************************
** End Of File **
*******************************************************************************/
评论0