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

📄 common.c

📁 AT91fr40162的FLASH读写程序
💻 C
📖 第 1 页 / 共 3 页
字号:
// Include Standard LIB  files 
#include "dtm_v3.h"
#include "dtm.h"
#include "externdef.h"
#include <stdio.h>


void Power(int iOnOff);
void Initialize(void);
void InitCPLD(void);
_BYTE InitGlobalVar(void);
_BYTE SelfCheckExtRAM(void);
_BYTE SelfCheck(void);
void Beep(_BYTE cCount);
void Sound(_BYTE cSoundID);
void LEDGreen(_BYTE cStatus,_BYTE cTime);
void LEDRed(_BYTE cStatus,_BYTE cTime);
void SoundOnOff(_BYTE cStatus);
void Delayms(_DWORD dwTime);
void Delays(_DWORD dwTime);
void DelayMCK4(_DWORD dwTime);
void Delay10us(_DWORD dwTime);
void PowerOnRecovery(void);
void DisplayCardInfo(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo,_BYTE cWait,_BYTE cDetail);
void BIEFToDCB(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo,struct StruDCB *spDCB);
_BYTE CheckUsableDBC(_BYTE *cDCBItem);
_BYTE AllocateOrFreeDCB(_BYTE cDCBSeq,_BYTE cTag);
_BYTE CoachLogin(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo);
_BYTE CoachLogout(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo);
_BYTE DriverLogin(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo);
_BYTE DriverLogout(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo);
_BYTE DriverTmpLogout(void);
_BYTE BuildOneLogFormOneDCB(_BYTE cDCBSeq,_BYTE cEst,struct StruLOGPOOL cpLogBuf[]);
_BYTE BuildOneLog(_BYTE cDCBSeq,_DWORD dwMile,_WORD wTime,_BYTE cEst,_BYTE cTag,struct StruLOGPOOL *cpLogBuf);
void LogCompress(_BYTE * cpBuf,_BYTE cDCBSeq,_BYTE cTag,_BYTE cEst);
void MergeDCBCDTISmallInfo(_BYTE cDCBSeq,_BYTE cMergeType);
void MergeDCBTrainInfo(_BYTE cDCBSeq);
_BYTE WriteLogToCoachIC(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo);
_BYTE WriteLogToDriverIC(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo,_BYTE cDCBSeq,struct StruLOGPOOL cpLogBuf[]);
_BYTE AskForCoachLogout(_BYTE cType,_BYTE cDCBSeq);
_BYTE DriverLogined(SBIEF_1 *sBIEFBaseInfo);
void GetCDTI(_BYTE cDCBSeq);
_BYTE SetCDTI(_BYTE cDCBSeq);
void ClearDCBT(void);
_BYTE ClearDAT(void);
_WORD GetHZOffset(_WORD wHZCode);
_BYTE RebuildDCBT(void);
void GetCurTimeTxt(_BYTE  * cpBuf);
void RefreshClock(void);
void DispTrainingInfo(void);
void RefreshTrainingInfo(void);
_DWORD ByteToLong(_BYTE *cpBuf,_BYTE cLen,_BYTE bASCII);
void TimeMileToString(_DWORD dwTimeOrMile,_BYTE cSecond,_BYTE  *cpBuf,_BYTE cMode);
void  LongToString(_DWORD dwLong,_BYTE  *cpBuf,_BYTE cLen);
void  LongToHEX(_DWORD dwLong,_BYTE  *cpBuf,_BYTE cLen);
_BYTE VerifyDriverFinger(_BYTE cDCBSeq);
_BYTE CheckDCB(_BYTE cDCBSeq);
_BYTE SetStatus(_BYTE cStatus);
void Setup(_BYTE cCardFlag,_BYTE cQuery);
_BYTE CheckDateTime(struct StruCLOCK sClock);
void Query(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfof);
void QueryKeyProcess(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo);
_BYTE Crc8(_WORD wLength,_BYTE *cpCrcBuf);
void InitValForTraining(void);
_BYTE DecideTrainType(_WORD wCyclePluse,_BYTE cCycleSecond,_WORD wCycleMaxRunPluse,_BYTE cCycleMaxRunTime);
_DWORD Random(_DWORD dwRange);
void Trim(_BYTE * cpBuf,_DWORD dwLen);
_BYTE CheckAdmin(_BYTE *cCardType);
_BYTE SelfCheckRAM(_BYTE cStatus);


//**********************************************
//打开或关闭电源
//**********************************************
void Power(int iOnOff)
{
	if (iOnOff ==ON) { 
	 	MY_PIO_PER  = EXTPWD;
		MY_PIO_OER  = EXTPWD;
 		MY_PIO_SODR = EXTPWD;	
	   // gcpCPLDReg[3] |= CPLD_IC_PWREN;
	   // pCPLD[6] = gcpCPLDReg[3];	//IC_POWER=1
 	}	
 	else {
		MY_PIO_PER  = EXTPWD;
		MY_PIO_OER  = EXTPWD;
		MY_PIO_CODR = EXTPWD;
	   // gcpCPLDReg[3] &= ~CPLD_IC_PWREN;
	  //  pCPLD[6] = gcpCPLDReg[3];	//IC_POWER=0
	}	
}



//=================================================================
// 系统初始化程序
// 初始化定时器、计数器、DLS外部中断、里程传感器中断
//=================================================================
void Initialize(void)
{
   	_WORD i;
   	for (i=0;i<LENOFHZLIB;i++) {
      	gHZOffsetTable[i]=(i<=22?i*16:368+(i-23)*32);              //gCodeHZOffsetTable[i];
   	}
   	gFontBuf = (_BYTE*)(FLASH_BASE+0x48000+0x7c);
	gCodeHZCodeTable = (_WORD*)(FLASH_BASE+0x48000+0xeec);
	gcpWellcomIcon = (_BYTE*)(FLASH_BASE+0x48000+0xfea);
	cpHelp =  (_BYTE*)(FLASH_BASE+0x48000+0x13ea);
	SmallIcons = (_BYTE*)(FLASH_BASE+0x48000+0x4fea);
	LargeIcons = (_BYTE*)(FLASH_BASE+0x48000+0x534a);

	// 初始化PIO口
	MY_PS_PCER = PS_PIO_MASK;   	
	InitCPLD();
   	Usart_init();													// 串口初始化
	timer_init();
    DispLCDInit();													// 初始化液晶
   	ICPower(ON);
	BCTSetIO();														// 初始化BCT
    EXIRQ_open (AT91C_BASE_AIC);									//打开外部中断
    I2CInitVariable(SDA,SCL);
}

void InitCPLD(void)
{
	gcpCPLDReg[0] = 0x00;			// LCD_D[3..0] = 0
	gcpCPLDReg[1] = 0x00;			// LCD_D[7..4] = 2
	gcpCPLDReg[2] = 0x03; 			// LED_R(4.0) = 0 
									// LED_G(4.1) = 0
									// LCD_RS(4.2)= 0
									// LCD_E(4.3) = 0
	gcpCPLDReg[3] = 0x00; 			// LCD_BL(6.0)= 0
										// IC_PWREN(6.1)=0 Power Off
										// NOP(6.2)		=0
										// BEEP(6.3)    =0 Beep Off 

	gcpCPLDReg[4] = 0x00;			// IC_DATA(8.0) =0
										// IC_CLK(8.1)  =0
										// IC_RST(8.2)  =0
	gcpCPLDReg[5] = 0x01;			// A.0         = 0(CLK3579)  1(CPU) to IC_CLK
										// A.1         = 1(Write to IC_DATA)  0(三态)
	pCPLD[0] = gcpCPLDReg[0];
	pCPLD[2] = gcpCPLDReg[1];
	pCPLD[4] = gcpCPLDReg[2];
	pCPLD[6] = gcpCPLDReg[3];
	pCPLD[8] = gcpCPLDReg[4];
	pCPLD[0xA] = gcpCPLDReg[5];
	
}

//=================================================================
// 变量初始化,初始化全局变量
//=================================================================
_BYTE InitGlobalVar(void)
{
   	_WORD i;
   	_BYTE cRetCode;
   	cRetCode = FlashReadWriteSPB(&SPB,ICREAD);
   	CSI.cCurDCB = 0xff;
   	for (i=0;i<LENOFDCBT;i++) DCBT[i].cFlag=0x00;
   	CSI.cCurDCB=0xff;
	gcBackLightTime=0;                           			// LCD背光持续的时间(S),在每次点亮背光时设置
	gcBeepCount= 0;
	gcClockFreshFlag=0;                               		// 刷新时钟的标记
	gcDecimal = 0xff;                                   	//
	gcDispChanged=0;                                		// 指示显示是否变化的全局变量
	gcKeyUp = 0;                                     		// 按键是否按下的标记
	gcKeyDown = 0;
	gcKeyLongPress=0;                                		// 是否为长按键
	gcKeyPressA=3;                                  		// 键按下时间的阀值
	gcLEDRedLightTime = 0;
	gcLEDGreenLightTime = 0;
	gcMinterFresh = 0;                                    	// 刷新时钟的分钟时使用
	gcOpenBeep = 0;
	gcOpenLEDGreen = OFF;
	gcOpenLEDRed = OFF;
	gcpMBBuf[0] = 0x00;										// 最后一次采集的指纹模板
	gcpFlashBuf = (_BYTE *)0;								// 写FLASH时指向暂存FLASH数据的缓冲区指针
   	gcSeconds=0;
	gcSecondFresh = 0;                                    	// 刷新时钟的秒时使用
	gcTrainFreshFlag=0;                               		// 刷新训练信息的标记
	gcTrainFreshMile=0;                               		// 刷新训练里程信息的标记
	gcTrainFreshTime=0;                               		// 刷新训练时间信息的标记
	gcTrainFreshSecond=0;                             		// 刷新训练时间(秒)信息的标记
	gcTimeOfKeyPress=0;                              		// 长按键的时间
	gcLastKey1=0;                                    		// 前一按键
	gcLastKey2=0;
	gcLastKey3=0;
	gcVerifyCount=0;
   	gcValidSeconds=0;
	gcUpdateCDTI = 0;										// 更新CDTI到FLASH中的标记
	gCurDriverCount=0;
   	gwPluseMile=0;
   	gwRemainedPluse=0;
   	gwPluseAllow=0;
	gdwFlashLen = 0;
	gdwKeyNum=0x00;                             			// 当前按下按键的键值
   	return(C_OK);
}

//=================================================================
// 检查RAM
//=================================================================
_BYTE SelfCheckExtRAM(void)
{
	_BYTE  cRetCode;
   	// 检查RAM
   	cRetCode = TestRAM();
   	return(cRetCode);
}

//=================================================================
// 系统自检,检查RAM、指纹模块
// 自检成功返回C_OK
// 自检失败返回C_NOTOK
//=================================================================
_BYTE SelfCheckRAM(_BYTE cStatus)
{
   	_BYTE  cRetCode;
   	// 清显示内容
   	DispLCDClearScreen();
   	DispOutText(0,0,12,(_BYTE *)"   *系统自检*   ");
   	DispRefresh(0,0,2,VIDEOCOL,1);
   	if (cStatus==C_OK)
      	DispOutText(2,0,12,(_BYTE *)"  存储器1   正常 ");
   	else
      	DispOutText(2,0,12,(_BYTE *)"  存储器1   出错 ");
   	DispRefresh(2,0,2,VIDEOCOL,1);
	
	cRetCode = TestEEPROM1();
	if (cRetCode==C_OK)
      	DispOutText(4,0,12,(_BYTE *)"  存储器2   正常 ");
   	else   		
      	DispOutText(4,0,12,(_BYTE *)"  存储器2   出错 ");
   	DispRefresh(4,0,2,VIDEOCOL,1);
   	
   	cRetCode = TestEEPROM2();
	if (cRetCode==C_OK)
      	DispOutText(6,0,12,(_BYTE *)"  存储器3   正常 ");
   		else
   		    DispOutText(6,0,12,(_BYTE *)"  存储器3   出错 ");
   	DispRefresh(6,0,2,VIDEOCOL,1);
		
   	return(cRetCode);
}

//=================================================================
// 系统自检,检查RAM、指纹模块
// 自检成功返回C_OK
// 自检失败返回C_NOTOK
//=================================================================
_BYTE SelfCheck(void)
{
   	_BYTE  cRetCode;
   	// 清显示内容
   	DispLCDClearScreen();
   	DispOutText(0,0,12,(_BYTE *)"   *系统自检*   ");
   	DispRefresh(0,0,2,VIDEOCOL,1);
   	cRetCode = TestICcard();
   	if (cRetCode==C_OK)
      	DispOutText(2,0,9,(_BYTE *)"  卡   正常 ");
   	else
      	DispOutText(2,0,9,(_BYTE *)"  卡   出错 ");
   	DispRefresh(2,0,2,VIDEOCOL,1);

   	cRetCode = C_OK;
   	// 检查BCT指纹模块
	cRetCode = BCTOpen();
   	if (cRetCode!=C_OK) {
      	DispOutText(4,0,19,(_BYTE *)"  指纹模块 出错 ");
      	cRetCode=C_NOTOK;
   	}
   	else
      	DispOutText(4,0,10,(_BYTE *)"  指纹模块 正常 ");
   	DispRefresh(4,0,2,VIDEOCOL,1);

   	// 显示自检结果
   	if (cRetCode==C_OK)
      	DispOutText(6,0,12,(_BYTE *)"    系统正常    ");
   	else
      	DispOutText(6,0,12,(_BYTE *)"    系统出错    ");
   	DispRefresh(6,0,2,VIDEOCOL,1);
   	return(cRetCode);
}


//=================================================================
// 使蜂鸣器发声-1声
//=================================================================
void Beep(_BYTE cCount)
{
   	gcOpenBeep =ON;
  	gcBeepCount =cCount;
}


void Sound(_BYTE cSoundID)
{
	int i;
   	switch(cSoundID) {
      	case S_FingerDown:
			for (i=0;i<4;i++) {
	         	SoundOnOff(ON);
    	     	Delayms(20);
        	 	SoundOnOff(OFF);
         		Delayms(20);
			}         	
         	break;

      	case S_OperateFail:
         	Beep(6);
         	break;
   	}

⌨️ 快捷键说明

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