?? nandflash.c
字號:
}
}
void BMP_data_from_flash(unsigned long int data_addr,unsigned long int flash_page_addr)
{
unsigned long int i;
unsigned long int j,data,image_width,image_highth;
unsigned char remainder_number;
unsigned char remainder[3];
unsigned long int page_number;
unsigned long int page_addr,dot_counter;
unsigned long int file_size;
unsigned long int header_size;
unsigned int n;
unsigned long int fat_page_addr;
unsigned long int current_sector_addr;
unsigned long int next_sector_addr;
unsigned long int sector_num;
unsigned int FAT[256];
dot_counter=0;
page_addr=flash_page_addr;
Flash_page_read(page_addr);
image_highth=Data_buffer[25];
image_highth=(image_highth<<8)+Data_buffer[24];
image_highth=(image_highth<<8)+Data_buffer[23];
image_highth=(image_highth<<8)+Data_buffer[22];
image_width=Data_buffer[21];
image_width=(image_width<<8)+Data_buffer[20];
image_width=(image_width<<8)+Data_buffer[19];
image_width=(image_width<<8)+Data_buffer[18];
file_size=Data_buffer[5];
file_size=(file_size<<8)+Data_buffer[4];
file_size=(file_size<<8)+Data_buffer[3];
file_size=(file_size<<8)+Data_buffer[2];
header_size=Data_buffer[13];
header_size=(header_size<<8)+Data_buffer[12];
header_size=(header_size<<8)+Data_buffer[11];
header_size=(header_size<<8)+Data_buffer[10];
page_number=(file_size/512)+1;
data_addr=data_addr+(image_highth-1)*LCD_x_size;
for (i=header_size;i<512-2;i=i+3)
{
data=Data_buffer[i+2];
data=(data<<8)+Data_buffer[i+1];
data=(data<<8)+Data_buffer[i];
data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
Image_data[data_addr]=data&0xFFFF;
data_addr++;dot_counter++;
if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
}
remainder_number=(512-header_size)%3;
for (i=0;i<remainder_number;i++)
{
remainder[i]=Data_buffer[512-remainder_number+i];
}
while(1)
{
for(n=0;n<SecPerClus-1;n++)
{
page_addr++;
Flash_page_read(page_addr);
switch(remainder_number)
{
case 0:
{
for (j=0;j<512-2;j=j+3)
{
data=(Data_buffer[j+2]<<16)+(Data_buffer[j+1]<<8)+Data_buffer[j];
data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
Image_data[data_addr]=data&0xFFFF;
data_addr++;
dot_counter++;
if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
}
remainder_number=2;
remainder[0]=Data_buffer[510];
remainder[1]=Data_buffer[511];
}
break;
case 1:
{
data=(Data_buffer[1]<<16)+(Data_buffer[0]<<8)+remainder[0];
data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
Image_data[data_addr]=data&0xFFFF;
data_addr++;
dot_counter++;
if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
for (j=2;j<512-2;j=j+3)
{
data=(Data_buffer[j+2]<<16)+(Data_buffer[j+1]<<8)+Data_buffer[j];
data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
Image_data[data_addr]=data&0xFFFF;
data_addr++;
dot_counter++;
if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
}
remainder_number=0;
}
break;
case 2:
{
data=(Data_buffer[0]<<16)+(remainder[1]<<8)+remainder[0];
data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
Image_data[data_addr]=data&0xFFFF;
data_addr++;
dot_counter++;
if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
for (j=1;j<512-2;j=j+3)
{
data=(Data_buffer[j+2]<<16)+(Data_buffer[j+1]<<8)+Data_buffer[j];
data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
Image_data[data_addr]=data&0xFFFF;
data_addr++;
dot_counter++;
if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
}
remainder_number=1;
remainder[0]=Data_buffer[511];
}
break;
default:;
}
}
current_sector_addr=(page_addr-Data_start_Addr+4)/SecPerClus;
fat_page_addr=RsvdSec+current_sector_addr/256;
sector_num=(current_sector_addr%256);
Flash_page_read(fat_page_addr);
next_sector_addr=(Data_buffer[2*sector_num]+256*Data_buffer[2*sector_num+1])&(0x0000ffff);
if(next_sector_addr==0xffff) goto end;
page_addr=SecPerClus*next_sector_addr+Data_start_Addr-4;
Flash_page_read(page_addr);
switch(remainder_number)
{
case 0:
{
for (j=0;j<512-2;j=j+3)
{
data=(Data_buffer[j+2]<<16)+(Data_buffer[j+1]<<8)+Data_buffer[j];
data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
Image_data[data_addr]=data&0xFFFF;
data_addr++;
dot_counter++;
if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
}
remainder_number=2;
remainder[0]=Data_buffer[510];
remainder[1]=Data_buffer[511];
}
break;
case 1:
{
data=(Data_buffer[1]<<16)+(Data_buffer[0]<<8)+remainder[0];
data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
Image_data[data_addr]=data&0xFFFF;
data_addr++;
dot_counter++;
if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
for (j=2;j<512-2;j=j+3)
{
data=(Data_buffer[j+2]<<16)+(Data_buffer[j+1]<<8)+Data_buffer[j];
data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
Image_data[data_addr]=data&0xFFFF;
data_addr++;
dot_counter++;
if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
}
remainder_number=0;
}
break;
case 2:
{
data=(Data_buffer[0]<<16)+(remainder[1]<<8)+remainder[0];
data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
Image_data[data_addr]=data&0xFFFF;
data_addr++;
dot_counter++;
if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
for (j=1;j<512-2;j=j+3)
{
data=(Data_buffer[j+2]<<16)+(Data_buffer[j+1]<<8)+Data_buffer[j];
data=((data&0x00F80000)>>8)+((data&0x0000FC00)>>5)+((data&0x000000F8)>>3);
Image_data[data_addr]=data&0xFFFF;
data_addr++;
dot_counter++;
if(dot_counter==image_width){data_addr-=(LCD_x_size+image_width);dot_counter=0;}
}
remainder_number=1;
remainder[0]=Data_buffer[511];
}
break;
default:;
}
}
end:;
}
void Logo_data_from_flash(unsigned long int data_addr,unsigned long int flash_block_addr)
{
unsigned long int i;
unsigned long int j;
unsigned char remainder_number;
unsigned char remainder[2];
unsigned long int page_number;
unsigned long int page_addr;
unsigned long int file_size;
unsigned long int header_size;
page_addr=flash_block_addr*32;
Flash_page_read(page_addr);
page_addr++;
file_size=Data_buffer[5];
file_size=(file_size<<8)+Data_buffer[4];
file_size=(file_size<<8)+Data_buffer[3];
file_size=(file_size<<8)+Data_buffer[2];
header_size=0x36;
page_number=(file_size/512)+1;
for (i=header_size;i<512-2;i=i+3)
{
Image_data[data_addr]=Data_buffer[i+2];
Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[i+1];
Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[i];
data_addr++;
}
remainder_number=(512-header_size)%3;
for (i=0;i<remainder_number;i++)
{
remainder[i]=Data_buffer[512-remainder_number+i];
}
for (i=1;i<page_number+1;i++)
{
Flash_page_read(page_addr);
page_addr++;
switch(remainder_number)
{
case 0:
{
for (j=0;j<512-2;j=j+3)
{
Image_data[data_addr]=Data_buffer[j+2];
Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[j+1];
Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[j];
data_addr++;
}
remainder_number=2;
remainder[0]=Data_buffer[510];
remainder[1]=Data_buffer[511];
}
break;
case 1:
{
Image_data[data_addr]=Data_buffer[1];
Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[0];
Image_data[data_addr]=(Image_data[data_addr]<<8)+remainder[0];
data_addr++;
for (j=2;j<512-2;j=j+3)
{
Image_data[data_addr]=Data_buffer[j+2];
Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[j+1];
Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[j];
data_addr++;
}
remainder_number=0;
}
break;
case 2:
{
Image_data[data_addr]=Data_buffer[0];
Image_data[data_addr]=(Image_data[data_addr]<<8)+remainder[1];
Image_data[data_addr]=(Image_data[data_addr]<<8)+remainder[0];
data_addr++;
for (j=1;j<512-2;j=j+3)
{
Image_data[data_addr]=Data_buffer[j+2];
Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[j+1];
Image_data[data_addr]=(Image_data[data_addr]<<8)+Data_buffer[j];
data_addr++;
}
remainder_number=1;
remainder[0]=Data_buffer[511];
}
break;
default:;
}
}
}
void Erase_chip()
{
int i;
for (i=0;i<4096;i++)
{Flash_block_erase(i);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -