?? s12_eets.c
字號:
//=============================================================================
// File: S12_EETS.C - V1.00
// Rem.: The ACPRD Project Page on the Web -> http://hc12web.de/acprd
//=============================================================================
//-- Includes -----------------------------------------------------------------
#include <hidef.h>
#include "mc9s12dg128.h"
#include "s12_eets.h"
//-- Code ---------------------------------------------------------------------
void EEPROM_Init(void) {
INITEE = 0x21;
ECLKDIV = EETS_ECLKDIV; // set EEPROM Clock Divider Register
}
//-----------------------------------------------------------------------------
INT8 wrSectEETS(UINT16 *dest, UINT16 *src) {
// check addr: must be aligned 32 bit
if((UINT16)dest & 0x0003) return -1;
// check if ECLKDIV was written
if((ECLKDIV & BM_EDIVLD) == 0) return -2;
// make sure error flags are reset
ESTAT = BM_PVIOL | BM_ACCERR;
// check if command buffer is ready
if((ESTAT & BM_CBEIF) == 0) return -3;
// check if sector is erased
if((*dest != 0xffff) || (*(dest+1) != 0xffff)) {
// no, go erase sector
*dest = *src;
ECMD = EETS_CMD_SERASE;
ESTAT = BM_CBEIF;
if(ESTAT & (BM_PVIOL | BM_ACCERR)) return -4;
while((ESTAT & BM_CBEIF) == 0) ;
}
// program 1st word
*dest = *src;
ECMD = EETS_CMD_PROGRAM;
ESTAT = BM_CBEIF;
if(ESTAT & (BM_PVIOL | BM_ACCERR)) return -5;
while((ESTAT & BM_CBEIF) == 0) ;
// program 2nd word
*(dest+1) = *(src+1);
ECMD = EETS_CMD_PROGRAM;
ESTAT = BM_CBEIF;
if(ESTAT & (BM_PVIOL | BM_ACCERR)) return -6;
while((ESTAT & BM_CCIF) == 0) ;
return 0;
}
//-----------------------------------------------------------------------------
INT8 writeItemEETS(UINT16 item_no, void *item) {
if(item_no >= EETS_MAX_SECTOR) return -7;
item_no = EETS_START + (item_no << 2);
return wrSectEETS((UINT16 *)item_no, (UINT16 *)item);
}
//-----------------------------------------------------------------------------
INT8 readItemEETS(UINT16 item_no, void *item) {
if(item_no >= EETS_MAX_SECTOR) return -7;
item_no = EETS_START + (item_no << 2);
*((UINT16 *)item) = *((UINT16 *)item_no);
*(((UINT16 *)item)+1) = *(((UINT16 *)item_no)+1);
return 0;
}
//=============================================================================
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -