📄 main.c
字号:
#include"LPC214X.H"
#include "PCF8833.h"
#include"SD.H"
#define TFE 0x01
#define TNF 0x02
#define RNE 0x04
#define RFF 0x08
#define BSY 0x10
#define SD_Disable() IO0SET |= 1 << 20 //SD Chip Select Pin is P0.7
#define SD_Enable() IO0CLR |= 1 << 20
INT8U write_buffer[512]={0x31,0x32,0x33,0x34,0x35,0x35};
INT8U read_buffer[512]={0x31,0x32,0x33,0x34,0x35};
//以下均为扇区数
INT32U sector_size=0;
INT32U sector_hidden=0;
INT32U sector_Reserved=0;
INT32U drive_size=0;
INT32U fat_size=0;
INT32U root_add=0;
BOOT_dispose()
{
unsigned int a=0;
a=read_buffer[82];
if(a!='F') return(1);
a=read_buffer[83];
if(a!='A') return(1);
a=read_buffer[84];
if(a!='T') return(1);
a=read_buffer[85];
if(a!='3') return(1);
a=read_buffer[86];
if(a!='2') return(1);
a=read_buffer[0x0c];
a=a<<8;
a=a|read_buffer[0x0b];
sector_size=a;
if(sector_size!=512) return(1);
a=0;
a=read_buffer[0x1f]<<24;
sector_hidden|=a;
a=0;
a=read_buffer[0x1e]<<16;
sector_hidden|=a;
a=0;
a=read_buffer[0x1d]<<8;
sector_hidden|=a;
a=0;
a=read_buffer[0x1c];
sector_hidden|=a;
if(sector_hidden!=0x0) return(1);
a=0;
a=read_buffer[0x10];
if(a!=0x02) return(1);
a=0;
a=read_buffer[0x0f]<<8;
sector_Reserved|=a;
a=0;
a=read_buffer[0x0e];
sector_Reserved|=a;
if(sector_Reserved!=36) return(1);
a=0;
a=read_buffer[0x23]<<24;
drive_size|=a;
if(a!=0) return(1);
a=0;
a=read_buffer[0x22]<<16;
drive_size|=a;
if(a!=0x0f0000) return(1);
a=0;
a=read_buffer[0x21]<<8;
drive_size|=a;
if(a!=0x5c00) return(1);
a=0;
a=read_buffer[0x20];
drive_size|=a;
if(a!=0x00) return(1);
if(drive_size!=0x0f5c00) return(1);
a=0;
a=read_buffer[0x27]<<24;
fat_size|=a;
if(a!=0x00) return(1);
a=0;
a=read_buffer[0x26]<<16;
fat_size|=a;
if(a!=0x00) return(1);
a=0;
a=read_buffer[0x25]<<8;
fat_size|=a;
if(a!=0x0300) return(1);
a=0;
a=read_buffer[0x24];
fat_size|=a;
if(a!=0xd6) return(1);
if(fat_size!=0x03d6) return(1);
root_add=(sector_hidden+sector_Reserved+fat_size*2);
if(root_add!=0x07d0) return(1);
else return(0);
}
dispose(INT16U i)
{
if((read_buffer[i]==0)&(read_buffer[i+1]==0)&(read_buffer[i+2]==0)&(read_buffer[i+3]==0)&(read_buffer[i+4]==0)&(read_buffer[i+5]==0)&(read_buffer[i+6]==0)&(read_buffer[i+7]==0))
return(2);
if(read_buffer[i+0]==0xe5)
return(1);
return(0);
}
SD_List()
{
INT8U response,a,j,b,y;
INT32U add;
INT16U i;
INT8U LIST[16];
a=1;
i=0;
y=70;
add=0xFA000;
response=SD_READ(read_buffer,512,add);
while(response!=0) ;
while(a)
{
j=0;
response=dispose(i);
if(response==0)
{
for(b=0;b<8;b++)
{
if(read_buffer[i]!=0x20)
{
LIST[j]=read_buffer[i];
j=j+1;
}
i=i+1;
}
LIST[j]='.';
j+=1;
for(b=0;b<8;b++)
{
if(read_buffer[i]!=0x20)
{
LIST[j]=read_buffer[i];
j+=1;
}
else
{
b=7-b;
i=i+b;
b=8;
}
i=i+1;
}
PutString(0,y,LIST,0xf800,0xffff);
y+=16;
i=i+0x10;
for(b=0;b<16;b++)
{
LIST[b]=0;
}
}
if(response==1) i=i+0x20;
if(response==2) a=0;
}
}
main()
{
INT8U response;
// INT8U write_buffer[512]={0x31,0x32,0x33,0x34,0x35,0x35};
// INT8U read_buffer[512]={0x31,0x32,0x33,0x34,0x35};
PCF8833INIT();
PCF8833CLR();
spi_init();
SD_Enable();
response=SD_INIT();
while(response!=0) ;
response=READ_CSD();
while(response!=0) ;
response=SD_WRITE(write_buffer,1);
while(response!=0) ;
response=SD_READ(read_buffer,512,1*512);
while(response!=0) ;
response=BOOT_READ(read_buffer,100,0);
while(response!=0) ;
response=BOOT_dispose();
while(response!=0) PutString(0,50,"BOOT_dispose WRONG",0xf800,0xffff);
PutString(0,50,"BOOT_dispose OK",0xf800,0xffff);
SD_List();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -