📄 backup_m04_c2.c
字号:
/****************************************************************************************************/
/* $Header :
/* AUTHOR : TC PUI
/* FILE NAME: BACKUP.C
/* PURPOSE : POWER CONTROL
/* MODEL : 2004 CIS 2-CH AMP
/* Copyright (c) 2004 Sony Corporation All Rights Reserved
/****************************************************************************************************/
#define _BACKUP_C
#include "_main_M04_C2.h"
/****************************************************************************************************/
/* Device Independent */
/****************************************************************************************************/
#define _EEPHIZ P0_EEP_DFLT
#define _EEPOUT (P0_EEP_DFLT + P0_EEPDAT)
#define EEPDIR DDR0.BYTE
#define EEPCLK P_SCL /* I2C clock line */
#define EEPDAT P_SDA /* I2C data line */
#define EEPCLK_0 (EEPCLK = 0) /*; _Wait(11) /* min 4.7usec */
#define EEPCLK_1 (EEPCLK = 1) /*; _Wait(9) /* min 4.0usec */
#define EEPDAT_0 (EEPDAT = 0) /*; _Wait(11) /* min 4.7usec */
#define EEPDAT_1 (EEPDAT = 1) /*; _Wait(9) /* min 4.0usec */
#define EEPDIR_H (EEPDIR=_EEPHIZ)
#define EEPDIR_L (EEPDIR=_EEPOUT)
/****************************************************************************************************/
/* local function prottype */
/****************************************************************************************************/
int BR24xxWriteAll(unsigned char data);
int BR24xxForceRead(unsigned char *data,unsigned int addr,unsigned int cunt);
int BR24xxRead(unsigned char *data,unsigned int addr,unsigned int cunt);
int BR24xxForceRead(unsigned char *data,unsigned int addr,unsigned int cunt);
int BR24xxWrite(unsigned char *data,unsigned int addr,unsigned int cunt);
int BR24xxForceWrite(unsigned char *data, unsigned int addr, unsigned int cunt);
int BR24xxSta(void);
int BR24xxStp(void);
int BR24xxAcc(unsigned char *data,unsigned char acko,unsigned char acki);
void _Wait(unsigned int n);
void RstBR24C16(void);
/****************************************************************************************************/
/* local define */
/****************************************************************************************************/
#define _EROM_TYPE _BR24C16
#define _TIME_LOOP 1
#define _TIME_OVER 512
#define _FILL_DATA 0x00
#define _TEST_DATA 0xa5
#define _TEST_CLAR 0x96
#define _FACT_DISP 0x0011
#define _FACT_HARD 0x0022
#define _FACT_TUNR 0x0033
#define _TEST_VER1 SOFT_VER
#define _screq bacup_screq /* search start request data */
#define _scunt bacup_scunt /* search counter */
#define _romaddr bacup_romaddr
#define _entry bacup_entry
#define _len bacup_len
#define _addr bacup_addr
#define _stat bacup_stat
#define _fail bacup_fail
#define _test bacup_test
#define _clar bacup_clar
#define _ver1 bacup_ver1
#define _ent1 bacup_ent1
#define _ent2 bacup_ent2
#define _clroff bacup_clroff
#define _dumy bacup_dumy
#define SYS bacup_syss
#define BUF bacup_buff
#define BLK bacup_block
/****************************************************************************************************/
/* EEPROM MAP */
/****************************************************************************************************/
/* PLEASE RE-CHECK the Memory Map!!! */
#define _SYS_ADD 0
#define _SYS_ENTRY_NUM 7
#define _SYS_ALL_LEN 16
/* W W A RRRR N N III N N GGGG */
/* W W A A R R NN N I NN N G */
/* W W W AAAAA RRRR N N N I N N N G GGGG */
/* W W W W A A R R N N N I N N N G GG */
/* W W A A R R N NN III N NN GGG G */
/* When Address change, ENT number also changed */
#define DUMY_SIZE 10
#define DUMY_ADD (_SYS_ALL_LEN - DUMY_SIZE) /* */
#define CLOF_ADD (DUMY_ADD - 1)
#define ENT2_ADD (CLOF_ADD - 1)
#define ENT1_ADD (ENT2_ADD - 1)
#define TEST_ADD (ENT1_ADD - 1)
#define CLEAR_ADD (TEST_ADD - 1)
#define VERS_ADD (CLEAR_ADD - 1)
#define DUMY_ENT (_SYS_ENTRY_NUM - 1)
#define CLOF_ENT (DUMY_ENT - 1)
#define ENT2_ENT (CLOF_ENT - 1)
#define ENT1_ENT (ENT2_ENT - 1)
#define TEST_ENT (ENT1_ENT- 1)
#define CLEAR_ENT (TEST_ENT - 1)
#define VERS_ENT (CLEAR_ENT - 1)
/* Block entery is use as Power Status with inhibit feature when not IR in trigger Power ON */
#define _BLK_ENTRY_NUM 1
#define _BLK_ADD (_SYS_ADD + _SYS_ALL_LEN)
#define _BLK_ALL_LEN 1
#define _MEM_ADD (_BLK_ADD + _BLK_ALL_LEN)
#define _MEM_ENTRY_NUM 2
#define _MEM_ALL_LEN 2
#define _SEARCH_ALL_LEN (_SYS_ALL_LEN+_BLK_ENTRY_NUM+_MEM_ALL_LEN)
/****************************************************************************************************/
/* State Code Define */
/****************************************************************************************************/
enum {
_BAC_SRCH = 0, /* Backup Memory Search State */
_BLK_SRCH, /* Block Memory Search State */
_SYS_SRCH, /* System Memory Search State */
_ALL_CLAR /* Memory All Clear State */
};
/****************************************************************************************************/
/* local variable type define */
/****************************************************************************************************/
typedef struct map {
unsigned char *addr; /* ram address */
unsigned char len; /* ram length */
} MAP_;
/****************************************************************************************************/
/* local variable */
/****************************************************************************************************/
unsigned int _screq; /* search start request data */
unsigned int _scunt; /* search counter (unit byte) */
unsigned int _romaddr;
unsigned int _addr;
unsigned int _entry;
unsigned int _len;
unsigned char _stat;
unsigned char _test;
unsigned char _clar;
unsigned char _ent1;
unsigned char _ent2;
unsigned char _fail;
unsigned char _ver1;
unsigned char _clroff;
unsigned char _dumy[9];
unsigned char SYS[_SYS_ALL_LEN];
unsigned char BLK[_BLK_ENTRY_NUM];
unsigned char BUF[_MEM_ALL_LEN];
unsigned int _page_numb;
unsigned int _page_leng;
unsigned char _sift_page;
unsigned char _sift_add1;
unsigned char _sift_add2;
unsigned char _mask_page;
unsigned char _mask_add1;
unsigned char _mask_add2;
struct EROM_ {
unsigned int page_numb;
unsigned int page_leng;
unsigned char sift_page;
unsigned char sift_add1;
unsigned char sift_add2;
unsigned char mask_page;
unsigned char mask_add1;
unsigned char mask_add2;
};
static const struct EROM_ EROM[16] = {
/* NUMB, LEN, SFTP, SFT1, SFT2, MSKP, MSK1, MSK2, */
{ 128/8 , 8, 6, 0, 0, 0x0e, 0x7f, 0x00,}, /* 0 _BR24C01 */
{ 256/8 , 8, 7, 0, 0, 0x0e, 0xff, 0x00,}, /* 1 _BR24C02 */
{ 512/16, 16, 7, 0, 0, 0x0e, 0xff, 0x00,}, /* 2 _BR24C04 */
{ 1024/16, 16, 7, 0, 0, 0x0e, 0xff, 0x00,}, /* 3 _BR24C08 */
{ 2048/16, 16, 7, 0, 0, 0x0e, 0xff, 0x00,}, /* 4 _BR24C16 */
{ 2048/16, 16, 10, 8, 0, 0x0e, 0x07, 0xff,}, /* 5 _BR24E16 */
{ 4096/32, 32, 11, 8, 0, 0x0e, 0x0f, 0xff,}, /* 6 _BR24C32 */
{ 8192/32, 32, 12, 8, 0, 0x0e, 0x1f, 0xff,}, /* 7 _BR24C64 */
{32768/32, 32, 14, 8, 0, 0x0e, 0x7f, 0xff,}, /* 8 _BR24C256 */
{ 128/8 , 8, 6, 0, 0, 0x0e, 0x7f, 0x00,}, /* 9 _BR24C01 */
{ 128/8 , 8, 6, 0, 0, 0x0e, 0x7f, 0x00,}, /* 10 _BR24C01 */
{ 128/8 , 8, 6, 0, 0, 0x0e, 0x7f, 0x00,}, /* 11 _BR24C01 */
{ 128/8 , 8, 6, 0, 0, 0x0e, 0x7f, 0x00,}, /* 12 _BR24C01 */
{ 128/8 , 8, 6, 0, 0, 0x0e, 0x7f, 0x00,}, /* 13 _BR24C01 */
{ 128/8 , 8, 6, 0, 0, 0x0e, 0x7f, 0x00,}, /* 14 _BR24C01 */
{ 128/8 , 8, 6, 0, 0, 0x0e, 0x7f, 0x00,}, /* 15 _BR24C01 */
};
/****************************************************************************************************/
/* System Memory Address Table */
/****************************************************************************************************/
static const MAP_ _SysAddr[_SYS_ENTRY_NUM] = {
{(unsigned char *)&_ver1, 1},/* 0 */
{(unsigned char *)&_clar, 1},/* 1 */
{(unsigned char *)&_test, 1},/* 2 */
{(unsigned char *)&_ent1, 1},/* 3 */
{(unsigned char *)&_ent2, 1},/* 4 */
{(unsigned char *)&_clroff, 1},/* 5 */
{(unsigned char *)&_dumy[0], 10},/* 6 */
};
/****************************************************************************************************/
/* Block Memory Address Table */
/****************************************************************************************************/
static const MAP_ _BlkAddr[_BLK_ENTRY_NUM] = {
{(unsigned char *)&Power.Flag, 1}, /* 0 */
};
/****************************************************************************************************/
/* Backup Memory Address Table */
/****************************************************************************************************/
static const MAP_ _BacAddr[_MEM_ENTRY_NUM] = {
{(unsigned char *)&E_VOL.SircsVolStep, 1}, /* 0 */
{(unsigned char *)&AU_DET.IRInput, 1}, /* 1 */
};
/****************************************************************************************************/
/* FUNCTION : BakInitialize
/* PURPOSE : Backup Initialize
/* INPUT : None
/* RETURN VALUE : None
/****************************************************************************************************/
void BakInitialize(void)
{
unsigned int i;
Bak.Init = 0;
Bak.Debg.Eror = 1;
Bak.Debg.Data = 0;
Bak.Debg.Addr = 0;
_screq = 0;
_scunt = 0;
_romaddr = 0;
_entry = 0;
_len = 0;
_addr = ~Bak.Debg.Addr;
_stat = _BAC_SRCH;
_test = _TEST_DATA;
_clar = _TEST_CLAR;
_ver1 = _TEST_VER1;
_ent1 = _BLK_ENTRY_NUM;
_ent2 = _MEM_ENTRY_NUM;
_fail = 0;
_clroff = _TEST_CLAR;
for(i=0;i<sizeof(_dumy);i++){ _dumy[i]= 0; }
for(i=0;i<_SYS_ALL_LEN;i++){ SYS[i] = 0; }
for(i=0;i<_BLK_ENTRY_NUM;i++){ BLK[i] = 0; }
for(i=0;i<_MEM_ALL_LEN;i++){ BUF[i] = 0; }
_page_numb = EROM[(_EROM_TYPE &0x0F)].page_numb;
_page_leng = EROM[(_EROM_TYPE &0x0F)].page_leng;
_sift_page = EROM[(_EROM_TYPE &0x0F)].sift_page;
_sift_add1 = EROM[(_EROM_TYPE &0x0F)].sift_add1;
_sift_add2 = EROM[(_EROM_TYPE &0x0F)].sift_add2;
_mask_page = EROM[(_EROM_TYPE &0x0F)].mask_page;
_mask_add1 = EROM[(_EROM_TYPE &0x0F)].mask_add1;
_mask_add2 = EROM[(_EROM_TYPE &0x0F)].mask_add2;
return;
}
/****************************************************************************************************/
/* FUNCTION : BakControl
/* PURPOSE : Backup Control
/* INPUT : None
/* RETURN VALUE : None
/****************************************************************************************************/
void BakControl(void)
{
unsigned int i, j, k, rest;
unsigned char CLR[32];
if (Bak.Wait) {
Bak.Wait = 0;
} else if (_stat == _BAC_SRCH) {
/* Common data backup */
for (i = 0; i < _TIME_LOOP; i++) {
if (_romaddr + _len < _MEM_ALL_LEN) {
if (BUF[_romaddr + _len] != _BacAddr[_entry].addr[_len]) {
if (_screq){
_scunt = CLEAR; /* data search counter */
}
Bak.Buzy = TRUE; /* for power & display module*/
if (BR24xxWrite(&_BacAddr[_entry].addr[_len], _MEM_ADD + _romaddr + _len, 1)) {
BUF[_romaddr + _len] = _BacAddr[_entry].addr[_len];
} else {
_fail = TRUE;
}
return;
} else {
if (_screq && (_scunt < _SEARCH_ALL_LEN)){
_scunt++;
}
_len++;
if (_len >= _BacAddr[_entry].len) {
_romaddr += _len;
_len = 0;
_entry++;
if (_entry >= _MEM_ENTRY_NUM) {
_entry = 0;
_romaddr = 0;
_stat = _BLK_SRCH;
break;
}
}
}
}
}
} else if (_stat == _BLK_SRCH) {
/* Block data backup */
for (i = 0; i < _TIME_LOOP; i++) {
if (_entry < _BLK_ENTRY_NUM) {
if (BLK[_entry] != 0) {
if (_screq){
_scunt = CLEAR; /* data search counter */
}
Bak.Buzy = TRUE; /* for power & display module*/
if (BR24xxWrite(_BlkAddr[_entry].addr, _BLK_ADD + _romaddr, _BlkAddr[_entry].len)) {
BLK[_entry] = 0;
} else {
_fail = TRUE;
}
return;
} else {
if (_screq && (_scunt < _SEARCH_ALL_LEN)){
_scunt++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -