?? flash.c
字號:
/**************************************************************************************************
* FILENAME
* flash.c
*
* VERSION
* 1.0
*
* DESCRIPTION
* This file contains the timer initial routine and timer ISR.
*
* DATA STRUCTURES
* None
*
* FUNCTIONS
* 1. Fun_flash_writepage()
* 2. Fun_flash_readpage()
* 3. Fun_wr_template()
* 4. Fun_rd_template()
* 5. Fun_del_template()
*
* HISTORY
* 10/28/2003 Ver 1.0 Created by Hank Ji
*
* REMARK
* None
*
*************************************************************************************************/
#include <stdio.h>
#include "740defs.h"
#define C_Flash
#include "ist.h"
/************************************************/
/* Name: Fun_flash_writepage */
/* In: page--要寫的頁數(shù) */
/* Out: None */
/* Description: */
/* 寫FLASH中的某頁 */
/************************************************/
void Fun_flash_writepage(uint16 page)
{
uint32 i;
/* write register */
Flash_Ctlreg1 = 0xaa;
Flash_Ctlreg2 = 0x55;
Flash_Ctlreg1 = 0xa0;
for(i=0;i<128;i++)
{
VPchar(Flash_baseaddr+page*128+i) = flash_buffer[i];
}
Fun_delay_1ms(15);
}
/************************************************/
/* Name: Fun_flash_readpage */
/* In: page--要讀的頁數(shù) */
/* Out: None */
/* Description: */
/* 讀碏LASH中的某頁 */
/************************************************/
void Fun_flash_readpage(uint16 page)
{
uint32 i;
for(i=0;i<128;i++)
{
flash_buffer[i] = VPchar(Flash_baseaddr+page*128+i);
}
}
/************************************************/
/* Name: Fun_wr_template */
/* In: UserNum: 要寫的用戶(1,2 or 3) */
/* pImageTemplate: 特征值存儲緩沖指針 */
/* Out: NONE */
/* Description: */
/* 寫某個用戶的指紋特征值 */
/************************************************/
void Fun_wr_template(uint8 UserNumber,uint8 *pImageTemplate)
{
uint16 num,page,i;
uint8 j;
uint32 y;
// uint8 temp_buffer[128];
Fun_rd_parameter();
start_wr:
for(i=0;i<16;i++)
{
if((flash_buffer[i]==0xff)||(flash_buffer[i]==UserNumber))
{
page = i;
flash_buffer[i] = UserNumber;
break;
}
}
num = MIN_template_size;
//write template to flash
for(i=0;i<32;i++)
{
if(num > 128)
{
for(j=0;j<128;j++)
{
flash_buffer[j] = pImageTemplate[i*128+j];
}
Fun_flash_writepage(MA_USER1_PAGE + page*32 + i);
}
else
{
for(j=0;j<num;j++)
{
flash_buffer[j] = pImageTemplate[i*128+j];
}
for(j=num;j<128;j++)
{
flash_buffer[j] = 0xff;
}
Fun_flash_writepage(MA_USER1_PAGE + page*32 + i);
break;
}
num = num - 128;
}
for(i=0;i<MIN_template_size;i++)
{
y = Flash_baseaddr + (MA_USER1_PAGE+page*32)*128;
if(pImageTemplate[i] != VPchar(y+i))
{
Fun_rd_parameter();
flash_buffer[page] = 0xaa;
Fun_wr_parameter();
goto start_wr;
}
}
//then write parameter to flash page 0
//end_wr:
Fun_rd_parameter();
flash_buffer[page] = UserNumber;
Fun_wr_parameter();
}
/************************************************/
/* Name: Fun_rd_template */
/* In: UserNum: 要讀的用戶(1,2 or 3) */
/* Out: pImageTemplate: 特征值存儲緩沖指針 */
/* Description: */
/* 讀某個用戶的指紋特征值 */
/************************************************/
void Fun_rd_template(uint8 UserNumber,uint8 *pImageTemplate)
{
uint16 page,i;
Fun_rd_parameter();
for(i=0;i<16;i++)
{
if(flash_buffer[i]==UserNumber)
{
page = i;
break;
}
}
for(i=0;i<MIN_template_size;i++)
{
pImageTemplate[i] = VPchar(Flash_baseaddr+(page*32+MA_USER1_PAGE)*128+i);
}
}
/************************************************/
/* Name: Fun_del_template */
/* In: UserNum -- 要刪除的用戶(1,2 or 3) */
/* Out: NONE */
/* Description: */
/* 刪除某個用戶 */
/************************************************/
void Fun_del_template(uint8 UserNumber)
{
uint8 i;
Fun_rd_parameter();
for(i=0;i<16;i++)
{
if(flash_buffer[i]==UserNumber)
{
flash_buffer[i] = 0xff;
break;
}
}
// flash_buffer[User1_inf_offset + UserNumber-1] = 0xff;
Fun_wr_parameter();
}
uint8 Fun_rd_parameter(void)
{
uint16 i;
for(i=0;i<256;i++)
{
flash_buffer[i] = VPchar(Flash_baseaddr+MA_PARAM_PAGE1*128+i);
}
if(flash_buffer[Valid_inf_offset] == Valid_inf)
{
if(flash_buffer[Valid_inf_offset+128] != Valid_inf)
{
Fun_flash_writepage(MA_PARAM_PAGE2);
}
return 1;
}
else
{
if(flash_buffer[Valid_inf_offset+128] != Valid_inf)return 0;
for(i=0;i<128;i++)
{
flash_buffer[i] = flash_buffer[i+128];
}
Fun_flash_writepage(MA_PARAM_PAGE1);
return 2;
}
}
void Fun_wr_parameter(void)
{
uint8 ch=0;
uint8 i;
for(i=0;i<127;i++)
{
ch = ch+ flash_buffer[i];
}
flash_buffer[127] = ch;
flash_buffer[Valid_inf_offset] = Valid_inf;
Fun_flash_writepage(MA_PARAM_PAGE1);
Fun_flash_writepage(MA_PARAM_PAGE2);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -