?? nandflash.c
字號:
#include "config.h"
#include "soucehead.h"
extern unsigned char Data_buffer[0x200];
extern void Display_hex(unsigned char hex,unsigned int window_start_x,unsigned int window_start_y,unsigned long int color,char times_x,char times_y);
extern unsigned short int Image_data[];
extern long int FLASHCOM;
extern long int FLASHADDR;
extern long int FLASHDATA;
int Movie_current_block;
extern unsigned int LCD_x_size,LCD_y_size;
extern unsigned char LCD_code,LCD_data_mode,LCD_dots,BMP_start_block,BMP_block_number;
extern volatile unsigned char Menu_status,Menu_status_1,Menu_status_2;
extern void Delay(void);
extern void Delay100ns(long int dly);
extern void Delayms(long int dly);
extern void UART0_SendByte(uint8 data);
extern unsigned long int RootDirAddr;
extern unsigned long int Data_start_Addr;
extern unsigned RootDirNum;
extern unsigned int RsvdSec;
extern unsigned char SecPerClus;
void Flash_page_program(unsigned long int flash_page_addr)
{
unsigned int i;
FLASHCS_ON;
FLASHBUSY_WAIT();
FLASHCOM=0x80;Delay100ns(1);
FLASHADDR=0x00;Delay100ns(1);
FLASHADDR=(flash_page_addr);Delay100ns(1);
FLASHADDR=(flash_page_addr>>8);Delay100ns(1);
FLASHADDR=(flash_page_addr>>16); Delay100ns(10);
for (i=0;i<512;i++)
{
FLASHDATA=Data_buffer[i];Delay100ns(1);
}
FLASHCOM=0x10; Delay100ns(1);
FLASHBUSY_WAIT();
FLASHCS_OFF;
}
void Flash_block_erase(unsigned int flash_block_addr)
{
FLASHCS_ON;
FLASHBUSY_WAIT();
FLASHCOM=0x60;Delay100ns(1);
FLASHADDR=(flash_block_addr<<5); Delay100ns(1);
FLASHADDR=(flash_block_addr>>3); Delay100ns(1);
FLASHADDR=(flash_block_addr>>11); Delay100ns(1);
FLASHCOM=0xD0; Delay100ns(10);
FLASHBUSY_WAIT();Delay100ns(10);
FLASHCS_OFF;
}
void Flash_page_read(unsigned long int flash_page_addr)
{
unsigned int i;
FLASHCS_ON;
FLASHBUSY_WAIT();
FLASHCOM=0x00;Delay100ns(1);
FLASHADDR=0x00;Delay100ns(1);
FLASHADDR=(flash_page_addr);Delay100ns(1);
FLASHADDR=(flash_page_addr>>8);Delay100ns(1);
FLASHADDR=(flash_page_addr>>16); Delay100ns(1);
FLASHBUSY_WAIT();Delay100ns(30);
for (i=0;i<512;i++)
{
Data_buffer[i]=FLASHDATA; Delay();
}
FLASHCS_OFF;
}
unsigned char Blank_Image(unsigned char image_size_format)
{
unsigned char i;
Flash_page_read(ROOT_PAGE);
if ((Data_buffer[image_size_format]&0x01)==0x00)
{
i=0;
Data_buffer[image_size_format]+=0x01;
}
else
{ if ((Data_buffer[image_size_format]&0x02)==0x00)
{
i=1;
Data_buffer[image_size_format]+=0x02;
}
else
{ if ((Data_buffer[image_size_format]&0x04)==0x00)
{
i=2;
Data_buffer[image_size_format]+=0x04;
}
else
{ if ((Data_buffer[image_size_format]&0x08)==0x00)
{
i=3;
Data_buffer[image_size_format]+=0x08;
}
else
{ if((Data_buffer[image_size_format]&0x010)==0x00)
{
i=4;
Data_buffer[image_size_format]+=0x10;
}
else
{ if ((Data_buffer[image_size_format]&0x20)==0x00)
{
i=5;
Data_buffer[image_size_format]+=0x20;
}
else
{ if ((Data_buffer[image_size_format]&0x40)==0x00)
{
i=6;
Data_buffer[image_size_format]+=0x40;
}
else
{ if ((Data_buffer[image_size_format]&0x80)==0x00)
{
i=7;
Data_buffer[image_size_format]+=0x80;
}
else
{
i=0;
Data_buffer[image_size_format]=0xFF;
}
}
}
}
}
}
}
}
Flash_block_erase(ROOT_BLOCK);
Flash_page_program(ROOT_PAGE);
return i;
}
unsigned char Blank_Image_1(unsigned char image_size_format)
{
unsigned char i;
Flash_page_read(ROOT_PAGE);
if ((Data_buffer[image_size_format]&0x01)==0x00)
{
i=0;
}
else
{ if ((Data_buffer[image_size_format]&0x02)==0x00)
{
i=1;
}
else
{ if ((Data_buffer[image_size_format]&0x04)==0x00)
{
i=2;
}
else
{ if ((Data_buffer[image_size_format]&0x08)==0x00)
{
i=3;
}
else
{ if((Data_buffer[image_size_format]&0x010)==0x00)
{
i=4;
}
else
{ if ((Data_buffer[image_size_format]&0x20)==0x00)
{
i=5;
}
else
{ if ((Data_buffer[image_size_format]&0x40)==0x00)
{
i=6;
}
else
{ if ((Data_buffer[image_size_format]&0x80)==0x00)
{
i=7;
;
}
else
{
i=0;
}
}
}
}
}
}
}
}
return i;
}
unsigned char Blank_Image_movie()
{
unsigned char i;
Flash_page_read(ROOT_PAGE);
i=Data_buffer[0x0f-Menu_status_2];
Data_buffer[0x0f-Menu_status_2]++;
Flash_block_erase(ROOT_BLOCK);
Flash_page_program(ROOT_PAGE);
UART0_SendByte(Data_buffer[0x0f-Menu_status_2]);
return i;
}
void File_to_flash()
{
unsigned long int i;
unsigned long int j;
unsigned long int block_number,file_size,image_size,block_addr;
unsigned long int page_number;
unsigned long int page_addr,data_addr;
unsigned int file_format;
data_addr=RECEIVEBUFFER;
file_format=Image_data[RECEIVEBUFFER]&0x0000FFFF;
if (file_format==0x4D42) //BMP
{
file_size=((Image_data[RECEIVEBUFFER]&0xFFFF0000)>>16)+((Image_data[RECEIVEBUFFER+1]&0x0000FFFF)<<16);
image_size=((Image_data[RECEIVEBUFFER+4]&0xFFFF0000))+((Image_data[RECEIVEBUFFER+5]&0xFFFF0000)>>16);
switch(image_size)
{
case 0x00600040: //96*64
{
block_addr=32+Blank_Image(0)*2;
}
break;
case 0x00800080: //128*128
{
block_addr=48+Blank_Image(1)*4;
}
break;
case 0x008000A0: //128*160
{
block_addr=80+Blank_Image(2)*4;
}
break;
case 0x00B000DC: //LCD_x_size*LCD_y_size
{
block_addr=112+Blank_Image(3)*8;
}
break;
case 0x00F00140: //240*320
{
block_addr=176+Blank_Image(4)*15;
}
break;
case 0x00800060:
{
block_addr=1024+(Menu_status_2*768)+Blank_Image_movie()*3;
if (block_addr>=ROOT_BLOCK) block_addr=1024+(2*768);
}
break;
case 0x00940094:
{
block_addr=1005;
}
break;
default:
{
}
}
}
if (file_format==0x2222) //logo
{
file_size=((Image_data[RECEIVEBUFFER+0]&0xFFFF0000)>>16)+((Image_data[RECEIVEBUFFER+1]&0x0000FFFF)<<16);
block_addr=0;
}
if(file_format==0x4947)
{ file_size=0x1c5f6;
block_addr=112+Blank_Image(3)*8;
}
block_number=(file_size>>14)+1;
page_number=(file_size>>9)+1;
page_addr=block_addr*32;
for (i=0;i<block_number;i++)
{
Flash_block_erase(block_addr+i);
}
for (i=0;i<page_number;i++)
{
for(j=0;j<0x80;j++)
{
Data_buffer[j*4]=Image_data[data_addr]&0x000000ff;
Data_buffer[j*4+1]=(Image_data[data_addr]&0x0000ff00)>>8;
Data_buffer[j*4+2]=(Image_data[data_addr]&0x00ff0000)>>16;
Data_buffer[j*4+3]=(Image_data[data_addr]&0xff000000)>>24;
data_addr++;
}
Flash_page_program(page_addr+i);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -