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

📄 s12_eets.c

📁 source code for a sample alarm control panel system using Freescale MC9S12DP256 . The project was im
💻 C
字号:
//=============================================================================
// File: S12_EETS.C - V1.00
// Rem.: The ACPRD Project Page on the Web -> http://hc12web.de/acprd
//=============================================================================

//-- Includes -----------------------------------------------------------------

#include "datatypes.h"
#include "hcs12dp256.h"
#include "s12_eets.h"

//-- Code ---------------------------------------------------------------------

void initEETS(void) {

	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;
	}

//=============================================================================

⌨️ 快捷键说明

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