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

📄 fe2p_app.c

📁 NT68617源程序代码集合
💻 C
📖 第 1 页 / 共 2 页
字号:
	for (i = 0; i < 32; i++) Fe2pBuffer[RamOffset_ADC + i] = DEF_ADC_COLOR[i];
	for (i = 0; i < 160; i++)  {
		Fe2pBuffer[RamOffset_VGAMODE + i] = 0xFF;
		Fe2pBuffer[RamOffset_VGAMODE + 160 + i] = 0xFF;
		}
	Ptr = (SYSPAR *)(Fe2pBuffer + RamOffset_SYSPAR);
	*Ptr = DEF_SYSPAR;
}


/*
********************************************************************************
* 	函 数 名: LoadFlashToBuffer
* 	功能描述: 将FLASH中的值载入到缓冲区中
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void LoadFlashToBuffer(void)
{
	uint8 i, Start, End, valid[16];
	uint16 Addr;

//	搜寻非空区的起始位置,Start指向这个位置
	Addr = 0x1F0;	// 496
	Start = 0;
	for (i = 0; i < 16; i++) {
		Fe2p_PageRead(Addr, valid, 16);
		if (!IsAllFF(valid, 16)) {
			Start = i;
			break;
			}
		Addr += 512;
		}

//	搜寻非空区的结束位置,End指向的是非空区结束的下一个位置
	End = 16;
	Addr = ((uint16)Start << 9) + 0x1F0;
	for (i = Start; i < 16; i++) {
		Fe2p_PageRead(Addr, valid, 16);
		if (IsAllFF(valid, 16)) {
			End = i;
			break;
			}
		Addr += 512;
		}

//	从非空区结束的位置开始,向后搜寻最后一个有合法标志的存储区,并把数据读出来
//	如果没有任何合法的数据则装载默认的数据
	Addr = ((uint16)End << 9) + 507;
	for (i = End; i > Start; i--)  {
		Addr -= 512;
		Fe2p_PageRead(Addr, valid, 5);
		if (IsFlashSave(valid)) {
			Addr -= 507;
			Fe2p_PageRead(Addr, Fe2pBuffer, 512);
			return;
			}
		}
//	如果是全空的区域或者非全空,但是数据是非法的区域,那么将载入默认的数值
	LoadDefDataToBuffer();
}


/*
********************************************************************************
* 	函 数 名: SaveBufferToFlash
* 	功能描述: 将缓冲区的数据保存到FLASH当中
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void SaveBufferToFlash(void)
{
	uint8 i, Start, End, valid[16];
	uint16 Addr;

//	搜寻非空区的起始位置,Start指向这个位置
	Addr = 0x1F0;		// 496
	Start = 0;
	for (i = 0; i < 16; i++) {
		Fe2p_PageRead(Addr, valid, 16);
		if (!IsAllFF(valid, 16)) {
			Start = i;
			break;
			}
		Addr += 512;
		}

//	搜寻非空区的结束位置,End指向的是非空区结束的下一个位置
	End = 16;
	Addr = ((uint16)Start << 9) + 0x1F0;
	for (i = Start; i < 16; i++) {
		Fe2p_PageRead(Addr, valid, 16);
		if (IsAllFF(valid, 16)) {
			End = i;
			break;
			}
		Addr += 512;
		}

	if (End >= 16)  {
		// 如果Start = 0, 而End = 16那么,说明整个存储区都是满的,需要全部擦除
		if (!Start) {
			Fe2p_SectorErase(0x0000);
			Fe2p_SectorErase(0x1000);
			}
		End = 0x00;
		}
	
	Addr = ((uint16)End<<9);
	for (i = 0; i < 5; i++) Fe2pBuffer[507 + i] = SaveFlag[i];
	Fe2p_WriteEnable();
	Fe2p_PageWrite(Addr, (uint16)Fe2pBuffer, 256);
	Fe2p_WriteEnable();
	Fe2p_PageWrite(Addr + 256, (uint16)(Fe2pBuffer + 256), 256);
	if ((End % 8) == 0)  {
		if (Start && End == 8){
			Fe2p_WriteEnable();
			Fe2p_SectorErase(0x0000);
			}
		else if (Start > End && End == 0) {
			Fe2p_WriteEnable();
			Fe2p_SectorErase(0x1000);
			}
		}
}


/*
********************************************************************************
* 	函 数 名: LoadAllPar
* 	功能描述: 从FE2P中载入所有参数,不过EDID以及显示模式相关的参数除外
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void LoadAllPar(void)
{
	uint8 i;

	LoadSysPar(&SysPar);
	LoadAdcPar();
	
/*
================================================================================
=	载入与显示模式无关的参数,并且做容错处理
================================================================================
*/
	for (i = 0; i < GetSourceCount(); i++) {
		if (SysPar.InputSource == MenuSource[i]) break;
		}
	if (i >= GetSourceCount())  SysPar.InputSource = SOURCE_VGA;

	Language = SysPar.Osd_Attr & 0x0F;
	if (!(Language >= ENGLISH && Language <= RUSSIAN)) Language = DEF_LANGUAGE;
	AdjLanguage(HIDE, 0);

	if (!(SysPar.ColorTemp >= MIN_COLORTEMP && SysPar.ColorTemp <= MAX_COLORTEMP))
		SysPar.ColorTemp = DEF_COLORTEMP;

	if (!(SysPar.Osd_Timeout >= MIN_OSDTIMEOUT && SysPar.Osd_Timeout <= MAX_OSDTIMEOUT))
		SysPar.Osd_Timeout = DEF_OSDTIMEOUT;

	if (!(SysPar.PowerSaveTime >= MIN_POWERSAVETIME && SysPar.PowerSaveTime <= MAX_POWERSAVETIME))
		SysPar.PowerSaveTime = DEF_POWERSAVETIME;

	InputSource = SysPar.InputSource;
	LoadColorPar();
	
#if EN_ACEROSD
	#if EN_DDC_CI
		AdjDDC_CI(HIDE, 0);
	#endif
#endif
}



/*
********************************************************************************
* 	函 数 名: SaveAllPar
* 	功能描述: 保存所有的参数, 但是参数仅仅是保存到缓冲区当中
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void SaveAllPar(void)
{
	SetTimerEvent(EVENT_SAVEPAR, 0x00);
	SaveEdid();
	SaveSysPar();
	SaveAdcPar();
	SaveColorPar();
	SaveRelPar(ModePar.mode);
	ClearParAdjState();
}


/*
********************************************************************************
* 	函 数 名: IsAllFF
* 	功能描述: 判断整个数据块是不是都是0xFF
* 	输    入: buf	: 数据块的起始地址
*			  Len	: 数据块的大小
* 	返    回: 如果全是0xFF,那么返回1,否则返回0
********************************************************************************
*/
bit IsAllFF(uint8 *buf, uint8 Len)
{
	do{
		if (*(buf + (--Len)) != 0xFF) return 0;
		}while(Len);
	return 1;
}


/*
********************************************************************************
* 	函 数 名: IsFlashSave
* 	功能描述: 指定的地址开始的五个字节,是否是FLASH保存的标志
* 	输    入: Buf	: 地址指针
* 	返    回: 如果是,那么返回1,否则返回0
********************************************************************************
*/
bit IsFlashSave(uint8 *Buf)
{
	uint8 i;

	i = 5;
	do{
		--i;
		if (*(Buf+i) != SaveFlag[i]) return 0;
		}while(i);
	return 1;
}
/*
********************************************************************************
* 	函 数 名: LoadSysPar
* 	功能描述: 载入系统频繁变更的参数,这些参数压缩成51个字节,分成100个区域
*			  分别保存在SECTOR_SYSPAR起始的FE2P区域中
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void LoadSysPar(SYSPAR *Sys)
{
	SYSPAR *SysIdx;
	
	if (IsAllFF(Fe2pBuffer + RamOffset_SYSPAR, 32)) {
		*Sys = DEF_SYSPAR;
		
		}
	if (!IsFlashSave(Fe2pBuffer + 507)) {
		*Sys = DEF_SYSPAR;
		}

	SysIdx = (SYSPAR *)(Fe2pBuffer + RamOffset_SYSPAR);
	*Sys = *SysIdx;
}


/*
********************************************************************************
* 	函 数 名: SaveSysPar
* 	功能描述: 保存系统频繁变更的参数,这些参数压缩成51个字节,分成100个区域
*			  分别保存在SECTOR_SYSPAR起始的FE2P区域中
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void SaveSysPar(void)
{
	SYSPAR *SysIdx;

	if (!GetState_SYSPAR()) return;
	SysIdx = (SYSPAR *)(Fe2pBuffer + RamOffset_SYSPAR);
	*SysIdx = SysPar;
	SetTimerEvent(EVENT_WRITEFLASH, 0x0A);
	ClearState_SYSPAR();
}


/*
********************************************************************************
* 	函 数 名: LoadAdcPar
* 	功能描述: 载入ADC的参数
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void LoadAdcPar(void)
{
	ADCPAR *Adc;

	Adc = (ADCPAR *)(Fe2pBuffer + RamOffset_ADC);
	AdcPar = *Adc;
}


/*
********************************************************************************
* 	函 数 名: SaveAdcPar
* 	功能描述: 保存ADC的参数
* 	输    入: 无
* 	返    回: 无
********************************************************************************
*/
void SaveAdcPar(void)
{
	ADCPAR *Adc;

	if (!GetState_ADCPAR()) return;
	Adc = (ADCPAR *)(Fe2pBuffer + RamOffset_ADC);
	*Adc = AdcPar;
	SetTimerEvent(EVENT_WRITEFLASH, 0x0A);
	ClearState_ADCPAR();
}


/*
********************************************************************************
* 	函 数 名: LoadColorPar
* 	功能描述: 加载色温参数
* 	输    入: 无
* 	返    回: 无
*	注    意: 在调用这个函数以前,要先调用LoadSysPar
********************************************************************************
*/
void LoadColorPar(void)
{
	COLOR *Cor;

	Cor = (COLOR *)(Fe2pBuffer + RamOffset_COLOR + SysPar.ColorTemp * sizeof(COLOR));
	Color = *Cor;
}


/*
********************************************************************************
* 	函 数 名: SaveAdcPar
* 	功能描述: 保存色温参数
* 	输    入: 无
* 	返    回: 无
*	注    意: 在调用这个函数以前,要先调用LoadSysPar
********************************************************************************
*/
void SaveColorPar(void)
{
	COLOR *Cor;

	if (!GetState_COLOR()) return;
	Cor = (COLOR *)(Fe2pBuffer + RamOffset_COLOR + SysPar.ColorTemp * sizeof(COLOR));
	*Cor = Color;
	SetTimerEvent(EVENT_WRITEFLASH, 0x0A);
	ClearState_COLOR();
}

⌨️ 快捷键说明

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