Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dcd484c1bd | ||
|
|
1c0f3b676f | ||
|
|
5ee5304676 | ||
|
|
9566fb0db7 | ||
|
|
8c9b256242 | ||
|
|
572b24f867 | ||
|
|
354f447ad1 | ||
|
|
0566df80a2 | ||
|
|
15e6a6e1dc | ||
|
|
edd76c2871 | ||
|
|
8d49d67929 | ||
|
|
88ab12182e | ||
|
|
85f2a5adec | ||
|
|
da2ae5ee13 | ||
|
|
27b41dcd56 |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,4 +1,4 @@
|
||||
|
||||
/OBJ
|
||||
*.dbgconf
|
||||
*.Qi
|
||||
*.o
|
||||
*.crf
|
||||
|
||||
@@ -1,316 +0,0 @@
|
||||
#include "fattester.h"
|
||||
#include "sdio_sdcard.h"
|
||||
#include "usmart.h"
|
||||
#include "usart.h"
|
||||
#include "exfuns.h"
|
||||
#include "malloc.h"
|
||||
#include "ff.h"
|
||||
#include "string.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//FATFS <20><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/7
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//Ϊ<><CEAA><EFBFBD><EFBFBD>ע<EFBFBD>Ṥ<EFBFBD><E1B9A4><EFBFBD><EFBFBD>
|
||||
//path:<3A><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"0:"<22><>"1:"
|
||||
//mt:0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD>ᣨ<EFBFBD>Ժ<EFBFBD>ע<EFBFBD>ᣩ<EFBFBD><E1A3A9>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>
|
||||
u8 mf_mount(u8* path,u8 mt)
|
||||
{
|
||||
return f_mount(fs[1],(const TCHAR*)path,mt);
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD>
|
||||
//path:·<><C2B7>+<2B>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//mode:<3A><><EFBFBD><EFBFBD>ģʽ
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>
|
||||
u8 mf_open(u8*path,u8 mode)
|
||||
{
|
||||
u8 res;
|
||||
res=f_open(file,(const TCHAR*)path,mode);//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
return res;
|
||||
}
|
||||
//<2F>ر<EFBFBD><D8B1>ļ<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>
|
||||
u8 mf_close(void)
|
||||
{
|
||||
f_close(file);
|
||||
return 0;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//len:<3A><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>
|
||||
u8 mf_read(u16 len)
|
||||
{
|
||||
u16 i,t;
|
||||
u8 res=0;
|
||||
u16 tlen=0;
|
||||
printf("\r\nRead file data is:\r\n");
|
||||
for(i=0;i<len/512;i++)
|
||||
{
|
||||
res=f_read(file,fatbuf,512,&br);
|
||||
if(res)
|
||||
{
|
||||
printf("Read Error:%d\r\n",res);
|
||||
break;
|
||||
}else
|
||||
{
|
||||
tlen+=br;
|
||||
for(t=0;t<br;t++)printf("%c",fatbuf[t]);
|
||||
}
|
||||
}
|
||||
if(len%512)
|
||||
{
|
||||
res=f_read(file,fatbuf,len%512,&br);
|
||||
if(res) //<2F><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
printf("\r\nRead Error:%d\r\n",res);
|
||||
}else
|
||||
{
|
||||
tlen+=br;
|
||||
for(t=0;t<br;t++)printf("%c",fatbuf[t]);
|
||||
}
|
||||
}
|
||||
if(tlen)printf("\r\nReaded data len:%d\r\n",tlen);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
printf("Read data over\r\n");
|
||||
return res;
|
||||
}
|
||||
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//dat:<3A><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
//len:д<>볤<EFBFBD><EBB3A4>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>
|
||||
u8 mf_write(u8*dat,u16 len)
|
||||
{
|
||||
u8 res;
|
||||
|
||||
printf("\r\nBegin Write file...\r\n");
|
||||
printf("Write data len:%d\r\n",len);
|
||||
res=f_write(file,dat,len,&bw);
|
||||
if(res)
|
||||
{
|
||||
printf("Write Error:%d\r\n",res);
|
||||
}else printf("Writed data len:%d\r\n",bw);
|
||||
printf("Write data over.\r\n");
|
||||
return res;
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>Ŀ¼
|
||||
//path:·<><C2B7>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>
|
||||
u8 mf_opendir(u8* path)
|
||||
{
|
||||
return f_opendir(&dir,(const TCHAR*)path);
|
||||
}
|
||||
//<2F>ر<EFBFBD>Ŀ¼
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>
|
||||
u8 mf_closedir(void)
|
||||
{
|
||||
return f_closedir(&dir);
|
||||
}
|
||||
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>
|
||||
u8 mf_readdir(void)
|
||||
{
|
||||
u8 res;
|
||||
res=f_readdir(&dir,&fileinfo); //<2F><>ȡһ<C8A1><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
if(res!=FR_OK)return res; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
printf("\r\n DIR info:\r\n");
|
||||
|
||||
printf("dir.dptr:%d\r\n",dir.dptr);
|
||||
printf("dir.obj.id:%d\r\n",dir.obj.id);
|
||||
printf("dir.obj.sclust:%d\r\n",dir.obj.sclust);
|
||||
printf("dir.obj.objsize:%lld\r\n",dir.obj.objsize);
|
||||
printf("dir.obj.c_ofs:%d\r\n",dir.obj.c_ofs);
|
||||
printf("dir.clust:%d\r\n",dir.clust);
|
||||
printf("dir.sect:%d\r\n",dir.sect);
|
||||
printf("dir.blk_ofs:%d\r\n",dir.blk_ofs);
|
||||
|
||||
printf("\r\n");
|
||||
printf("File Name is:%s\r\n",fileinfo.fname);
|
||||
printf("File Size is:%lld\r\n",fileinfo.fsize);
|
||||
printf("File data is:%d\r\n",fileinfo.fdate);
|
||||
printf("File time is:%d\r\n",fileinfo.ftime);
|
||||
printf("File Attr is:%d\r\n",fileinfo.fattrib);
|
||||
printf("\r\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
//path:·<><C2B7>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>
|
||||
u8 mf_scan_files(u8 * path)
|
||||
{
|
||||
FRESULT res;
|
||||
res = f_opendir(&dir,(const TCHAR*)path); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ŀ¼
|
||||
if (res == FR_OK)
|
||||
{
|
||||
printf("\r\n");
|
||||
while(1)
|
||||
{
|
||||
res = f_readdir(&dir, &fileinfo); //<2F><>ȡĿ¼<C4BF>µ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD>
|
||||
if (res != FR_OK || fileinfo.fname[0] == 0) break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><>ĩβ<C4A9><CEB2>,<2C>˳<EFBFBD>
|
||||
//if (fileinfo.fname[0] == '.') continue; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>Ŀ¼
|
||||
printf("%s/", path);//<2F><>ӡ·<D3A1><C2B7>
|
||||
printf("%s\r\n",fileinfo.fname);//<2F><>ӡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
//<2F><>ʾʣ<CABE><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//drv:<3A>̷<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ʣ<><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28>ֽ<EFBFBD>)
|
||||
u32 mf_showfree(u8 *drv)
|
||||
{
|
||||
FATFS *fs1;
|
||||
u8 res;
|
||||
u32 fre_clust=0, fre_sect=0, tot_sect=0;
|
||||
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
res = f_getfree((const TCHAR*)drv,(DWORD*)&fre_clust, &fs1);
|
||||
if(res==0)
|
||||
{
|
||||
tot_sect = (fs1->n_fatent - 2) * fs1->csize;//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fre_sect = fre_clust * fs1->csize; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#if _MAX_SS!=512
|
||||
tot_sect*=fs1->ssize/512;
|
||||
fre_sect*=fs1->ssize/512;
|
||||
#endif
|
||||
if(tot_sect<20480)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>10M
|
||||
{
|
||||
/* Print free space in unit of KB (assuming 512 bytes/sector) */
|
||||
printf("\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d KB\r\n"
|
||||
"<EFBFBD><EFBFBD><EFBFBD>ÿռ<EFBFBD>:%d KB\r\n",
|
||||
tot_sect>>1,fre_sect>>1);
|
||||
}else
|
||||
{
|
||||
/* Print free space in unit of KB (assuming 512 bytes/sector) */
|
||||
printf("\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d MB\r\n"
|
||||
"<EFBFBD><EFBFBD><EFBFBD>ÿռ<EFBFBD>:%d MB\r\n",
|
||||
tot_sect>>11,fre_sect>>11);
|
||||
}
|
||||
}
|
||||
return fre_sect;
|
||||
}
|
||||
//<2F>ļ<EFBFBD><C4BC><EFBFBD>дָ<D0B4><D6B8>ƫ<EFBFBD><C6AB>
|
||||
//offset:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>.
|
||||
u8 mf_lseek(u32 offset)
|
||||
{
|
||||
return f_lseek(file,offset);
|
||||
}
|
||||
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ǰ<EFBFBD><C7B0>дָ<D0B4><D6B8><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>.
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:λ<><CEBB>
|
||||
u32 mf_tell(void)
|
||||
{
|
||||
return f_tell(file);
|
||||
}
|
||||
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>С
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:<3A>ļ<EFBFBD><C4BC><EFBFBD>С
|
||||
u32 mf_size(void)
|
||||
{
|
||||
return f_size(file);
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD>Ŀ¼
|
||||
//pname:Ŀ¼·<C2BC><C2B7>+<2B><><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>
|
||||
u8 mf_mkdir(u8*pname)
|
||||
{
|
||||
return f_mkdir((const TCHAR *)pname);
|
||||
}
|
||||
//<2F><>ʽ<EFBFBD><CABD>
|
||||
//path:<3A><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"0:"<22><>"1:"
|
||||
//mode:ģʽ
|
||||
//au:<3A>ش<EFBFBD>С
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>
|
||||
u8 mf_fmkfs(u8* path,u8 mode,u16 au)
|
||||
{
|
||||
return f_mkfs((const TCHAR*)path,mode,au);//<2F><>ʽ<EFBFBD><CABD>,drv:<3A>̷<EFBFBD>;mode:ģʽ;au:<3A>ش<EFBFBD>С
|
||||
}
|
||||
//ɾ<><C9BE><EFBFBD>ļ<EFBFBD>/Ŀ¼
|
||||
//pname:<3A>ļ<EFBFBD>/Ŀ¼·<C2BC><C2B7>+<2B><><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>
|
||||
u8 mf_unlink(u8 *pname)
|
||||
{
|
||||
return f_unlink((const TCHAR *)pname);
|
||||
}
|
||||
|
||||
//<2F><EFBFBD><DEB8>ļ<EFBFBD>/Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC>ͬ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6>ļ<EFBFBD>Ŷ!)
|
||||
//oldname:֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//newname:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>
|
||||
u8 mf_rename(u8 *oldname,u8* newname)
|
||||
{
|
||||
return f_rename((const TCHAR *)oldname,(const TCHAR *)newname);
|
||||
}
|
||||
//<2F><>ȡ<EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD>
|
||||
//path:<3A><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"0:"<22><>"1:"
|
||||
void mf_getlabel(u8 *path)
|
||||
{
|
||||
u8 buf[20];
|
||||
u32 sn=0;
|
||||
u8 res;
|
||||
res=f_getlabel ((const TCHAR *)path,(TCHAR *)buf,(DWORD*)&sn);
|
||||
if(res==FR_OK)
|
||||
{
|
||||
printf("\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>%s <20><><EFBFBD>̷<EFBFBD>Ϊ:%s\r\n",path,buf);
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>%s <20><><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>:%X\r\n\r\n",path,sn);
|
||||
}else printf("\r\n<EFBFBD><EFBFBD>ȡʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%X\r\n",res);
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD>11<31><31><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD>ֺʹ<D6BA>д<EFBFBD><D0B4>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ֵ<EFBFBD>
|
||||
//path:<3A><><EFBFBD>̺<EFBFBD>+<2B><><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD>"0:ALIENTEK"<22><>"1:OPENEDV"
|
||||
void mf_setlabel(u8 *path)
|
||||
{
|
||||
u8 res;
|
||||
res=f_setlabel ((const TCHAR *)path);
|
||||
if(res==FR_OK)
|
||||
{
|
||||
printf("\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>óɹ<EFBFBD>:%s\r\n",path);
|
||||
}else printf("\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%X\r\n",res);
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡһ<C8A1><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
//size:Ҫ<><D2AA>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
void mf_gets(u16 size)
|
||||
{
|
||||
TCHAR* rbuf;
|
||||
rbuf=f_gets((TCHAR*)fatbuf,size,file);
|
||||
if(*rbuf==0)return ;//û<><C3BB><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>
|
||||
else
|
||||
{
|
||||
printf("\r\nThe String Readed Is:%s\r\n",rbuf);
|
||||
}
|
||||
}
|
||||
//<2F><>Ҫ_USE_STRFUNC>=1
|
||||
//дһ<D0B4><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
//c:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:ִ<>н<EFBFBD><D0BD><EFBFBD>
|
||||
u8 mf_putc(u8 c)
|
||||
{
|
||||
return f_putc((TCHAR)c,file);
|
||||
}
|
||||
//д<>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
//c:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 mf_puts(u8*c)
|
||||
{
|
||||
return f_puts((TCHAR*)c,file);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
#ifndef __FATTESTER_H
|
||||
#define __FATTESTER_H
|
||||
#include "sys.h"
|
||||
#include "ff.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//FATFS <20><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/7
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
u8 mf_mount(u8* path,u8 mt);
|
||||
u8 mf_open(u8*path,u8 mode);
|
||||
u8 mf_close(void);
|
||||
u8 mf_read(u16 len);
|
||||
u8 mf_write(u8*dat,u16 len);
|
||||
u8 mf_opendir(u8* path);
|
||||
u8 mf_closedir(void);
|
||||
u8 mf_readdir(void);
|
||||
u8 mf_scan_files(u8 * path);
|
||||
u32 mf_showfree(u8 *drv);
|
||||
u8 mf_lseek(u32 offset);
|
||||
u32 mf_tell(void);
|
||||
u32 mf_size(void);
|
||||
u8 mf_mkdir(u8*pname);
|
||||
u8 mf_fmkfs(u8* path,u8 mode,u16 au);
|
||||
u8 mf_unlink(u8 *pname);
|
||||
u8 mf_rename(u8 *oldname,u8* newname);
|
||||
void mf_getlabel(u8 *path);
|
||||
void mf_setlabel(u8 *path);
|
||||
void mf_gets(u16 size);
|
||||
u8 mf_putc(u8 c);
|
||||
u8 mf_puts(u8*c);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1196,7 +1196,7 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
|
||||
tmp2 = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE);
|
||||
/* UART in mode Receiver ---------------------------------------------------*/
|
||||
if((tmp1 != RESET) && (tmp2 != RESET))
|
||||
{
|
||||
{
|
||||
UART_Receive_IT(huart);
|
||||
}
|
||||
|
||||
|
||||
416
HARDWARE/EC800/EC800M.c
Normal file
416
HARDWARE/EC800/EC800M.c
Normal file
@@ -0,0 +1,416 @@
|
||||
#include "EC800M.h"
|
||||
#include "usart.h"
|
||||
#include "delay.h"
|
||||
#include "sdram.h"
|
||||
#include "stm32f4xx.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include "cnn.h"
|
||||
|
||||
unsigned char Flag_topic;
|
||||
|
||||
extern UART_BUF buf_uart2; //NBIOT
|
||||
extern UART_BUF buf_uart1; //TTL
|
||||
|
||||
char *strx,*extstrx;
|
||||
|
||||
CSTX_4G CSTX_4G_Status; //模块的状态信息
|
||||
int errcount=0; //发送命令失败次数 防止死循环
|
||||
int errCountData=0;
|
||||
char ATSTR[BUFLEN]; //组建AT命令的函数
|
||||
char IMEINUMBER[BUFLEN];//+CGSN: "869523052178994"
|
||||
|
||||
#define DESTINATION_SIZE 256
|
||||
char *strx,*extstrx;
|
||||
char destination[DESTINATION_SIZE];
|
||||
|
||||
/*云端下发的时间*/
|
||||
int month_def = 1;
|
||||
int date_def = 0;
|
||||
int hour_def = 0;
|
||||
int min_def = 0;
|
||||
int sec_def= 0;
|
||||
|
||||
////////////////////////只要修改三要素/////////////////////////////////
|
||||
#define PRODUCEKEY "k16dsL76w8K" //修改产品秘钥
|
||||
#define DEVICENAME "device_1" //修改设备名称
|
||||
#define DEVICESECRET "b36d0f9e35c7fede452a85c59473a411" //设备的API
|
||||
|
||||
void Clear_Buffer(uint16_t *USARTx_RX_STA, uint8_t *USARTx_RX_BUF) {
|
||||
delay_ms(300);
|
||||
memset(USARTx_RX_BUF, 0, USART_REC_LEN);
|
||||
*USARTx_RX_STA = 0;
|
||||
}
|
||||
|
||||
void extract_IMSI(uint8_t *input_str, char *output_str) {
|
||||
char *start_ptr = strstr((char *)input_str, "460");
|
||||
if (start_ptr != NULL) {
|
||||
strncpy(output_str, start_ptr, 15);
|
||||
output_str[15] = '\0'; // 添加字符串结束符
|
||||
} else {
|
||||
output_str[0] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************
|
||||
初始化模块 和单片机连接,获取卡号和信号质量
|
||||
*****************************************************/
|
||||
uint8_t CSTX_4G_Init(void)
|
||||
{
|
||||
//打印初始化信息
|
||||
printf("start init EC800X\r\n");
|
||||
//发第一个命令ATE1
|
||||
Uart2_SendStr("ATE1\r\n");
|
||||
delay_ms(200);
|
||||
strx = strstr((char*)USART2_RX_BUF, "OK");
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
while(strx==NULL)
|
||||
{
|
||||
printf("单片机正在连接模块......\r\n");
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
Uart2_SendStr("\n\rATE1\r\nATE1");
|
||||
delay_ms(300);
|
||||
strx = strstr((char*)USART2_RX_BUF, "OK");
|
||||
// if(errcount++ > 10) {
|
||||
// printf("\r\n未连接到模块\r\n");
|
||||
// return 0;
|
||||
// }
|
||||
}
|
||||
printf("****单片机和模块连接成功*****\r\n");
|
||||
Uart2_SendStr("ATI\r\n");//获取模块的版本
|
||||
delay_ms(30);
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
|
||||
Uart2_SendStr("AT+CIMI\r\n");//获取卡号,类似是否存在卡的意思,比较重要。
|
||||
delay_ms(30);
|
||||
strx = strstr((char*)USART2_RX_BUF, "460");
|
||||
while(strx==NULL)
|
||||
{
|
||||
printf("****获取卡号*****\r\n");
|
||||
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
Uart2_SendStr("AT+CIMI\r\n");//获取卡号,类似是否存在卡的意思,比较重要。
|
||||
delay_ms(30);
|
||||
strx = strstr((char*)USART2_RX_BUF, "460");
|
||||
printf("%s",USART2_RX_BUF);
|
||||
}
|
||||
char output_str[16];
|
||||
extract_IMSI(USART2_RX_BUF, output_str);
|
||||
printf("我的卡号是 : %s \r\n",output_str);
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
|
||||
Uart2_SendStr("AT+CGATT?\r\n");//查询激活状态
|
||||
delay_ms(30);
|
||||
strx = strstr((char*)USART2_RX_BUF, "+CGATT: 1");
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
while(strx==NULL)
|
||||
{
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
Uart2_SendStr("AT+CGATT?\r\n");//获取激活状态
|
||||
delay_ms(30);
|
||||
strx = strstr((char*)USART2_RX_BUF, "+CGATT: 1");
|
||||
}
|
||||
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
Uart2_SendStr("AT+CSQ\r\n");//查看获取CSQ值
|
||||
delay_ms(30);
|
||||
strx = strstr((char*)USART2_RX_BUF, "+CSQ:");
|
||||
if(strx)printf("信号质量是:%s 注意:信号最大值是31 \r\n",USART2_RX_BUF);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************
|
||||
收到服务器下发的数据就直接打印 +QMTRECV: 0,0,"$creq/a19d2d64-3ee3-5070-8078-ad43e10a52f0","LED11"
|
||||
*****************************************************/
|
||||
unsigned char CSTX_4G_RECData(void)
|
||||
{
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"+QMTRECV");//返回+QMTRECV:,表明接收到服务器发回的数据
|
||||
if(strx)
|
||||
{
|
||||
delay_ms(300); // 必须延时
|
||||
|
||||
strncpy(destination, (char *)USART2_RX_BUF, DESTINATION_SIZE - 1);
|
||||
destination[DESTINATION_SIZE - 1] = '\0';
|
||||
|
||||
|
||||
TimeInfo TimeInfo = parseTimeInfo(destination);
|
||||
|
||||
|
||||
month_def =TimeInfo.month;
|
||||
date_def =TimeInfo.day;
|
||||
hour_def =TimeInfo.hour;
|
||||
min_def =TimeInfo.minute;
|
||||
sec_def =TimeInfo.second;
|
||||
|
||||
printf(" Month: %d, Day: %d, Hour: %d, Minute: %d, Second: %d\r\n",
|
||||
TimeInfo.month, TimeInfo.day, TimeInfo.hour, TimeInfo.minute, TimeInfo.second);
|
||||
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************
|
||||
注册到ONENET topic = 0 -> 自定义topic 用于准备接收下发的时间 topic = 1 -> 物模型topic 用于上传数据
|
||||
*****************************************************/
|
||||
void CSTX_4G_RegALiYunIOT(unsigned char topic)//平台注册
|
||||
{
|
||||
int errcount = 0;
|
||||
static unsigned char flag=0;
|
||||
if(flag == 0){
|
||||
printf("****初始化完成*****\r\n\r\n");
|
||||
Uart2_SendStr("AT+QMTDISC=0\r\n");//Disconnect a client from MQTT server
|
||||
delay_ms(30);
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
|
||||
Uart2_SendStr("AT+QMTCLOSE=0\r\n");//删除句柄
|
||||
delay_ms(30);
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
|
||||
delay_ms(30);
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
|
||||
Uart2_SendStr("AT+QMTCFG=\"version\",0,4\r\n");//切换下版本
|
||||
delay_ms(30); //等待300ms反馈OK
|
||||
strx = strstr((char*)USART2_RX_BUF, "OK");
|
||||
while(strx==NULL)
|
||||
{
|
||||
strx = strstr((char*)USART2_RX_BUF, "OK");
|
||||
}
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
|
||||
memset(ATSTR,0,BUFLEN);
|
||||
sprintf(ATSTR,"AT+QMTCFG=\"ALIAUTH\",0,\"%s\",\"%s\",\"%s\"\r\n",PRODUCEKEY,DEVICENAME,DEVICESECRET); //+QMTCONN: 0,0,0
|
||||
printf("ATSTR = %s \r\n",ATSTR);
|
||||
Uart2_SendStr(ATSTR);
|
||||
delay_ms(30);
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"OK");//返+QMTOPEN: 0,0 +QMTOPEN: 0,0
|
||||
while(strx==NULL)
|
||||
{
|
||||
errcount++;
|
||||
delay_ms(30);
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"OK");//返回OK
|
||||
if(errcount>10000) //防止死循环
|
||||
{
|
||||
NVIC_SystemReset(); //没有创建TCP SOCKET就重启系统等到服务器就绪
|
||||
}
|
||||
}
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
|
||||
Uart2_SendStr("AT+QMTOPEN=0,\"iot-as-mqtt.cn-shanghai.aliyuncs.com\",1883\r\n");//切换下版本
|
||||
delay_ms(30); //等待300ms反馈OK
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"OK");//返OK
|
||||
while(strx==NULL)
|
||||
{
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"OK");//返OK
|
||||
|
||||
}
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
|
||||
Uart2_SendStr("AT+QMTCONN=0,\"-test-\"\r\n");//切换下版本
|
||||
delay_ms(30); //等待300ms反馈OK
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"OK");//返OK
|
||||
while(strx==NULL)
|
||||
{
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"OK");//返OK
|
||||
printf("连接中……\r\n");
|
||||
}
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
}
|
||||
flag = 1;
|
||||
if(topic == 0){
|
||||
if(Flag_topic == 1){
|
||||
memset(ATSTR,0,BUFLEN);
|
||||
sprintf(ATSTR,"AT+QMTUNS=0,100,\"/%s/%s/user/Set_time\"\r\n",PRODUCEKEY,DEVICENAME); //+QMTCONN: 0,0,0
|
||||
printf("ATSTR = %s \r\n",ATSTR);
|
||||
Uart2_SendStr(ATSTR);//发送链接到阿里云
|
||||
delay_ms(30);
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"OK");//返+QMTCONN: 0,0,0
|
||||
while(strx==NULL)
|
||||
{
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"OK");//返+QMTCONN: 0,0,0
|
||||
}
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
}
|
||||
memset(ATSTR,0,BUFLEN);
|
||||
sprintf(ATSTR,"AT+QMTSUB=0,1,\"/%s/%s/user/Set_time\",0\r\n",PRODUCEKEY,DEVICENAME); //+QMTCONN: 0,0,0
|
||||
printf("ATSTR = %s \r\n",ATSTR);
|
||||
Uart2_SendStr(ATSTR);//发送链接到阿里云
|
||||
delay_ms(30);
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"OK");//返+QMTCONN: 0,0,0
|
||||
while(strx==NULL)
|
||||
{
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"OK");//返+QMTCONN: 0,0,0
|
||||
}
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
Flag_topic = 0;
|
||||
}
|
||||
else if(topic == 1){
|
||||
memset(ATSTR,0,BUFLEN);
|
||||
sprintf(ATSTR,"AT+QMTUNS=0,100,\"/%s/%s/user/Set_time\"\r\n",PRODUCEKEY,DEVICENAME); //+QMTCONN: 0,0,0
|
||||
printf("ATSTR = %s \r\n",ATSTR);
|
||||
Uart2_SendStr(ATSTR);//发送链接到阿里云
|
||||
delay_ms(30);
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"OK");//返+QMTCONN: 0,0,0
|
||||
while(strx==NULL)
|
||||
{
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"OK");//返+QMTCONN: 0,0,0
|
||||
}
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
|
||||
memset(ATSTR,0,BUFLEN);
|
||||
sprintf(ATSTR,"AT+QMTSUB=0,1,\"/%s/%s/thing/event/property/set\",0\r\n",PRODUCEKEY,DEVICENAME); //+QMTCONN: 0,0,0
|
||||
printf("ATSTR = %s \r\n",ATSTR);
|
||||
Uart2_SendStr(ATSTR);//发送链接到阿里云
|
||||
delay_ms(30);
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"OK");//返+QMTCONN: 0,0,0
|
||||
while(strx==NULL)
|
||||
{
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)"OK");//返+QMTCONN: 0,0,0
|
||||
}
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
Flag_topic = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
uint16_t MakeALiYunPayload_s(char *Str,char *Data, const char* identifier)
|
||||
{
|
||||
// Onenet有效载荷固定格式的模板
|
||||
const char PayloadTemplate[60] = "{\"id\":\"123\",\"version\":\"1.0\",\"params\":{\"%s\":{\"value\":\"%s\"}}}";
|
||||
char JsonBuf[BUFLEN]; // 临时数据缓存
|
||||
unsigned int StrLen; // 有效载荷数据长度
|
||||
// 使用snprintf将Data和identifier插入到PayloadTemplate中
|
||||
snprintf(JsonBuf,sizeof(JsonBuf),PayloadTemplate,identifier,Data);
|
||||
// 计算有效载荷的数据长度
|
||||
StrLen = strlen((const char*)JsonBuf); // strlen返回的是字节数,无需再除以sizeof(char)
|
||||
// 拷贝有效载荷数据到Str
|
||||
memcpy(Str, JsonBuf, StrLen);
|
||||
// 返回长度
|
||||
return StrLen;
|
||||
}
|
||||
|
||||
void convert_to_string(uint8_t *Send_Json, char *output_str, size_t length)
|
||||
{
|
||||
// 将 uint8_t 数组转换为字符串
|
||||
memcpy(output_str, Send_Json, length);
|
||||
output_str[length] = '\0'; // 添加字符串结束符
|
||||
}
|
||||
|
||||
void CSTX_4G_ALiYunIOTSenddata_string(char *Data,const char* identifier)//上发数据,上发的数据跟对应的插件有关系,用户需要注意插件然后对应数据即可
|
||||
{
|
||||
static char Send_buff[BUFLEN];//AT命令临时缓存
|
||||
u16 JsonLen; // Json包数据长度
|
||||
|
||||
|
||||
|
||||
memset((char *)Send_buff, 0, BUFLEN); // 开辟数据缓存 //开辟数据缓存 sprintf((char*)Json,"{\"Temp\":%d,\"Humi\":%d}",Temperature,Humidity);//拷贝数据 装订联网三要素 Temperature,Humidity
|
||||
memset(ATSTR,0,BUFLEN);
|
||||
|
||||
JsonLen = MakeALiYunPayload_s(Send_buff,Data, identifier); //得到json
|
||||
memset(ATSTR,0,BUFLEN);
|
||||
sprintf(ATSTR,"AT+QMTPUBEX=0,0,0,0,\"/sys/%s/%s/thing/event/property/post\",%d\r\n",PRODUCEKEY,DEVICENAME,JsonLen);
|
||||
printf("ATSTR = %s \r\n",ATSTR);
|
||||
Uart2_SendStr(ATSTR);//mqtt订阅
|
||||
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)">");//准备发送数据
|
||||
errcount=0;
|
||||
while(strx==NULL)
|
||||
{
|
||||
errcount++;
|
||||
strx=strstr((const char*)USART2_RX_BUF,(const char*)">");//准备发送数据 模块的反馈
|
||||
delay_ms(10);
|
||||
if(errcount>100) //超时退出
|
||||
{
|
||||
errcount = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
printf("Data数据为:%s\r\n",Send_buff);
|
||||
delay_ms(50);
|
||||
Uart2_SendStr(Send_buff);
|
||||
// 发送JSON数据
|
||||
delay_ms(50);
|
||||
// 等待发送完成响应
|
||||
errcount = 0;
|
||||
strx = strstr((const char*)USART2_RX_BUF, (const char*)"+QMTPUBEX: 0,0,0"); // 返SEND OK +QMTPUB: 0,0,0
|
||||
while (strx == NULL)
|
||||
{
|
||||
errcount++;
|
||||
strx = strstr((const char*)USART2_RX_BUF, (const char*)"+QMTPUBEX: 0,0,0"); // 返SEND OK
|
||||
delay_ms(100);
|
||||
if (errcount > 10) // 超时退出
|
||||
{
|
||||
printf("发送数据超时!\n");
|
||||
errcount = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
Clear_Buffer(&USART2_RX_STA, USART2_RX_BUF);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 解析函数实现
|
||||
TimeInfo parseTimeInfo(const char *jsonString) {
|
||||
TimeInfo TimeInfo = {0}; // 初始化结构体为0
|
||||
// 查找JSON字符串中"params"部分的起始位置
|
||||
const char *paramsStart = strstr(jsonString, "\"params\"");
|
||||
if (paramsStart != NULL) {
|
||||
// 创建一个临时缓冲区来复制JSON的"params"部分(注意,这里为了简化处理,直接使用了静态缓冲区)
|
||||
char TempBuffer[256];
|
||||
strncpy(TempBuffer, paramsStart, sizeof(TempBuffer) - 1);
|
||||
TempBuffer[sizeof(TempBuffer) - 1] = '\0';
|
||||
|
||||
// 使用简单的字符串解析来提取时间信息(注意,这种方法很脆弱,仅适用于格式固定的字符串)
|
||||
char *token;
|
||||
token = strtok(TempBuffer, ",\"{}:");
|
||||
while (token != NULL) {
|
||||
if (strcmp(token, "date") == 0) {
|
||||
token = strtok(NULL, ",\"{}:");
|
||||
TimeInfo.day = atoi(token); // JSON中"date"实际上是日,这里暂存到day字段
|
||||
} else if (strcmp(token, "month") == 0) {
|
||||
token = strtok(NULL, ",\"{}:");
|
||||
TimeInfo.month = atoi(token);
|
||||
} else if (strcmp(token, "year") == 0) {
|
||||
// JSON中没有直接的"year"字段,但我们可以从其他信息中推断,或者假设一个默认的年份(这里不处理)
|
||||
// 或者如果"date"和"month"存在,且你有某种方式知道是哪一年(比如当前年份),你可以在这里设置它
|
||||
} else if (strcmp(token, "hour") == 0) {
|
||||
token = strtok(NULL, ",\"{}:");
|
||||
TimeInfo.hour = atoi(token);
|
||||
} else if (strcmp(token, "minute") == 0) {
|
||||
token = strtok(NULL, ",\"{}:");
|
||||
TimeInfo.minute = atoi(token);
|
||||
} else if (strcmp(token, "second") == 0) {
|
||||
token = strtok(NULL, ",\"{}:");
|
||||
TimeInfo.second = atoi(token);
|
||||
}
|
||||
token = strtok(NULL, ",\"{}:");
|
||||
}
|
||||
|
||||
// 注意:上面的代码没有处理"year"字段,因为你的示例JSON中没有提供。
|
||||
// 你需要根据实际情况来处理这个字段,比如使用当前年份,或者从其他来源获取年份信息。
|
||||
// 这里为了示例,我们假设年份是固定的(比如2024年),你可以在实际代码中修改这个值。
|
||||
TimeInfo.year = 2024; // 假设的年份,根据实际情况修改
|
||||
}
|
||||
return TimeInfo;
|
||||
}
|
||||
|
||||
|
||||
///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
|
||||
int fgetc(FILE *f)
|
||||
{ RX1_len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
|
||||
/* 等待串口输入数据 */
|
||||
while (__HAL_UART_GET_FLAG(&UART1_Handler, UART_FLAG_RXNE) == RESET);
|
||||
//while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
|
||||
|
||||
return (int)HAL_UART_Receive(&UART1_Handler,(uint8_t*)USART_RX_BUF,RX1_len,1000);
|
||||
//return (int)USART_ReceiveData(USART1);
|
||||
}
|
||||
|
||||
|
||||
44
HARDWARE/EC800/EC800M.h
Normal file
44
HARDWARE/EC800/EC800M.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#ifndef __EC800M_H
|
||||
#define __EC800M_H
|
||||
#include "stm32f4xx.h"
|
||||
#include "string.h"
|
||||
#include "sys.h"
|
||||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
#include "usart.h"
|
||||
|
||||
extern unsigned char Flag_topic;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t CSQ;
|
||||
uint8_t Socketnum; //编号
|
||||
uint8_t reclen; //获取到数据的长度
|
||||
uint8_t res;
|
||||
uint8_t recdatalen[10];
|
||||
uint8_t recdata[100];
|
||||
uint8_t netstatus;//网络指示灯
|
||||
} CSTX_4G;
|
||||
|
||||
typedef struct {
|
||||
int year;
|
||||
int month;
|
||||
int day;
|
||||
int hour;
|
||||
int minute;
|
||||
int second;
|
||||
}TimeInfo;
|
||||
|
||||
void Clear_Buffer(uint16_t *USARTx_RX_STA, uint8_t *USARTx_RX_BUF);
|
||||
uint8_t CSTX_4G_Init(void);
|
||||
void CSTX_4G_CreateTCPSokcet(void);
|
||||
void CSTX_4G_Senddata(int len,uint8_t *data);
|
||||
void CSTX_4G_RegALiYunIOT(unsigned char topic);//平台注册
|
||||
uint16_t MakeALiYunPayload_s(char *Str,char *Data, const char* identifier);//上发数据,上发的数据跟对应的插件有关系,用户需要注意插件然后对应数据即可
|
||||
char* Get_4GIMEI_NUM(void); //获取IMEI号
|
||||
unsigned char CSTX_4G_RECData(void);
|
||||
void extract_IMSI(uint8_t *input_str, char *output_str);
|
||||
void CSTX_4G_ALiYunIOTSenddata_string(char *Data,const char* identifier);
|
||||
TimeInfo parseTimeInfo(const char *jsonString);
|
||||
|
||||
#endif
|
||||
234
HARDWARE/FATFS/diskio.c
Normal file
234
HARDWARE/FATFS/diskio.c
Normal file
@@ -0,0 +1,234 @@
|
||||
/*-----------------------------------------------------------------------*/
|
||||
/* Low level disk I/O module skeleton for FatFs (C)ChaN, 2014 */
|
||||
/*-----------------------------------------------------------------------*/
|
||||
/* If a working storage control module is available, it should be */
|
||||
/* attached to the FatFs via a glue function rather than modifying it. */
|
||||
/* This is an example of glue functions to attach various exsisting */
|
||||
/* storage control modules to the FatFs module with a defined API. */
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
||||
#include "diskio.h"
|
||||
#include "sdio.h"
|
||||
#include "malloc.h"
|
||||
|
||||
#define SD_CARD 0 // SD<53><44>,<2C><><EFBFBD><EFBFBD>Ϊ0
|
||||
#define EX_FLASH 1 // <20>ⲿspi flash,<2C><><EFBFBD><EFBFBD>Ϊ1
|
||||
#define USB_DISK 3 // U<><55>,<2C><><EFBFBD><EFBFBD>Ϊ3
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>W25Q128
|
||||
// ǰ8M<38>ֽڸ<D6BD>fatfs<66><73>,8M<38>ֽں<D6BD>,<2C><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ֿ<EFBFBD>,<2C>ֿ<EFBFBD>ռ<EFBFBD><D5BC>6.01M.ʣ<>ಿ<EFBFBD><E0B2BF>1.99M,<2C><><EFBFBD>ͻ<EFBFBD><CDBB>Լ<EFBFBD><D4BC><EFBFBD>
|
||||
#define FLASH_SECTOR_SIZE 512
|
||||
#define FLASH_SECTOR_COUNT 1024*8*2 // W25Q128,ǰ8M<38>ֽڸ<D6BD>FATFSռ<53><D5BC>
|
||||
#define FLASH_BLOCK_SIZE 8 // ÿ<><C3BF>BLOCK<43><4B>8<EFBFBD><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
FATFS fatfs_sd; // SD<53><44><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
FATFS fatfs_flash; // FLASH<53><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
FATFS fatfs_usb; // USB<53><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
FIL file_sd; // SD<53><44><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
FIL file_flash; // FLASH<53>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
FIL file_usb; // USB<53>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
// DWORD get_fattime (void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>庯<EFBFBD><E5BAAF><EFBFBD><EFBFBD>Ϊfatfsģ<73><C4A3>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ǰʱ<C7B0><CAB1>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
DWORD get_fattime (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// DSTATUS disk_status (BYTE pdrv)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>״̬
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: BYTE pdrv<72><76><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
DSTATUS disk_status(BYTE pdrv)
|
||||
{
|
||||
return RES_OK;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// DSTATUS disk_status (BYTE pdrv)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: BYTE pdrv<72><76><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
DSTATUS disk_initialize(BYTE pdrv)
|
||||
{
|
||||
u8 res=0;
|
||||
switch(pdrv)
|
||||
{
|
||||
case SD_CARD: // SD<53><44>
|
||||
res=SD_Init(); // SD<53><44><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
break;
|
||||
case USB_DISK: // U<><55>
|
||||
break;
|
||||
default:
|
||||
res=1;
|
||||
}
|
||||
if(res)
|
||||
return STA_NOINIT;
|
||||
else
|
||||
return 0; // <20><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// DRESULT disk_read (BYTE pdrv,BYTE *buff,DWORD sector,UINT count)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: BYTE pdrv<72><76><EFBFBD><EFBFBD><EFBFBD>̱<EFBFBD><CCB1><EFBFBD>0~9
|
||||
// BYTE *buff<66><66><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// DWORD sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// UINT count<6E><74><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
DRESULT disk_read (BYTE pdrv,BYTE *buff,DWORD sector,UINT count)
|
||||
{
|
||||
u8 res=0;
|
||||
if (!count)
|
||||
return RES_PARERR;// count<6E><74><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>ز<F2B7B5BB><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
switch(pdrv)
|
||||
{
|
||||
case SD_CARD: // SD<53><44>
|
||||
res=SD_ReadDisk(buff,sector,count);
|
||||
while(res) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
SD_Init(); // <20><><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC>SD<53><44>
|
||||
res=SD_ReadDisk(buff,sector,count);
|
||||
}
|
||||
break;
|
||||
case USB_DISK: // U<><55>
|
||||
|
||||
break;
|
||||
default:
|
||||
res=1;
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>SPI_SD_driver.c<>ķ<EFBFBD><C4B7><EFBFBD>ֵת<D6B5><D7AA>ff.c<>ķ<EFBFBD><C4B7><EFBFBD>ֵ
|
||||
if(res==0x00)
|
||||
return RES_OK;
|
||||
else
|
||||
return RES_ERROR;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// DRESULT disk_write (BYTE pdrv,const BYTE *buff,DWORD sector,UINT count)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: д<><D0B4><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: BYTE pdrv<72><76><EFBFBD><EFBFBD><EFBFBD>̱<EFBFBD><CCB1><EFBFBD>0~9
|
||||
// BYTE *buff<66><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// DWORD sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// UINT count<6E><74><EFBFBD><EFBFBD>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
DRESULT disk_write (BYTE pdrv,const BYTE *buff,DWORD sector,UINT count)
|
||||
{
|
||||
u8 res=0;
|
||||
if (!count)
|
||||
return RES_PARERR;// count<6E><74><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>ز<F2B7B5BB><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
switch(pdrv)
|
||||
{
|
||||
case SD_CARD: // SD<53><44>
|
||||
res=SD_WriteDisk((u8*)buff,sector,count);
|
||||
while(res) // д<><D0B4><EFBFBD><EFBFBD>
|
||||
{
|
||||
SD_Init(); //<2F><><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC>SD<53><44>
|
||||
res=SD_WriteDisk((u8*)buff,sector,count);
|
||||
//printf("sd wr error:%d\r\n",res);
|
||||
}
|
||||
break;
|
||||
case USB_DISK: // U<><55>
|
||||
|
||||
break;
|
||||
default:
|
||||
res=1;
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>SPI_SD_driver.c<>ķ<EFBFBD><C4B7><EFBFBD>ֵת<D6B5><D7AA>ff.c<>ķ<EFBFBD><C4B7><EFBFBD>ֵ
|
||||
if(res == 0x00)
|
||||
return RES_OK;
|
||||
else
|
||||
return RES_ERROR;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// DRESULT disk_ioctl (BYTE pdrv,BYTE cmd,void *buff)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: BYTE pdrv<72><76><EFBFBD><EFBFBD><EFBFBD>̱<EFBFBD><CCB1><EFBFBD>0~9
|
||||
// BYTE cmd<6D><64><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>
|
||||
// void *buff<66><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
DRESULT disk_ioctl (BYTE pdrv,BYTE cmd,void *buff)
|
||||
{
|
||||
DRESULT res;
|
||||
if(pdrv==SD_CARD)// SD<53><44>
|
||||
{
|
||||
switch(cmd)
|
||||
{
|
||||
case CTRL_SYNC:
|
||||
res = RES_OK;
|
||||
break;
|
||||
case GET_SECTOR_SIZE:
|
||||
*(DWORD*)buff = 512;
|
||||
res = RES_OK;
|
||||
break;
|
||||
case GET_BLOCK_SIZE:
|
||||
*(WORD*)buff = SDCardInfo.CardBlockSize;
|
||||
res = RES_OK;
|
||||
break;
|
||||
case GET_SECTOR_COUNT:
|
||||
*(DWORD*)buff = SDCardInfo.CardCapacity/512;
|
||||
res = RES_OK;
|
||||
break;
|
||||
default:
|
||||
res = RES_PARERR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(pdrv==USB_DISK) // U<><55>
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
res=RES_ERROR;// <20><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD>֧<EFBFBD><D6A7>
|
||||
|
||||
return res;
|
||||
}
|
||||
void *ff_memalloc (UINT size)
|
||||
{
|
||||
return (void*)mymalloc(SRAMEX,size);
|
||||
}
|
||||
//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||
void ff_memfree (void* mf)
|
||||
{
|
||||
myfree(SRAMEX,mf);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
90
HARDWARE/FATFS/diskio.h
Normal file
90
HARDWARE/FATFS/diskio.h
Normal file
@@ -0,0 +1,90 @@
|
||||
/*-----------------------------------------------------------------------/
|
||||
/ Low level disk interface modlue include file (C)ChaN, 2014 /
|
||||
/-----------------------------------------------------------------------*/
|
||||
|
||||
#ifndef _DISKIO_DEFINED
|
||||
#define _DISKIO_DEFINED
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define _USE_WRITE 1 /* 1: Enable disk_write function */
|
||||
#define _USE_IOCTL 1 /* 1: Enable disk_ioctl fucntion */
|
||||
|
||||
#include "integer.h"
|
||||
#include "ff.h"
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
typedef BYTE DSTATUS; // <20><><EFBFBD>̹<EFBFBD><CCB9>ܵ<EFBFBD>״̬
|
||||
// <20><><EFBFBD>̹<EFBFBD><CCB9>ܵĽ<DCB5><C4BD><EFBFBD>
|
||||
typedef enum {
|
||||
RES_OK = 0, // 0<><30><EFBFBD>ɹ<EFBFBD>
|
||||
RES_ERROR, // 1<><31><EFBFBD><EFBFBD>дʧ<D0B4><CAA7>
|
||||
RES_WRPRT, // 2<><32>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
RES_NOTRDY, // 3<><33>û<C3BB><D7BC><EFBFBD><EFBFBD>
|
||||
RES_PARERR // 4<><34><EFBFBD><EFBFBD>Ч<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
||||
} DRESULT;
|
||||
extern FATFS fatfs_sd; // SD<53><44><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
extern FATFS fatfs_flash; // FLASH<53><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
extern FATFS fatfs_usb; // USB<53><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
extern FIL file_sd; // SD<53><44><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
extern FIL file_flash; // FLASH<53>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
extern FIL file_usb; // USB<53>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// <20>궨<EFBFBD><EAB6A8>
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD>״̬λ
|
||||
#define STA_NOINIT 0x01 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ<EFBFBD><CABC>
|
||||
#define STA_NODISK 0x02 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>д<EFBFBD><D0B4><EFBFBD>
|
||||
#define STA_PROTECT 0x04 // д<><D0B4><EFBFBD><EFBFBD>
|
||||
|
||||
// disk_ioctrl<72><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Used by FatFs)
|
||||
#define CTRL_SYNC 0 // <20><><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(needed at _FS_READONLY == 0)
|
||||
#define GET_SECTOR_COUNT 1 // <20><>ȡ<EFBFBD><C8A1><EFBFBD>̴<EFBFBD>С(needed at _USE_MKFS == 1)
|
||||
#define GET_SECTOR_SIZE 2 // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(needed at _MAX_SS != _MIN_SS)
|
||||
#define GET_BLOCK_SIZE 3 // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С (needed at _USE_MKFS == 1)
|
||||
#define CTRL_TRIM 4 // ֪ͨ<CDA8>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>(needed at _USE_TRIM == 1)
|
||||
|
||||
// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Not used by FatFs)
|
||||
#define CTRL_POWER 5 // <20><>ȡ/<2F><><EFBFBD>õ<EFBFBD>Դ״̬
|
||||
#define CTRL_LOCK 6 // <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD>
|
||||
#define CTRL_EJECT 7 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define CTRL_FORMAT 8 // <20><>ý<EFBFBD><C3BD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
||||
|
||||
// MMC/SDC<44>ض<EFBFBD><D8B6><EFBFBD>ioctl<74><6C><EFBFBD><EFBFBD>
|
||||
#define MMC_GET_TYPE 10 // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define MMC_GET_CSD 11 // <20><>ȡCSD
|
||||
#define MMC_GET_CID 12 // <20><>ȡCID
|
||||
#define MMC_GET_OCR 13 // <20><>ȡOCR
|
||||
#define MMC_GET_SDSTAT 14 // <20><>ȡSD״̬
|
||||
#define ISDIO_READ 55 // <20><>SD iSDIO<49>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
#define ISDIO_WRITE 56 // <20><>SD iSDIO<49>Ĵ<EFBFBD><C4B4><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define ISDIO_MRITE 57 // <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4>SD iSDIO<49>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// ATA/CF<43>ض<EFBFBD><D8B6><EFBFBD>ioctl<74><6C><EFBFBD><EFBFBD>
|
||||
#define ATA_GET_REV 20 // <20><>ȡF/W revision
|
||||
#define ATA_GET_MODEL 21 // <20><>ȡ<EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define ATA_GET_SN 22 // <20><>ȡ<EFBFBD><C8A1><EFBFBD>к<EFBFBD>
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
extern DSTATUS disk_initialize (BYTE pdrv);
|
||||
extern DSTATUS disk_status (BYTE pdrv);
|
||||
extern DRESULT disk_read (BYTE pdrv, BYTE* buff, DWORD sector, UINT count);
|
||||
extern DRESULT disk_write (BYTE pdrv, const BYTE* buff, DWORD sector, UINT count);
|
||||
extern DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
|
||||
#endif
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
4677
HARDWARE/FATFS/ff.c
Normal file
4677
HARDWARE/FATFS/ff.c
Normal file
File diff suppressed because it is too large
Load Diff
350
HARDWARE/FATFS/ff.h
Normal file
350
HARDWARE/FATFS/ff.h
Normal file
@@ -0,0 +1,350 @@
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ FatFs - FAT file system module include R0.11a (C)ChaN, 2015
|
||||
/----------------------------------------------------------------------------/
|
||||
/ FatFs module is a free software that opened under license policy of
|
||||
/ following conditions.
|
||||
/
|
||||
/ Copyright (C) 2015, ChaN, all right reserved.
|
||||
/
|
||||
/ 1. Redistributions of source code must retain the above copyright notice,
|
||||
/ this condition and the following disclaimer.
|
||||
/
|
||||
/ This software is provided by the copyright holder and contributors "AS IS"
|
||||
/ and any warranties related to this software are DISCLAIMED.
|
||||
/ The copyright owner or contributors be NOT LIABLE for any damages caused
|
||||
/ by use of this software.
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
#ifndef _FATFS
|
||||
#define _FATFS 64180 /* Revision ID */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "integer.h" /* Basic integer types */
|
||||
#include "ffconf.h" /* FatFs configuration options */
|
||||
#if _FATFS != _FFCONF
|
||||
#error Wrong configuration file (ffconf.h).
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Definitions of volume management */
|
||||
|
||||
#if _MULTI_PARTITION /* Multiple partition configuration */
|
||||
typedef struct {
|
||||
BYTE pd; /* Physical drive number */
|
||||
BYTE pt; /* Partition: 0:Auto detect, 1-4:Forced partition) */
|
||||
} PARTITION;
|
||||
extern PARTITION VolToPart[]; /* Volume - Partition resolution table */
|
||||
#define LD2PD(vol) (VolToPart[vol].pd) /* Get physical drive number */
|
||||
#define LD2PT(vol) (VolToPart[vol].pt) /* Get partition index */
|
||||
|
||||
#else /* Single partition configuration */
|
||||
#define LD2PD(vol) (BYTE)(vol) /* Each logical drive is bound to the same physical drive number */
|
||||
#define LD2PT(vol) 0 /* Find first valid partition or in SFD */
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Type of path name strings on FatFs API */
|
||||
|
||||
#if _LFN_UNICODE /* Unicode string */
|
||||
#if !_USE_LFN
|
||||
#error _LFN_UNICODE must be 0 at non-LFN cfg.
|
||||
#endif
|
||||
#ifndef _INC_TCHAR
|
||||
typedef WCHAR TCHAR;
|
||||
#define _T(x) L ## x
|
||||
#define _TEXT(x) L ## x
|
||||
#endif
|
||||
|
||||
#else /* ANSI/OEM string */
|
||||
#ifndef _INC_TCHAR
|
||||
typedef char TCHAR;
|
||||
#define _T(x) x
|
||||
#define _TEXT(x) x
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* File system object structure (FATFS) */
|
||||
|
||||
typedef struct {
|
||||
BYTE fs_type; /* FAT sub-type (0:Not mounted) */
|
||||
BYTE drv; /* Physical drive number */
|
||||
BYTE csize; /* Sectors per cluster (1,2,4...128) */
|
||||
BYTE n_fats; /* Number of FAT copies (1 or 2) */
|
||||
BYTE wflag; /* win[] flag (b0:dirty) */
|
||||
BYTE fsi_flag; /* FSINFO flags (b7:disabled, b0:dirty) */
|
||||
WORD id; /* File system mount ID */
|
||||
WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
|
||||
#if _MAX_SS != _MIN_SS
|
||||
WORD ssize; /* Bytes per sector (512, 1024, 2048 or 4096) */
|
||||
#endif
|
||||
#if _FS_REENTRANT
|
||||
_SYNC_t sobj; /* Identifier of sync object */
|
||||
#endif
|
||||
#if !_FS_READONLY
|
||||
DWORD last_clust; /* Last allocated cluster */
|
||||
DWORD free_clust; /* Number of free clusters */
|
||||
#endif
|
||||
#if _FS_RPATH
|
||||
DWORD cdir; /* Current directory start cluster (0:root) */
|
||||
#endif
|
||||
DWORD n_fatent; /* Number of FAT entries, = number of clusters + 2 */
|
||||
DWORD fsize; /* Sectors per FAT */
|
||||
DWORD volbase; /* Volume start sector */
|
||||
DWORD fatbase; /* FAT start sector */
|
||||
DWORD dirbase; /* Root directory start sector (FAT32:Cluster#) */
|
||||
DWORD database; /* Data start sector */
|
||||
DWORD winsect; /* Current sector appearing in the win[] */
|
||||
BYTE win[_MAX_SS]; /* Disk access window for Directory, FAT (and file data at tiny cfg) */
|
||||
} FATFS;
|
||||
|
||||
|
||||
|
||||
/* File object structure (FIL) */
|
||||
|
||||
typedef struct {
|
||||
FATFS* fs; /* Pointer to the related file system object (**do not change order**) */
|
||||
WORD id; /* Owner file system mount ID (**do not change order**) */
|
||||
BYTE flag; /* Status flags */
|
||||
BYTE err; /* Abort flag (error code) */
|
||||
DWORD fptr; /* File read/write pointer (Zeroed on file open) */
|
||||
DWORD fsize; /* File size */
|
||||
DWORD sclust; /* File start cluster (0:no cluster chain, always 0 when fsize is 0) */
|
||||
DWORD clust; /* Current cluster of fpter (not valid when fprt is 0) */
|
||||
DWORD dsect; /* Sector number appearing in buf[] (0:invalid) */
|
||||
#if !_FS_READONLY
|
||||
DWORD dir_sect; /* Sector number containing the directory entry */
|
||||
BYTE* dir_ptr; /* Pointer to the directory entry in the win[] */
|
||||
#endif
|
||||
#if _USE_FASTSEEK
|
||||
DWORD* cltbl; /* Pointer to the cluster link map table (Nulled on file open) */
|
||||
#endif
|
||||
#if _FS_LOCK
|
||||
UINT lockid; /* File lock ID origin from 1 (index of file semaphore table Files[]) */
|
||||
#endif
|
||||
#if !_FS_TINY
|
||||
BYTE buf[_MAX_SS]; /* File private data read/write window */
|
||||
#endif
|
||||
} FIL;
|
||||
|
||||
|
||||
|
||||
/* Directory object structure (DIR) */
|
||||
|
||||
typedef struct {
|
||||
FATFS* fs; /* Pointer to the owner file system object (**do not change order**) */
|
||||
WORD id; /* Owner file system mount ID (**do not change order**) */
|
||||
WORD index; /* Current read/write index number */
|
||||
DWORD sclust; /* Table start cluster (0:Root dir) */
|
||||
DWORD clust; /* Current cluster */
|
||||
DWORD sect; /* Current sector */
|
||||
BYTE* dir; /* Pointer to the current SFN entry in the win[] */
|
||||
BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */
|
||||
#if _FS_LOCK
|
||||
UINT lockid; /* File lock ID (index of file semaphore table Files[]) */
|
||||
#endif
|
||||
#if _USE_LFN
|
||||
WCHAR* lfn; /* Pointer to the LFN working buffer */
|
||||
WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */
|
||||
#endif
|
||||
#if _USE_FIND
|
||||
const TCHAR* pat; /* Pointer to the name matching pattern */
|
||||
#endif
|
||||
} DIR;
|
||||
|
||||
|
||||
|
||||
/* File information structure (FILINFO) */
|
||||
|
||||
typedef struct {
|
||||
DWORD fsize; /* File size */
|
||||
WORD fdate; /* Last modified date */
|
||||
WORD ftime; /* Last modified time */
|
||||
BYTE fattrib; /* Attribute */
|
||||
TCHAR fname[13]; /* Short file name (8.3 format) */
|
||||
#if _USE_LFN
|
||||
TCHAR* lfname; /* Pointer to the LFN buffer */
|
||||
UINT lfsize; /* Size of LFN buffer in TCHAR */
|
||||
#endif
|
||||
} FILINFO;
|
||||
|
||||
|
||||
|
||||
/* File function return code (FRESULT) */
|
||||
|
||||
typedef enum {
|
||||
FR_OK = 0, /* (0) Succeeded */
|
||||
FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */
|
||||
FR_INT_ERR, /* (2) Assertion failed */
|
||||
FR_NOT_READY, /* (3) The physical drive cannot work */
|
||||
FR_NO_FILE, /* (4) Could not find the file */
|
||||
FR_NO_PATH, /* (5) Could not find the path */
|
||||
FR_INVALID_NAME, /* (6) The path name format is invalid */
|
||||
FR_DENIED, /* (7) Access denied due to prohibited access or directory full */
|
||||
FR_EXIST, /* (8) Access denied due to prohibited access */
|
||||
FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
|
||||
FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
|
||||
FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
|
||||
FR_NOT_ENABLED, /* (12) The volume has no work area */
|
||||
FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
|
||||
FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */
|
||||
FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
|
||||
FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
|
||||
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
||||
FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_LOCK */
|
||||
FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
||||
} FRESULT;
|
||||
|
||||
|
||||
|
||||
/*--------------------------------------------------------------*/
|
||||
/* FatFs module application interface */
|
||||
|
||||
FRESULT f_open (FIL* fp, const TCHAR* path, BYTE mode); /* Open or create a file */
|
||||
FRESULT f_close (FIL* fp); /* Close an open file object */
|
||||
FRESULT f_read (FIL* fp, void* buff, UINT btr, UINT* br); /* Read data from a file */
|
||||
FRESULT f_write (FIL* fp, const void* buff, UINT btw, UINT* bw); /* Write data to a file */
|
||||
FRESULT f_forward (FIL* fp, UINT(*func)(const BYTE*,UINT), UINT btf, UINT* bf); /* Forward data to the stream */
|
||||
FRESULT f_lseek (FIL* fp, DWORD ofs); /* Move file pointer of a file object */
|
||||
FRESULT f_truncate (FIL* fp); /* Truncate file */
|
||||
FRESULT f_sync (FIL* fp); /* Flush cached data of a writing file */
|
||||
FRESULT f_opendir (DIR* dp, const TCHAR* path); /* Open a directory */
|
||||
FRESULT f_closedir (DIR* dp); /* Close an open directory */
|
||||
FRESULT f_readdir (DIR* dp, FILINFO* fno); /* Read a directory item */
|
||||
FRESULT f_findfirst (DIR* dp, FILINFO* fno, const TCHAR* path, const TCHAR* pattern); /* Find first file */
|
||||
FRESULT f_findnext (DIR* dp, FILINFO* fno); /* Find next file */
|
||||
FRESULT f_mkdir (const TCHAR* path); /* Create a sub directory */
|
||||
FRESULT f_unlink (const TCHAR* path); /* Delete an existing file or directory */
|
||||
FRESULT f_rename (const TCHAR* path_old, const TCHAR* path_new); /* Rename/Move a file or directory */
|
||||
FRESULT f_stat (const TCHAR* path, FILINFO* fno); /* Get file status */
|
||||
FRESULT f_chmod (const TCHAR* path, BYTE attr, BYTE mask); /* Change attribute of the file/dir */
|
||||
FRESULT f_utime (const TCHAR* path, const FILINFO* fno); /* Change times-tamp of the file/dir */
|
||||
FRESULT f_chdir (const TCHAR* path); /* Change current directory */
|
||||
FRESULT f_chdrive (const TCHAR* path); /* Change current drive */
|
||||
FRESULT f_getcwd (TCHAR* buff, UINT len); /* Get current directory */
|
||||
FRESULT f_getfree (const TCHAR* path, DWORD* nclst, FATFS** fatfs); /* Get number of free clusters on the drive */
|
||||
FRESULT f_getlabel (const TCHAR* path, TCHAR* label, DWORD* vsn); /* Get volume label */
|
||||
FRESULT f_setlabel (const TCHAR* label); /* Set volume label */
|
||||
FRESULT f_mount (FATFS* fs, const TCHAR* path, BYTE opt); /* Mount/Unmount a logical drive */
|
||||
FRESULT f_mkfs (const TCHAR* path, BYTE sfd, UINT au); /* Create a file system on the volume */
|
||||
FRESULT f_fdisk (BYTE pdrv, const DWORD szt[], void* work); /* Divide a physical drive into some partitions */
|
||||
int f_putc (TCHAR c, FIL* fp); /* Put a character to the file */
|
||||
int f_puts (const TCHAR* str, FIL* cp); /* Put a string to the file */
|
||||
int f_printf (FIL* fp, const TCHAR* str, ...); /* Put a formatted string to the file */
|
||||
TCHAR* f_gets (TCHAR* buff, int len, FIL* fp); /* Get a string from the file */
|
||||
|
||||
#define f_eof(fp) ((int)((fp)->fptr == (fp)->fsize))
|
||||
#define f_error(fp) ((fp)->err)
|
||||
#define f_tell(fp) ((fp)->fptr)
|
||||
#define f_size(fp) ((fp)->fsize)
|
||||
#define f_rewind(fp) f_lseek((fp), 0)
|
||||
#define f_rewinddir(dp) f_readdir((dp), 0)
|
||||
|
||||
#ifndef EOF
|
||||
#define EOF (-1)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
/*--------------------------------------------------------------*/
|
||||
/* Additional user defined functions */
|
||||
|
||||
/* RTC function */
|
||||
#if !_FS_READONLY && !_FS_NORTC
|
||||
DWORD get_fattime (void);
|
||||
#endif
|
||||
|
||||
/* Unicode support functions */
|
||||
#if _USE_LFN /* Unicode - OEM code conversion */
|
||||
WCHAR ff_convert (WCHAR chr, UINT dir); /* OEM-Unicode bidirectional conversion */
|
||||
WCHAR ff_wtoupper (WCHAR chr); /* Unicode upper-case conversion */
|
||||
#if _USE_LFN == 3 /* Memory functions */
|
||||
void* ff_memalloc (UINT msize); /* Allocate memory block */
|
||||
void ff_memfree (void* mblock); /* Free memory block */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Sync functions */
|
||||
#if _FS_REENTRANT
|
||||
int ff_cre_syncobj (BYTE vol, _SYNC_t* sobj); /* Create a sync object */
|
||||
int ff_req_grant (_SYNC_t sobj); /* Lock sync object */
|
||||
void ff_rel_grant (_SYNC_t sobj); /* Unlock sync object */
|
||||
int ff_del_syncobj (_SYNC_t sobj); /* Delete a sync object */
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
/*--------------------------------------------------------------*/
|
||||
/* Flags and offset address */
|
||||
|
||||
|
||||
/* File access control and file status flags (FIL.flag) */
|
||||
|
||||
#define FA_READ 0x01
|
||||
#define FA_OPEN_EXISTING 0x00
|
||||
|
||||
#if !_FS_READONLY
|
||||
#define FA_WRITE 0x02
|
||||
#define FA_CREATE_NEW 0x04
|
||||
#define FA_CREATE_ALWAYS 0x08
|
||||
#define FA_OPEN_ALWAYS 0x10
|
||||
#define FA__WRITTEN 0x20
|
||||
#define FA__DIRTY 0x40
|
||||
#endif
|
||||
|
||||
|
||||
/* FAT sub type (FATFS.fs_type) */
|
||||
|
||||
#define FS_FAT12 1
|
||||
#define FS_FAT16 2
|
||||
#define FS_FAT32 3
|
||||
|
||||
|
||||
/* File attribute bits for directory entry */
|
||||
|
||||
#define AM_RDO 0x01 /* Read only */
|
||||
#define AM_HID 0x02 /* Hidden */
|
||||
#define AM_SYS 0x04 /* System */
|
||||
#define AM_VOL 0x08 /* Volume label */
|
||||
#define AM_LFN 0x0F /* LFN entry */
|
||||
#define AM_DIR 0x10 /* Directory */
|
||||
#define AM_ARC 0x20 /* Archive */
|
||||
#define AM_MASK 0x3F /* Mask of defined bits */
|
||||
|
||||
|
||||
/* Fast seek feature */
|
||||
#define CREATE_LINKMAP 0xFFFFFFFF
|
||||
|
||||
|
||||
|
||||
/*--------------------------------*/
|
||||
/* Multi-byte word access macros */
|
||||
|
||||
#if _WORD_ACCESS == 1 /* Enable word access to the FAT structure */
|
||||
#define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr))
|
||||
#define LD_DWORD(ptr) (DWORD)(*(DWORD*)(BYTE*)(ptr))
|
||||
#define ST_WORD(ptr,val) *(WORD*)(BYTE*)(ptr)=(WORD)(val)
|
||||
#define ST_DWORD(ptr,val) *(DWORD*)(BYTE*)(ptr)=(DWORD)(val)
|
||||
#else /* Use byte-by-byte access to the FAT structure */
|
||||
#define LD_WORD(ptr) (WORD)(((WORD)*((BYTE*)(ptr)+1)<<8)|(WORD)*(BYTE*)(ptr))
|
||||
#define LD_DWORD(ptr) (DWORD)(((DWORD)*((BYTE*)(ptr)+3)<<24)|((DWORD)*((BYTE*)(ptr)+2)<<16)|((WORD)*((BYTE*)(ptr)+1)<<8)|*(BYTE*)(ptr))
|
||||
#define ST_WORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *((BYTE*)(ptr)+1)=(BYTE)((WORD)(val)>>8)
|
||||
#define ST_DWORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *((BYTE*)(ptr)+1)=(BYTE)((WORD)(val)>>8); *((BYTE*)(ptr)+2)=(BYTE)((DWORD)(val)>>16); *((BYTE*)(ptr)+3)=(BYTE)((DWORD)(val)>>24)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _FATFS */
|
||||
276
HARDWARE/FATFS/ffconf.h
Normal file
276
HARDWARE/FATFS/ffconf.h
Normal file
@@ -0,0 +1,276 @@
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ FatFs - FAT file system module configuration file R0.11a (C)ChaN, 2015
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _FFCONF 64180 /* Revision ID */
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ Function Configurations
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _FS_READONLY 0
|
||||
/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
|
||||
/ Read-only configuration removes writing API functions, f_write(), f_sync(),
|
||||
/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
|
||||
/ and optional writing functions as well. */
|
||||
|
||||
|
||||
#define _FS_MINIMIZE 0
|
||||
/* This option defines minimization level to remove some basic API functions.
|
||||
/
|
||||
/ 0: All basic functions are enabled.
|
||||
/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_chmod(), f_utime(),
|
||||
/ f_truncate() and f_rename() function are removed.
|
||||
/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
|
||||
/ 3: f_lseek() function is removed in addition to 2. */
|
||||
|
||||
|
||||
#define _USE_STRFUNC 0
|
||||
/* This option switches string functions, f_gets(), f_putc(), f_puts() and
|
||||
/ f_printf().
|
||||
/
|
||||
/ 0: Disable string functions.
|
||||
/ 1: Enable without LF-CRLF conversion.
|
||||
/ 2: Enable with LF-CRLF conversion. */
|
||||
|
||||
|
||||
#define _USE_FIND 0
|
||||
/* This option switches filtered directory read feature and related functions,
|
||||
/ f_findfirst() and f_findnext(). (0:Disable or 1:Enable) */
|
||||
|
||||
|
||||
#define _USE_MKFS 0
|
||||
/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
|
||||
|
||||
|
||||
#define _USE_FASTSEEK 0
|
||||
/* This option switches fast seek feature. (0:Disable or 1:Enable) */
|
||||
|
||||
|
||||
#define _USE_LABEL 0
|
||||
/* This option switches volume label functions, f_getlabel() and f_setlabel().
|
||||
/ (0:Disable or 1:Enable) */
|
||||
|
||||
|
||||
#define _USE_FORWARD 0
|
||||
/* This option switches f_forward() function. (0:Disable or 1:Enable)
|
||||
/ To enable it, also _FS_TINY need to be set to 1. */
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ Locale and Namespace Configurations
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _CODE_PAGE 936
|
||||
/* This option specifies the OEM code page to be used on the target system.
|
||||
/ Incorrect setting of the code page can cause a file open failure.
|
||||
/
|
||||
/ 1 - ASCII (No extended character. Non-LFN cfg. only)
|
||||
/ 437 - U.S.
|
||||
/ 720 - Arabic
|
||||
/ 737 - Greek
|
||||
/ 771 - KBL
|
||||
/ 775 - Baltic
|
||||
/ 850 - Latin 1
|
||||
/ 852 - Latin 2
|
||||
/ 855 - Cyrillic
|
||||
/ 857 - Turkish
|
||||
/ 860 - Portuguese
|
||||
/ 861 - Icelandic
|
||||
/ 862 - Hebrew
|
||||
/ 863 - Canadian French
|
||||
/ 864 - Arabic
|
||||
/ 865 - Nordic
|
||||
/ 866 - Russian
|
||||
/ 869 - Greek 2
|
||||
/ 932 - Japanese (DBCS)
|
||||
/ 936 - Simplified Chinese (DBCS)
|
||||
/ 949 - Korean (DBCS)
|
||||
/ 950 - Traditional Chinese (DBCS)
|
||||
*/
|
||||
|
||||
|
||||
#define _USE_LFN 3
|
||||
#define _MAX_LFN 255
|
||||
/* The _USE_LFN option switches the LFN feature.
|
||||
/
|
||||
/ 0: Disable LFN feature. _MAX_LFN has no effect.
|
||||
/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
|
||||
/ 2: Enable LFN with dynamic working buffer on the STACK.
|
||||
/ 3: Enable LFN with dynamic working buffer on the HEAP.
|
||||
/
|
||||
/ When enable the LFN feature, Unicode handling functions (option/unicode.c) must
|
||||
/ be added to the project. The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes.
|
||||
/ When use stack for the working buffer, take care on stack overflow. When use heap
|
||||
/ memory for the working buffer, memory management functions, ff_memalloc() and
|
||||
/ ff_memfree(), must be added to the project. */
|
||||
|
||||
|
||||
#define _LFN_UNICODE 0
|
||||
/* This option switches character encoding on the API. (0:ANSI/OEM or 1:Unicode)
|
||||
/ To use Unicode string for the path name, enable LFN feature and set _LFN_UNICODE
|
||||
/ to 1. This option also affects behavior of string I/O functions. */
|
||||
|
||||
|
||||
#define _STRF_ENCODE 3
|
||||
/* When _LFN_UNICODE is 1, this option selects the character encoding on the file to
|
||||
/ be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf().
|
||||
/
|
||||
/ 0: ANSI/OEM
|
||||
/ 1: UTF-16LE
|
||||
/ 2: UTF-16BE
|
||||
/ 3: UTF-8
|
||||
/
|
||||
/ When _LFN_UNICODE is 0, this option has no effect. */
|
||||
|
||||
|
||||
#define _FS_RPATH 0
|
||||
/* This option configures relative path feature.
|
||||
/
|
||||
/ 0: Disable relative path feature and remove related functions.
|
||||
/ 1: Enable relative path feature. f_chdir() and f_chdrive() are available.
|
||||
/ 2: f_getcwd() function is available in addition to 1.
|
||||
/
|
||||
/ Note that directory items read via f_readdir() are affected by this option. */
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ Drive/Volume Configurations
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _VOLUMES 4
|
||||
/* Number of volumes (logical drives) to be used. */
|
||||
|
||||
|
||||
#define _STR_VOLUME_ID 0
|
||||
#define _VOLUME_STRS "RAM","NAND","CF","SD1","SD2","USB1","USB2","USB3"
|
||||
/* _STR_VOLUME_ID option switches string volume ID feature.
|
||||
/ When _STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive
|
||||
/ number in the path name. _VOLUME_STRS defines the drive ID strings for each
|
||||
/ logical drives. Number of items must be equal to _VOLUMES. Valid characters for
|
||||
/ the drive ID strings are: A-Z and 0-9. */
|
||||
|
||||
|
||||
#define _MULTI_PARTITION 0
|
||||
/* This option switches multi-partition feature. By default (0), each logical drive
|
||||
/ number is bound to the same physical drive number and only an FAT volume found on
|
||||
/ the physical drive will be mounted. When multi-partition feature is enabled (1),
|
||||
/ each logical drive number is bound to arbitrary physical drive and partition
|
||||
/ listed in the VolToPart[]. Also f_fdisk() funciton will be available. */
|
||||
|
||||
|
||||
#define _MIN_SS 512
|
||||
#define _MAX_SS 512
|
||||
/* These options configure the range of sector size to be supported. (512, 1024,
|
||||
/ 2048 or 4096) Always set both 512 for most systems, all type of memory cards and
|
||||
/ harddisk. But a larger value may be required for on-board flash memory and some
|
||||
/ type of optical media. When _MAX_SS is larger than _MIN_SS, FatFs is configured
|
||||
/ to variable sector size and GET_SECTOR_SIZE command must be implemented to the
|
||||
/ disk_ioctl() function. */
|
||||
|
||||
|
||||
#define _USE_TRIM 0
|
||||
/* This option switches ATA-TRIM feature. (0:Disable or 1:Enable)
|
||||
/ To enable Trim feature, also CTRL_TRIM command should be implemented to the
|
||||
/ disk_ioctl() function. */
|
||||
|
||||
|
||||
#define _FS_NOFSINFO 0
|
||||
/* If you need to know correct free space on the FAT32 volume, set bit 0 of this
|
||||
/ option, and f_getfree() function at first time after volume mount will force
|
||||
/ a full FAT scan. Bit 1 controls the use of last allocated cluster number.
|
||||
/
|
||||
/ bit0=0: Use free cluster count in the FSINFO if available.
|
||||
/ bit0=1: Do not trust free cluster count in the FSINFO.
|
||||
/ bit1=0: Use last allocated cluster number in the FSINFO if available.
|
||||
/ bit1=1: Do not trust last allocated cluster number in the FSINFO.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ System Configurations
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _FS_TINY 0
|
||||
/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
|
||||
/ At the tiny configuration, size of the file object (FIL) is reduced _MAX_SS
|
||||
/ bytes. Instead of private sector buffer eliminated from the file object,
|
||||
/ common sector buffer in the file system object (FATFS) is used for the file
|
||||
/ data transfer. */
|
||||
|
||||
|
||||
#define _FS_NORTC 0
|
||||
#define _NORTC_MON 1
|
||||
#define _NORTC_MDAY 1
|
||||
#define _NORTC_YEAR 2015
|
||||
/* The _FS_NORTC option switches timestamp feature. If the system does not have
|
||||
/ an RTC function or valid timestamp is not needed, set _FS_NORTC to 1 to disable
|
||||
/ the timestamp feature. All objects modified by FatFs will have a fixed timestamp
|
||||
/ defined by _NORTC_MON, _NORTC_MDAY and _NORTC_YEAR.
|
||||
/ When timestamp feature is enabled (_FS_NORTC == 0), get_fattime() function need
|
||||
/ to be added to the project to read current time form RTC. _NORTC_MON,
|
||||
/ _NORTC_MDAY and _NORTC_YEAR have no effect.
|
||||
/ These options have no effect at read-only configuration (_FS_READONLY == 1). */
|
||||
|
||||
|
||||
#define _FS_LOCK 0
|
||||
/* The _FS_LOCK option switches file lock feature to control duplicated file open
|
||||
/ and illegal operation to open objects. This option must be 0 when _FS_READONLY
|
||||
/ is 1.
|
||||
/
|
||||
/ 0: Disable file lock feature. To avoid volume corruption, application program
|
||||
/ should avoid illegal open, remove and rename to the open objects.
|
||||
/ >0: Enable file lock feature. The value defines how many files/sub-directories
|
||||
/ can be opened simultaneously under file lock control. Note that the file
|
||||
/ lock feature is independent of re-entrancy. */
|
||||
|
||||
|
||||
#define _FS_REENTRANT 0
|
||||
#define _FS_TIMEOUT 1000
|
||||
#define _SYNC_t HANDLE
|
||||
/* The _FS_REENTRANT option switches the re-entrancy (thread safe) of the FatFs
|
||||
/ module itself. Note that regardless of this option, file access to different
|
||||
/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs()
|
||||
/ and f_fdisk() function, are always not re-entrant. Only file/directory access
|
||||
/ to the same volume is under control of this feature.
|
||||
/
|
||||
/ 0: Disable re-entrancy. _FS_TIMEOUT and _SYNC_t have no effect.
|
||||
/ 1: Enable re-entrancy. Also user provided synchronization handlers,
|
||||
/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj()
|
||||
/ function, must be added to the project. Samples are available in
|
||||
/ option/syscall.c.
|
||||
/
|
||||
/ The _FS_TIMEOUT defines timeout period in unit of time tick.
|
||||
/ The _SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*,
|
||||
/ SemaphoreHandle_t and etc.. A header file for O/S definitions needs to be
|
||||
/ included somewhere in the scope of ff.c. */
|
||||
|
||||
|
||||
#define _WORD_ACCESS 0
|
||||
/* The _WORD_ACCESS option is an only platform dependent option. It defines
|
||||
/ which access method is used to the word data on the FAT volume.
|
||||
/
|
||||
/ 0: Byte-by-byte access. Always compatible with all platforms.
|
||||
/ 1: Word access. Do not choose this unless under both the following conditions.
|
||||
/
|
||||
/ * Address misaligned memory access is always allowed to ALL instructions.
|
||||
/ * Byte order on the memory is little-endian.
|
||||
/
|
||||
/ If it is the case, _WORD_ACCESS can also be set to 1 to reduce code size.
|
||||
/ Following table shows allowable settings of some type of processors.
|
||||
/
|
||||
/ ARM7TDMI 0 *2 ColdFire 0 *1 V850E 0 *2
|
||||
/ Cortex-M3 0 *3 Z80 0/1 V850ES 0/1
|
||||
/ Cortex-M0 0 *2 x86 0/1 TLCS-870 0/1
|
||||
/ AVR 0/1 RX600(LE) 0/1 TLCS-900 0/1
|
||||
/ AVR32 0 *1 RL78 0 *2 R32C 0 *2
|
||||
/ PIC18 0/1 SH-2 0 *1 M16C 0/1
|
||||
/ PIC24 0 *2 H8S 0 *1 MSP430 0 *2
|
||||
/ PIC32 0 *1 H8/300H 0 *1 8051 0/1
|
||||
/
|
||||
/ *1:Big-endian.
|
||||
/ *2:Unaligned memory access is not supported.
|
||||
/ *3:Some compilers generate LDM/STM for mem_cpy function.
|
||||
*/
|
||||
|
||||
33
HARDWARE/FATFS/integer.h
Normal file
33
HARDWARE/FATFS/integer.h
Normal file
@@ -0,0 +1,33 @@
|
||||
/*-------------------------------------------*/
|
||||
/* Integer type definitions for FatFs module */
|
||||
/*-------------------------------------------*/
|
||||
|
||||
#ifndef _FF_INTEGER
|
||||
#define _FF_INTEGER
|
||||
|
||||
#ifdef _WIN32 /* Development platform */
|
||||
|
||||
#include <windows.h>
|
||||
#include <tchar.h>
|
||||
|
||||
#else /* Embedded platform */
|
||||
|
||||
/* This type MUST be 8-bit */
|
||||
typedef unsigned char BYTE;
|
||||
|
||||
/* These types MUST be 16-bit */
|
||||
typedef short SHORT;
|
||||
typedef unsigned short WORD;
|
||||
typedef unsigned short WCHAR;
|
||||
|
||||
/* These types MUST be 16-bit or 32-bit */
|
||||
typedef int INT;
|
||||
typedef unsigned int UINT;
|
||||
|
||||
/* These types MUST be 32-bit */
|
||||
typedef long LONG;
|
||||
typedef unsigned long DWORD;
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
119
HARDWARE/GPS/gps.c
Normal file
119
HARDWARE/GPS/gps.c
Normal file
@@ -0,0 +1,119 @@
|
||||
#include "gps.h"
|
||||
#include "stdio.h"
|
||||
#include "string.h"
|
||||
#include "math.h"
|
||||
|
||||
uint32_t UTC;
|
||||
char SetTimeZone[25] = {0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xf1, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c};
|
||||
|
||||
u8 NMEA_Comma_Pos(u8 *buf, u8 cx)
|
||||
{
|
||||
u8 *p = buf;
|
||||
while (cx)
|
||||
{
|
||||
if (*buf == '*' || *buf < ' ' || *buf > 'z')
|
||||
return 0XFF; // <20><><EFBFBD><EFBFBD>'*'<27><><EFBFBD>߷Ƿ<DFB7><C7B7>ַ<EFBFBD>,<2C><EFBFBD><F2B2BBB4>ڵ<EFBFBD>cx<63><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (*buf == ',')
|
||||
cx--;
|
||||
buf++;
|
||||
}
|
||||
return buf - p;
|
||||
}
|
||||
|
||||
u32 NMEA_Pow(u8 m, u8 n)
|
||||
{
|
||||
u32 result = 1;
|
||||
while (n--)
|
||||
result *= m;
|
||||
return result;
|
||||
}
|
||||
|
||||
int NMEA_Str2num(u8 *buf, u8 *dx)
|
||||
{
|
||||
u8 *p = buf;
|
||||
u32 ires = 0, fres = 0;
|
||||
u8 ilen = 0, flen = 0, i;
|
||||
u8 mask = 0;
|
||||
int res;
|
||||
while (1) // <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
{
|
||||
if (*p == '-')
|
||||
{
|
||||
mask |= 0X02;
|
||||
p++;
|
||||
} // <20>Ǹ<EFBFBD><C7B8><EFBFBD>
|
||||
if (*p == ',' || (*p == '*'))
|
||||
break; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (*p == '.')
|
||||
{
|
||||
mask |= 0X01;
|
||||
p++;
|
||||
} // <20><><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else if (*p > '9' || (*p < '0')) // <20>зǷ<D0B7><C7B7>ַ<EFBFBD>
|
||||
{
|
||||
ilen = 0;
|
||||
flen = 0;
|
||||
break;
|
||||
}
|
||||
if (mask & 0X01)
|
||||
flen++;
|
||||
else
|
||||
ilen++;
|
||||
p++;
|
||||
}
|
||||
if (mask & 0X02)
|
||||
buf++; // ȥ<><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (i = 0; i < ilen; i++) // <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
ires += NMEA_Pow(10, ilen - 1 - i) * (buf[i] - '0');
|
||||
}
|
||||
if (flen > 5)
|
||||
flen = 5; // <20><><EFBFBD><EFBFBD>ȡ5λС<CEBB><D0A1>
|
||||
*dx = flen; // С<><D0A1><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||
for (i = 0; i < flen; i++) // <20>õ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
fres += NMEA_Pow(10, flen - 1 - i) * (buf[ilen + 1 + i] - '0');
|
||||
}
|
||||
res = ires * NMEA_Pow(10, flen) + fres;
|
||||
if (mask & 0X02)
|
||||
res = -res;
|
||||
return res;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>GPRMC<4D><43>Ϣ
|
||||
// gpsx: nmea<65><61>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
// buf: <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>GPS<50><53><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
void NMEA_GPRMC_Analysis(nmea_msg *gpsx, u8 *buf)
|
||||
{
|
||||
u8 *p1, dx;
|
||||
u8 posx;
|
||||
u32 temp;
|
||||
p1 = (u8 *)strstr((const char *)buf, "RMC"); // "$GPRMC", <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>&<26><>GPRMC<4D>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ֻ<EFBFBD>ж<EFBFBD>GPRMC.
|
||||
posx = NMEA_Comma_Pos(p1, 1); // <20>õ<EFBFBD>UTCʱ<43><CAB1>
|
||||
if (posx != 0XFF)
|
||||
{
|
||||
UTC = NMEA_Str2num(p1 + posx, &dx) / NMEA_Pow(10, dx);
|
||||
temp = (NMEA_Str2num(p1 + posx, &dx) / NMEA_Pow(10, dx)); // <20>õ<EFBFBD>UTCʱ<43><CAB1>, ȥ<><C8A5>ms
|
||||
|
||||
gpsx->utc.hour = temp / 10000 + 8; // UTCʱ<43><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
gpsx->utc.min = (temp / 100) % 100;
|
||||
gpsx->utc.sec = temp % 100;
|
||||
}
|
||||
|
||||
posx = NMEA_Comma_Pos(p1, 9); // <20>õ<EFBFBD>UTC<54><43><EFBFBD><EFBFBD>
|
||||
if (posx != 0XFF)
|
||||
{
|
||||
temp = NMEA_Str2num(p1 + posx, &dx); // <20>õ<EFBFBD>UTC<54><43><EFBFBD><EFBFBD>
|
||||
gpsx->utc.date = temp / 10000;
|
||||
gpsx->utc.month = (temp / 100) % 100;
|
||||
gpsx->utc.year = 2000 + temp % 100;
|
||||
}
|
||||
}
|
||||
|
||||
// <20><>ȡNMEA-0183<38><33>Ϣ
|
||||
// gpsx: nmea<65><61>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
// buf: <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>GPS<50><53><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
void GPS_Analysis(nmea_msg *gpsx, u8 *buf)
|
||||
{
|
||||
NMEA_GPRMC_Analysis(gpsx, buf); // GPRMC<4D><43><EFBFBD><EFBFBD>
|
||||
}
|
||||
30
HARDWARE/GPS/gps.h
Normal file
30
HARDWARE/GPS/gps.h
Normal file
@@ -0,0 +1,30 @@
|
||||
#ifndef __GPS_H
|
||||
#define __GPS_H
|
||||
#include "sys.h"
|
||||
|
||||
// UTCʱ<43><CAB1><EFBFBD><EFBFBD>Ϣ
|
||||
__packed typedef struct
|
||||
{
|
||||
u16 year; //<2F><><EFBFBD><EFBFBD>
|
||||
u8 month; //<2F>·<EFBFBD>
|
||||
u8 date; //<2F><><EFBFBD><EFBFBD>
|
||||
u8 hour; //Сʱ
|
||||
u8 min; //<2F><><EFBFBD><EFBFBD>
|
||||
u8 sec; //<2F><><EFBFBD><EFBFBD>
|
||||
}nmea_utc_time;
|
||||
|
||||
// NMEA 0183 Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>Žṹ<C5BD><E1B9B9>
|
||||
__packed typedef struct
|
||||
{
|
||||
nmea_utc_time utc; // UTCʱ<43><CAB1>
|
||||
}nmea_msg;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int NMEA_Str2num(u8 *buf,u8*dx);
|
||||
void NMEA_GPRMC_Analysis(nmea_msg *gpsx, u8 *buf);
|
||||
void GPS_Analysis(nmea_msg *gpsx, u8 *buf);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -1,61 +1,82 @@
|
||||
#include "key.h"
|
||||
#include "delay.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32F429<32><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//KEY<45><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/5
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {BUTTON_KEY1_GPIO_PORT,BUTTON_KEY2_GPIO_PORT,BUTTON_KEY3_GPIO_PORT,BUTTON_KEY4_GPIO_PORT};
|
||||
const uint16_t BUTTON_PIN[BUTTONn] = {BUTTON_KEY1_PIN,BUTTON_KEY2_PIN,BUTTON_KEY3_PIN,BUTTON_KEY4_PIN};
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void KEY_Init(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶˿<CCB6>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void KEY_Init(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_Initure;
|
||||
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE(); //<2F><><EFBFBD><EFBFBD>GPIOAʱ<41><CAB1>
|
||||
__HAL_RCC_GPIOC_CLK_ENABLE(); //<2F><><EFBFBD><EFBFBD>GPIOCʱ<43><CAB1>
|
||||
__HAL_RCC_GPIOH_CLK_ENABLE(); //<2F><><EFBFBD><EFBFBD>GPIOHʱ<48><CAB1>
|
||||
|
||||
GPIO_Initure.Pin=GPIO_PIN_0; //PA0
|
||||
GPIO_Initure.Mode=GPIO_MODE_INPUT; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_PULLDOWN; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //<2F><><EFBFBD><EFBFBD>
|
||||
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
|
||||
|
||||
GPIO_Initure.Pin=GPIO_PIN_13; //PC13
|
||||
GPIO_Initure.Mode=GPIO_MODE_INPUT; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //<2F><><EFBFBD><EFBFBD>
|
||||
HAL_GPIO_Init(GPIOC,&GPIO_Initure);
|
||||
|
||||
GPIO_Initure.Pin=GPIO_PIN_2|GPIO_PIN_3; //PH2,3
|
||||
HAL_GPIO_Init(GPIOH,&GPIO_Initure);
|
||||
BSP_KEY_Init(BUTTON_KEY1); // KEY1<59><31><EFBFBD><EFBFBD>PD6
|
||||
BSP_KEY_Init(BUTTON_KEY2); // KEY2<59><32><EFBFBD><EFBFBD>PB4
|
||||
BSP_KEY_Init(BUTTON_KEY3); // KEY3<59><33><EFBFBD><EFBFBD>PB6
|
||||
BSP_KEY_Init(BUTTON_KEY4); // KEY4<59><34><EFBFBD><EFBFBD>PB9
|
||||
}
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ذ<EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
//mode:0,<2C><>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;1,֧<><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
//0<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>κΰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//1<EFBFBD><EFBFBD>WKUP<EFBFBD><EFBFBD><EFBFBD><EFBFBD> WK_UP
|
||||
//ע<EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>,KEY0>KEY1>KEY2>WK_UP!!
|
||||
//-----------------------------------------------------------------
|
||||
// void BSP_KEY_Init(Button_TypeDef button)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>İ<EFBFBD><C4B0><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>: button<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>BUTTON_KEY1<EFBFBD><EFBFBD>BUTTON_KEY2<EFBFBD><EFBFBD>BUTTON_KEY3<EFBFBD><EFBFBD>BUTTON_KEY4<EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void BSP_KEY_Init(Button_TypeDef button)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
BUTTONx_GPIO_CLK_ENABLE(button); // <20><><EFBFBD><EFBFBD>KEYʱ<59><CAB1>
|
||||
|
||||
GPIO_InitStruct.Pin = BUTTON_PIN[button]; // <20><><EFBFBD><EFBFBD>KEY
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP; // <20><><EFBFBD><EFBFBD>
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; // <20><><EFBFBD><EFBFBD>
|
||||
HAL_GPIO_Init(BUTTON_PORT[button], &GPIO_InitStruct); // <20><>ʼ<EFBFBD><CABC>KEY
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// u8 KEY_Scan(u8 mode)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8 mode<64><65>0<EFBFBD><30>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1֧<31><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>: <20><><EFBFBD><EFBFBD>ֵ
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD>,KEY1>KEY2>KEY3>KEY4!!
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 KEY_Scan(u8 mode)
|
||||
{
|
||||
static u8 key_up=1; //<2F><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD>־
|
||||
if(mode==1)key_up=1; //֧<><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
|
||||
{
|
||||
delay_ms(10);
|
||||
key_up=0;
|
||||
if(KEY0==0) return KEY0_PRES;
|
||||
else if(KEY1==0) return KEY1_PRES;
|
||||
else if(KEY2==0) return KEY2_PRES;
|
||||
else if(WK_UP==1) return WKUP_PRES;
|
||||
}else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1;
|
||||
return 0; //<2F>ް<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
static u8 key_up=1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><EFBFBD><EFBFBD>־
|
||||
if(mode==1) // ֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
key_up=1;
|
||||
if(key_up&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0)) // <20>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
delay_ms(10); // <20><>ʱ10ms
|
||||
key_up=0; // <20><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
|
||||
if(KEY1==0) // <20><><EFBFBD><EFBFBD>K1<4B><31><EFBFBD><EFBFBD>
|
||||
return KEY1_PRES;
|
||||
else if(KEY2==0) // <20><><EFBFBD><EFBFBD>K2<4B><32><EFBFBD><EFBFBD>
|
||||
return KEY2_PRES;
|
||||
else if(KEY3==0) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>K3<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return KEY3_PRES;
|
||||
else if(KEY4==0) // <20><><EFBFBD><EFBFBD>K4<4B><34><EFBFBD><EFBFBD>
|
||||
return KEY4_PRES;
|
||||
}
|
||||
else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==01) // <20>ް<EFBFBD><DEB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
key_up=1;
|
||||
return 0; // <20>ް<EFBFBD><DEB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
@@ -1,37 +1,71 @@
|
||||
#ifndef _KEY_H
|
||||
#define _KEY_H
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>ѧϰʹ<EFBFBD>ã<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>;
|
||||
//ALIENTEK STM32F429<32><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//KEY<45><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2015/1/6
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
#include "stm32f429_winner.h"
|
||||
//-----------------------------------------------------------------
|
||||
// BUTTON<EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
typedef enum
|
||||
{
|
||||
BUTTON_KEY1 = 0,
|
||||
BUTTON_KEY2 = 1,
|
||||
BUTTON_KEY3 = 2,
|
||||
BUTTON_KEY4 = 3
|
||||
}Button_TypeDef;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><CABD>ͨ<EFBFBD><CDA8>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>ȡIO
|
||||
//#define KEY0 PHin(3) //KEY0<59><30><EFBFBD><EFBFBD>PH3
|
||||
//#define KEY1 PHin(2) //KEY1<59><31><EFBFBD><EFBFBD>PH2
|
||||
//#define KEY2 PCin(13)//KEY2<59><32><EFBFBD><EFBFBD>PC13
|
||||
//#define WK_UP PAin(0) //WKUP<55><50><EFBFBD><EFBFBD>PA0
|
||||
#define BUTTONn 4
|
||||
|
||||
#define BUTTON_KEY1_PIN GPIO_PIN_6
|
||||
#define BUTTON_KEY1_GPIO_PORT GPIOD
|
||||
#define BUTTON_KEY1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
|
||||
#define BUTTON_KEY1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE()
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><CABD>ͨ<EFBFBD><CDA8>ֱ<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>HAL<41>⺯<EFBFBD><E2BAAF><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>ȡIO
|
||||
#define KEY0 HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_3) //KEY0<59><30><EFBFBD><EFBFBD>PH3
|
||||
#define KEY1 HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_2) //KEY1<59><31><EFBFBD><EFBFBD>PH2
|
||||
#define KEY2 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) //KEY2<59><32><EFBFBD><EFBFBD>PC13
|
||||
#define WK_UP HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) //WKUP<55><50><EFBFBD><EFBFBD>PA0
|
||||
#define BUTTON_KEY2_PIN GPIO_PIN_4
|
||||
#define BUTTON_KEY2_GPIO_PORT GPIOB
|
||||
#define BUTTON_KEY2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define BUTTON_KEY2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
|
||||
#define BUTTON_KEY2_EXTI_IRQn EXTI4_IRQn
|
||||
|
||||
#define KEY0_PRES 1
|
||||
#define KEY1_PRES 2
|
||||
#define KEY2_PRES 3
|
||||
#define WKUP_PRES 4
|
||||
#define BUTTON_KEY3_PIN GPIO_PIN_6
|
||||
#define BUTTON_KEY3_GPIO_PORT GPIOB
|
||||
#define BUTTON_KEY3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define BUTTON_KEY3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
|
||||
#define BUTTON_KEY3_EXTI_IRQn EXTI9_5_IRQn
|
||||
|
||||
void KEY_Init(void);
|
||||
u8 KEY_Scan(u8 mode);
|
||||
#define BUTTON_KEY4_PIN GPIO_PIN_9
|
||||
#define BUTTON_KEY4_GPIO_PORT GPIOB
|
||||
#define BUTTON_KEY4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define BUTTON_KEY4_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
|
||||
#define BUTTON_KEY4_EXTI_IRQn EXTI9_5_IRQn
|
||||
|
||||
#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) BUTTON_KEY1_GPIO_CLK_ENABLE(); else \
|
||||
if((__INDEX__) == 1) BUTTON_KEY2_GPIO_CLK_ENABLE(); else \
|
||||
if((__INDEX__) == 1) BUTTON_KEY3_GPIO_CLK_ENABLE(); else \
|
||||
if((__INDEX__) == 2) BUTTON_KEY4_GPIO_CLK_ENABLE(); \
|
||||
}while(0)
|
||||
#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) BUTTON_KEY1_GPIO_CLK_DISABLE(); else \
|
||||
if((__INDEX__) == 1) BUTTON_KEY2_GPIO_CLK_DISABLE(); else \
|
||||
if((__INDEX__) == 1) BUTTON_KEY3_GPIO_CLK_DISABLE(); else \
|
||||
if((__INDEX__) == 2) BUTTON_KEY4_GPIO_CLK_DISABLE(); \
|
||||
}while(0)
|
||||
|
||||
#define KEY1 HAL_GPIO_ReadPin(BUTTON_KEY1_GPIO_PORT,BUTTON_KEY1_PIN) // KEY1<59><31><EFBFBD><EFBFBD>PD6
|
||||
#define KEY2 HAL_GPIO_ReadPin(BUTTON_KEY2_GPIO_PORT,BUTTON_KEY2_PIN) // KEY2<59><32><EFBFBD><EFBFBD>PB4
|
||||
#define KEY3 HAL_GPIO_ReadPin(BUTTON_KEY3_GPIO_PORT,BUTTON_KEY3_PIN) // KEY3<59><33><EFBFBD><EFBFBD>PB6
|
||||
#define KEY4 HAL_GPIO_ReadPin(BUTTON_KEY4_GPIO_PORT,BUTTON_KEY4_PIN) // KEY4<59><34><EFBFBD><EFBFBD>PB9
|
||||
|
||||
#define KEY1_PRES 1 // K1<4B><31>ֵ
|
||||
#define KEY2_PRES 2 // K2<4B><32>ֵ
|
||||
#define KEY3_PRES 3 // K3<4B><33>ֵ
|
||||
#define KEY4_PRES 4 // K4<4B><34>ֵ
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
extern void KEY_Init(void);
|
||||
extern void BSP_KEY_Init(Button_TypeDef button);
|
||||
extern u8 KEY_Scan(u8 mode);
|
||||
//-----------------------------------------------------------------
|
||||
#endif
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
@@ -1,403 +0,0 @@
|
||||
#ifndef __FONT_H
|
||||
#define __FONT_H
|
||||
//<2F><><EFBFBD><EFBFBD>ASCII<49><49>
|
||||
//ƫ<><C6AB><EFBFBD><EFBFBD>32
|
||||
//ASCII<49>ַ<EFBFBD><D6B7><EFBFBD>: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
|
||||
//PC2LCD2002ȡģ<C8A1><C4A3>ʽ<EFBFBD><CABD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD>ʽ+˳<><CBB3>+C51<35><31>ʽ
|
||||
//<2F>ܹ<EFBFBD><DCB9><EFBFBD>3<EFBFBD><33><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>12*12<31><32>16*16<31><36>24*24<32><34>32*32<33><32><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>ʵ<EFBFBD><CAB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
//ÿ<><C3BF><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ռ<EFBFBD>õ<EFBFBD><C3B5>ֽ<EFBFBD><D6BD><EFBFBD>Ϊ:(size/8+((size%8)?1:0))*(size/2),<2C><><EFBFBD><EFBFBD>size:<3A><><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>С(12/16/24/32...)
|
||||
|
||||
//12*12 ASCII<49>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
const unsigned char asc2_1206[95][12]={
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
|
||||
{0x00,0x00,0x00,0x00,0x3F,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
|
||||
{0x00,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x40,0x00,0x00,0x00},/*""",2*/
|
||||
{0x09,0x00,0x0B,0xC0,0x3D,0x00,0x0B,0xC0,0x3D,0x00,0x09,0x00},/*"#",3*/
|
||||
{0x18,0xC0,0x24,0x40,0x7F,0xE0,0x22,0x40,0x31,0x80,0x00,0x00},/*"$",4*/
|
||||
{0x18,0x00,0x24,0xC0,0x1B,0x00,0x0D,0x80,0x32,0x40,0x01,0x80},/*"%",5*/
|
||||
{0x03,0x80,0x1C,0x40,0x27,0x40,0x1C,0x80,0x07,0x40,0x00,0x40},/*"&",6*/
|
||||
{0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x20,0x40,0x40,0x20},/*"(",8*/
|
||||
{0x00,0x00,0x40,0x20,0x20,0x40,0x1F,0x80,0x00,0x00,0x00,0x00},/*")",9*/
|
||||
{0x09,0x00,0x06,0x00,0x1F,0x80,0x06,0x00,0x09,0x00,0x00,0x00},/*"*",10*/
|
||||
{0x04,0x00,0x04,0x00,0x3F,0x80,0x04,0x00,0x04,0x00,0x00,0x00},/*"+",11*/
|
||||
{0x00,0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/
|
||||
{0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00},/*"-",13*/
|
||||
{0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/
|
||||
{0x00,0x20,0x01,0xC0,0x06,0x00,0x38,0x00,0x40,0x00,0x00,0x00},/*"/",15*/
|
||||
{0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"0",16*/
|
||||
{0x00,0x00,0x10,0x40,0x3F,0xC0,0x00,0x40,0x00,0x00,0x00,0x00},/*"1",17*/
|
||||
{0x18,0xC0,0x21,0x40,0x22,0x40,0x24,0x40,0x18,0x40,0x00,0x00},/*"2",18*/
|
||||
{0x10,0x80,0x20,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"3",19*/
|
||||
{0x02,0x00,0x0D,0x00,0x11,0x00,0x3F,0xC0,0x01,0x40,0x00,0x00},/*"4",20*/
|
||||
{0x3C,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x23,0x80,0x00,0x00},/*"5",21*/
|
||||
{0x1F,0x80,0x24,0x40,0x24,0x40,0x34,0x40,0x03,0x80,0x00,0x00},/*"6",22*/
|
||||
{0x30,0x00,0x20,0x00,0x27,0xC0,0x38,0x00,0x20,0x00,0x00,0x00},/*"7",23*/
|
||||
{0x1B,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"8",24*/
|
||||
{0x1C,0x00,0x22,0xC0,0x22,0x40,0x22,0x40,0x1F,0x80,0x00,0x00},/*"9",25*/
|
||||
{0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/
|
||||
{0x00,0x00,0x00,0x00,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/
|
||||
{0x00,0x00,0x04,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0x40,0x40},/*"<",28*/
|
||||
{0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x00,0x00},/*"=",29*/
|
||||
{0x00,0x00,0x40,0x40,0x20,0x80,0x11,0x00,0x0A,0x00,0x04,0x00},/*">",30*/
|
||||
{0x18,0x00,0x20,0x00,0x23,0x40,0x24,0x00,0x18,0x00,0x00,0x00},/*"?",31*/
|
||||
{0x1F,0x80,0x20,0x40,0x27,0x40,0x29,0x40,0x1F,0x40,0x00,0x00},/*"@",32*/
|
||||
{0x00,0x40,0x07,0xC0,0x39,0x00,0x0F,0x00,0x01,0xC0,0x00,0x40},/*"A",33*/
|
||||
{0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"B",34*/
|
||||
{0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x30,0x80,0x00,0x00},/*"C",35*/
|
||||
{0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"D",36*/
|
||||
{0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x40,0x30,0xC0,0x00,0x00},/*"E",37*/
|
||||
{0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x00,0x30,0x00,0x00,0x00},/*"F",38*/
|
||||
{0x0F,0x00,0x10,0x80,0x20,0x40,0x22,0x40,0x33,0x80,0x02,0x00},/*"G",39*/
|
||||
{0x20,0x40,0x3F,0xC0,0x04,0x00,0x04,0x00,0x3F,0xC0,0x20,0x40},/*"H",40*/
|
||||
{0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x00,0x00},/*"I",41*/
|
||||
{0x00,0x60,0x20,0x20,0x20,0x20,0x3F,0xC0,0x20,0x00,0x20,0x00},/*"J",42*/
|
||||
{0x20,0x40,0x3F,0xC0,0x24,0x40,0x0B,0x00,0x30,0xC0,0x20,0x40},/*"K",43*/
|
||||
{0x20,0x40,0x3F,0xC0,0x20,0x40,0x00,0x40,0x00,0x40,0x00,0xC0},/*"L",44*/
|
||||
{0x3F,0xC0,0x3C,0x00,0x03,0xC0,0x3C,0x00,0x3F,0xC0,0x00,0x00},/*"M",45*/
|
||||
{0x20,0x40,0x3F,0xC0,0x0C,0x40,0x23,0x00,0x3F,0xC0,0x20,0x00},/*"N",46*/
|
||||
{0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"O",47*/
|
||||
{0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x00,0x18,0x00,0x00,0x00},/*"P",48*/
|
||||
{0x1F,0x80,0x21,0x40,0x21,0x40,0x20,0xE0,0x1F,0xA0,0x00,0x00},/*"Q",49*/
|
||||
{0x20,0x40,0x3F,0xC0,0x24,0x40,0x26,0x00,0x19,0xC0,0x00,0x40},/*"R",50*/
|
||||
{0x18,0xC0,0x24,0x40,0x24,0x40,0x22,0x40,0x31,0x80,0x00,0x00},/*"S",51*/
|
||||
{0x30,0x00,0x20,0x40,0x3F,0xC0,0x20,0x40,0x30,0x00,0x00,0x00},/*"T",52*/
|
||||
{0x20,0x00,0x3F,0x80,0x00,0x40,0x00,0x40,0x3F,0x80,0x20,0x00},/*"U",53*/
|
||||
{0x20,0x00,0x3E,0x00,0x01,0xC0,0x07,0x00,0x38,0x00,0x20,0x00},/*"V",54*/
|
||||
{0x38,0x00,0x07,0xC0,0x3C,0x00,0x07,0xC0,0x38,0x00,0x00,0x00},/*"W",55*/
|
||||
{0x20,0x40,0x39,0xC0,0x06,0x00,0x39,0xC0,0x20,0x40,0x00,0x00},/*"X",56*/
|
||||
{0x20,0x00,0x38,0x40,0x07,0xC0,0x38,0x40,0x20,0x00,0x00,0x00},/*"Y",57*/
|
||||
{0x30,0x40,0x21,0xC0,0x26,0x40,0x38,0x40,0x20,0xC0,0x00,0x00},/*"Z",58*/
|
||||
{0x00,0x00,0x00,0x00,0x7F,0xE0,0x40,0x20,0x40,0x20,0x00,0x00},/*"[",59*/
|
||||
{0x00,0x00,0x70,0x00,0x0C,0x00,0x03,0x80,0x00,0x40,0x00,0x00},/*"\",60*/
|
||||
{0x00,0x00,0x40,0x20,0x40,0x20,0x7F,0xE0,0x00,0x00,0x00,0x00},/*"]",61*/
|
||||
{0x00,0x00,0x20,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
|
||||
{0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10},/*"_",63*/
|
||||
{0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
|
||||
{0x00,0x00,0x02,0x80,0x05,0x40,0x05,0x40,0x03,0xC0,0x00,0x40},/*"a",65*/
|
||||
{0x20,0x00,0x3F,0xC0,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00},/*"b",66*/
|
||||
{0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x06,0x40,0x00,0x00},/*"c",67*/
|
||||
{0x00,0x00,0x03,0x80,0x04,0x40,0x24,0x40,0x3F,0xC0,0x00,0x40},/*"d",68*/
|
||||
{0x00,0x00,0x03,0x80,0x05,0x40,0x05,0x40,0x03,0x40,0x00,0x00},/*"e",69*/
|
||||
{0x00,0x00,0x04,0x40,0x1F,0xC0,0x24,0x40,0x24,0x40,0x20,0x00},/*"f",70*/
|
||||
{0x00,0x00,0x02,0xE0,0x05,0x50,0x05,0x50,0x06,0x50,0x04,0x20},/*"g",71*/
|
||||
{0x20,0x40,0x3F,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40},/*"h",72*/
|
||||
{0x00,0x00,0x04,0x40,0x27,0xC0,0x00,0x40,0x00,0x00,0x00,0x00},/*"i",73*/
|
||||
{0x00,0x10,0x00,0x10,0x04,0x10,0x27,0xE0,0x00,0x00,0x00,0x00},/*"j",74*/
|
||||
{0x20,0x40,0x3F,0xC0,0x01,0x40,0x07,0x00,0x04,0xC0,0x04,0x40},/*"k",75*/
|
||||
{0x20,0x40,0x20,0x40,0x3F,0xC0,0x00,0x40,0x00,0x40,0x00,0x00},/*"l",76*/
|
||||
{0x07,0xC0,0x04,0x00,0x07,0xC0,0x04,0x00,0x03,0xC0,0x00,0x00},/*"m",77*/
|
||||
{0x04,0x40,0x07,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40},/*"n",78*/
|
||||
{0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00},/*"o",79*/
|
||||
{0x04,0x10,0x07,0xF0,0x04,0x50,0x04,0x40,0x03,0x80,0x00,0x00},/*"p",80*/
|
||||
{0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x50,0x07,0xF0,0x00,0x10},/*"q",81*/
|
||||
{0x04,0x40,0x07,0xC0,0x02,0x40,0x04,0x00,0x04,0x00,0x00,0x00},/*"r",82*/
|
||||
{0x00,0x00,0x06,0x40,0x05,0x40,0x05,0x40,0x04,0xC0,0x00,0x00},/*"s",83*/
|
||||
{0x00,0x00,0x04,0x00,0x1F,0x80,0x04,0x40,0x00,0x40,0x00,0x00},/*"t",84*/
|
||||
{0x04,0x00,0x07,0x80,0x00,0x40,0x04,0x40,0x07,0xC0,0x00,0x40},/*"u",85*/
|
||||
{0x04,0x00,0x07,0x00,0x04,0xC0,0x01,0x80,0x06,0x00,0x04,0x00},/*"v",86*/
|
||||
{0x06,0x00,0x01,0xC0,0x07,0x00,0x01,0xC0,0x06,0x00,0x00,0x00},/*"w",87*/
|
||||
{0x04,0x40,0x06,0xC0,0x01,0x00,0x06,0xC0,0x04,0x40,0x00,0x00},/*"x",88*/
|
||||
{0x04,0x10,0x07,0x10,0x04,0xE0,0x01,0x80,0x06,0x00,0x04,0x00},/*"y",89*/
|
||||
{0x00,0x00,0x04,0x40,0x05,0xC0,0x06,0x40,0x04,0x40,0x00,0x00},/*"z",90*/
|
||||
{0x00,0x00,0x00,0x00,0x04,0x00,0x7B,0xE0,0x40,0x20,0x00,0x00},/*"{",91*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00},/*"|",92*/
|
||||
{0x00,0x00,0x40,0x20,0x7B,0xE0,0x04,0x00,0x00,0x00,0x00,0x00},/*"}",93*/
|
||||
{0x40,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x40,0x00},/*"~",94*/
|
||||
};
|
||||
//16*16 ASCII<49>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
const unsigned char asc2_1608[95][16]={
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
|
||||
{0x00,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x00,0x00},/*""",2*/
|
||||
{0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x00,0x00},/*"#",3*/
|
||||
{0x00,0x00,0x0E,0x18,0x11,0x04,0x3F,0xFF,0x10,0x84,0x0C,0x78,0x00,0x00,0x00,0x00},/*"$",4*/
|
||||
{0x0F,0x00,0x10,0x84,0x0F,0x38,0x00,0xC0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00},/*"%",5*/
|
||||
{0x00,0x78,0x0F,0x84,0x10,0xC4,0x11,0x24,0x0E,0x98,0x00,0xE4,0x00,0x84,0x00,0x08},/*"&",6*/
|
||||
{0x08,0x00,0x68,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x18,0x18,0x20,0x04,0x40,0x02,0x00,0x00},/*"(",8*/
|
||||
{0x00,0x00,0x40,0x02,0x20,0x04,0x18,0x18,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/
|
||||
{0x02,0x40,0x02,0x40,0x01,0x80,0x0F,0xF0,0x01,0x80,0x02,0x40,0x02,0x40,0x00,0x00},/*"*",10*/
|
||||
{0x00,0x80,0x00,0x80,0x00,0x80,0x0F,0xF8,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00},/*"+",11*/
|
||||
{0x00,0x01,0x00,0x0D,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/
|
||||
{0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80},/*"-",13*/
|
||||
{0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/
|
||||
{0x00,0x00,0x00,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00},/*"/",15*/
|
||||
{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"0",16*/
|
||||
{0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"1",17*/
|
||||
{0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00},/*"2",18*/
|
||||
{0x00,0x00,0x0C,0x18,0x10,0x04,0x11,0x04,0x11,0x04,0x12,0x88,0x0C,0x70,0x00,0x00},/*"3",19*/
|
||||
{0x00,0x00,0x00,0xE0,0x03,0x20,0x04,0x24,0x08,0x24,0x1F,0xFC,0x00,0x24,0x00,0x00},/*"4",20*/
|
||||
{0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00},/*"5",21*/
|
||||
{0x00,0x00,0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x18,0x88,0x00,0x70,0x00,0x00},/*"6",22*/
|
||||
{0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,0x13,0x00,0x1C,0x00,0x10,0x00,0x00,0x00},/*"7",23*/
|
||||
{0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00},/*"8",24*/
|
||||
{0x00,0x00,0x07,0x00,0x08,0x8C,0x10,0x44,0x10,0x44,0x08,0x88,0x07,0xF0,0x00,0x00},/*"9",25*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x03,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/
|
||||
{0x00,0x00,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x10,0x08,0x08,0x10,0x04,0x00,0x00},/*"<",28*/
|
||||
{0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x00,0x00},/*"=",29*/
|
||||
{0x00,0x00,0x10,0x04,0x08,0x08,0x04,0x10,0x02,0x20,0x01,0x40,0x00,0x80,0x00,0x00},/*">",30*/
|
||||
{0x00,0x00,0x0E,0x00,0x12,0x00,0x10,0x0C,0x10,0x6C,0x10,0x80,0x0F,0x00,0x00,0x00},/*"?",31*/
|
||||
{0x03,0xE0,0x0C,0x18,0x13,0xE4,0x14,0x24,0x17,0xC4,0x08,0x28,0x07,0xD0,0x00,0x00},/*"@",32*/
|
||||
{0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40,0x07,0x40,0x00,0xE4,0x00,0x1C,0x00,0x04},/*"A",33*/
|
||||
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x11,0x04,0x0E,0x88,0x00,0x70,0x00,0x00},/*"B",34*/
|
||||
{0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x08,0x1C,0x10,0x00,0x00},/*"C",35*/
|
||||
{0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"D",36*/
|
||||
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x17,0xC4,0x10,0x04,0x08,0x18,0x00,0x00},/*"E",37*/
|
||||
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x17,0xC0,0x10,0x00,0x08,0x00,0x00,0x00},/*"F",38*/
|
||||
{0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x44,0x1C,0x78,0x00,0x40,0x00,0x00},/*"G",39*/
|
||||
{0x10,0x04,0x1F,0xFC,0x10,0x84,0x00,0x80,0x00,0x80,0x10,0x84,0x1F,0xFC,0x10,0x04},/*"H",40*/
|
||||
{0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x00,0x00,0x00,0x00},/*"I",41*/
|
||||
{0x00,0x03,0x00,0x01,0x10,0x01,0x10,0x01,0x1F,0xFE,0x10,0x00,0x10,0x00,0x00,0x00},/*"J",42*/
|
||||
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x03,0x80,0x14,0x64,0x18,0x1C,0x10,0x04,0x00,0x00},/*"K",43*/
|
||||
{0x10,0x04,0x1F,0xFC,0x10,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x0C,0x00,0x00},/*"L",44*/
|
||||
{0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC,0x10,0x04,0x00,0x00},/*"M",45*/
|
||||
{0x10,0x04,0x1F,0xFC,0x0C,0x04,0x03,0x00,0x00,0xE0,0x10,0x18,0x1F,0xFC,0x10,0x00},/*"N",46*/
|
||||
{0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"O",47*/
|
||||
{0x10,0x04,0x1F,0xFC,0x10,0x84,0x10,0x80,0x10,0x80,0x10,0x80,0x0F,0x00,0x00,0x00},/*"P",48*/
|
||||
{0x07,0xF0,0x08,0x18,0x10,0x24,0x10,0x24,0x10,0x1C,0x08,0x0A,0x07,0xF2,0x00,0x00},/*"Q",49*/
|
||||
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x11,0xC0,0x11,0x30,0x0E,0x0C,0x00,0x04},/*"R",50*/
|
||||
{0x00,0x00,0x0E,0x1C,0x11,0x04,0x10,0x84,0x10,0x84,0x10,0x44,0x1C,0x38,0x00,0x00},/*"S",51*/
|
||||
{0x18,0x00,0x10,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x00,0x18,0x00,0x00,0x00},/*"T",52*/
|
||||
{0x10,0x00,0x1F,0xF8,0x10,0x04,0x00,0x04,0x00,0x04,0x10,0x04,0x1F,0xF8,0x10,0x00},/*"U",53*/
|
||||
{0x10,0x00,0x1E,0x00,0x11,0xE0,0x00,0x1C,0x00,0x70,0x13,0x80,0x1C,0x00,0x10,0x00},/*"V",54*/
|
||||
{0x1F,0xC0,0x10,0x3C,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x10,0x3C,0x1F,0xC0,0x00,0x00},/*"W",55*/
|
||||
{0x10,0x04,0x18,0x0C,0x16,0x34,0x01,0xC0,0x01,0xC0,0x16,0x34,0x18,0x0C,0x10,0x04},/*"X",56*/
|
||||
{0x10,0x00,0x1C,0x00,0x13,0x04,0x00,0xFC,0x13,0x04,0x1C,0x00,0x10,0x00,0x00,0x00},/*"Y",57*/
|
||||
{0x08,0x04,0x10,0x1C,0x10,0x64,0x10,0x84,0x13,0x04,0x1C,0x04,0x10,0x18,0x00,0x00},/*"Z",58*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x40,0x02,0x40,0x02,0x40,0x02,0x00,0x00},/*"[",59*/
|
||||
{0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x80,0x00,0x60,0x00,0x1C,0x00,0x03,0x00,0x00},/*"\",60*/
|
||||
{0x00,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00},/*"]",61*/
|
||||
{0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00},/*"^",62*/
|
||||
{0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01},/*"_",63*/
|
||||
{0x00,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
|
||||
{0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xFC,0x00,0x04},/*"a",65*/
|
||||
{0x10,0x00,0x1F,0xFC,0x00,0x88,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00},/*"b",66*/
|
||||
{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x00},/*"c",67*/
|
||||
{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x11,0x08,0x1F,0xFC,0x00,0x04},/*"d",68*/
|
||||
{0x00,0x00,0x00,0xF8,0x01,0x44,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xC8,0x00,0x00},/*"e",69*/
|
||||
{0x00,0x00,0x01,0x04,0x01,0x04,0x0F,0xFC,0x11,0x04,0x11,0x04,0x11,0x00,0x18,0x00},/*"f",70*/
|
||||
{0x00,0x00,0x00,0xD6,0x01,0x29,0x01,0x29,0x01,0x29,0x01,0xC9,0x01,0x06,0x00,0x00},/*"g",71*/
|
||||
{0x10,0x04,0x1F,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04},/*"h",72*/
|
||||
{0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"i",73*/
|
||||
{0x00,0x00,0x00,0x03,0x00,0x01,0x01,0x01,0x19,0x01,0x19,0xFE,0x00,0x00,0x00,0x00},/*"j",74*/
|
||||
{0x10,0x04,0x1F,0xFC,0x00,0x24,0x00,0x40,0x01,0xB4,0x01,0x0C,0x01,0x04,0x00,0x00},/*"k",75*/
|
||||
{0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"l",76*/
|
||||
{0x01,0x04,0x01,0xFC,0x01,0x04,0x01,0x00,0x01,0xFC,0x01,0x04,0x01,0x00,0x00,0xFC},/*"m",77*/
|
||||
{0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04},/*"n",78*/
|
||||
{0x00,0x00,0x00,0xF8,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0xF8,0x00,0x00},/*"o",79*/
|
||||
{0x01,0x01,0x01,0xFF,0x00,0x85,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00},/*"p",80*/
|
||||
{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x05,0x01,0xFF,0x00,0x01},/*"q",81*/
|
||||
{0x01,0x04,0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x04,0x01,0x00,0x01,0x80,0x00,0x00},/*"r",82*/
|
||||
{0x00,0x00,0x00,0xCC,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x98,0x00,0x00},/*"s",83*/
|
||||
{0x00,0x00,0x01,0x00,0x01,0x00,0x07,0xF8,0x01,0x04,0x01,0x04,0x00,0x00,0x00,0x00},/*"t",84*/
|
||||
{0x01,0x00,0x01,0xF8,0x00,0x04,0x00,0x04,0x00,0x04,0x01,0x08,0x01,0xFC,0x00,0x04},/*"u",85*/
|
||||
{0x01,0x00,0x01,0x80,0x01,0x70,0x00,0x0C,0x00,0x10,0x01,0x60,0x01,0x80,0x01,0x00},/*"v",86*/
|
||||
{0x01,0xF0,0x01,0x0C,0x00,0x30,0x01,0xC0,0x00,0x30,0x01,0x0C,0x01,0xF0,0x01,0x00},/*"w",87*/
|
||||
{0x00,0x00,0x01,0x04,0x01,0x8C,0x00,0x74,0x01,0x70,0x01,0x8C,0x01,0x04,0x00,0x00},/*"x",88*/
|
||||
{0x01,0x01,0x01,0x81,0x01,0x71,0x00,0x0E,0x00,0x18,0x01,0x60,0x01,0x80,0x01,0x00},/*"y",89*/
|
||||
{0x00,0x00,0x01,0x84,0x01,0x0C,0x01,0x34,0x01,0x44,0x01,0x84,0x01,0x0C,0x00,0x00},/*"z",90*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x3E,0xFC,0x40,0x02,0x40,0x02},/*"{",91*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00},/*"|",92*/
|
||||
{0x00,0x00,0x40,0x02,0x40,0x02,0x3E,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/
|
||||
{0x00,0x00,0x60,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20,0x00},/*"~",94*/
|
||||
};
|
||||
//24*24 ASICII<49>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
const unsigned char asc2_2412[95][36]={
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x38,0x0F,0xFE,0x38,0x0F,0x80,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x06,0x00,0x00,0x0C,0x00,0x00,0x38,0x00,0x00,0x31,0x00,0x00,0x06,0x00,0x00,0x0C,0x00,0x00,0x38,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00},/*""",2*/
|
||||
{0x00,0x00,0x00,0x00,0x61,0x80,0x00,0x67,0xF8,0x07,0xF9,0x80,0x00,0x61,0x80,0x00,0x61,0x80,0x00,0x61,0x80,0x00,0x61,0x80,0x00,0x67,0xF8,0x07,0xF9,0x80,0x00,0x61,0x80,0x00,0x00,0x00},/*"#",3*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0xE0,0x03,0xE0,0xF0,0x06,0x30,0x08,0x04,0x18,0x08,0x1F,0xFF,0xFE,0x04,0x0E,0x08,0x07,0x87,0xF0,0x03,0x81,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*"$",4*/
|
||||
{0x01,0xF0,0x00,0x06,0x0C,0x00,0x04,0x04,0x08,0x06,0x0C,0x70,0x01,0xF9,0xC0,0x00,0x0E,0x00,0x00,0x3B,0xE0,0x00,0xEC,0x18,0x07,0x08,0x08,0x04,0x0C,0x18,0x00,0x03,0xE0,0x00,0x00,0x00},/*"%",5*/
|
||||
{0x00,0x01,0xE0,0x00,0x07,0xF0,0x03,0xF8,0x18,0x04,0x1C,0x08,0x04,0x17,0x08,0x07,0xE1,0xD0,0x03,0xC0,0xE0,0x00,0x23,0xB0,0x00,0x3C,0x08,0x00,0x20,0x08,0x00,0x00,0x10,0x00,0x00,0x00},/*"&",6*/
|
||||
{0x00,0x00,0x00,0x01,0x00,0x00,0x31,0x00,0x00,0x32,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0xFF,0xC0,0x07,0x80,0xF0,0x0C,0x00,0x18,0x10,0x00,0x04,0x20,0x00,0x02,0x00,0x00,0x00},/*"(",8*/
|
||||
{0x00,0x00,0x00,0x20,0x00,0x02,0x10,0x00,0x04,0x0C,0x00,0x18,0x07,0x80,0xF0,0x01,0xFF,0xC0,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/
|
||||
{0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x66,0x00,0x00,0x66,0x00,0x00,0x3C,0x00,0x00,0x18,0x00,0x03,0xFF,0xC0,0x00,0x18,0x00,0x00,0x3C,0x00,0x00,0x66,0x00,0x00,0x66,0x00,0x00,0x42,0x00},/*"*",10*/
|
||||
{0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x01,0xFF,0xC0,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00},/*"+",11*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x31,0x00,0x00,0x32,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/
|
||||
{0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x00,0x00},/*"-",13*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x1C,0x00,0x00,0x70,0x00,0x01,0x80,0x00,0x0E,0x00,0x00,0x38,0x00,0x00,0xC0,0x00,0x07,0x00,0x00,0x1C,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00},/*"/",15*/
|
||||
{0x00,0x00,0x00,0x00,0x7F,0x80,0x01,0xFF,0xE0,0x03,0x80,0x70,0x06,0x00,0x18,0x04,0x00,0x08,0x04,0x00,0x08,0x06,0x00,0x18,0x03,0x80,0x70,0x01,0xFF,0xE0,0x00,0x7F,0x80,0x00,0x00,0x00},/*"0",16*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x08,0x01,0x00,0x08,0x01,0x00,0x08,0x03,0xFF,0xF8,0x07,0xFF,0xF8,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00},/*"1",17*/
|
||||
{0x00,0x00,0x00,0x01,0xC0,0x38,0x02,0xC0,0x58,0x04,0x00,0x98,0x04,0x01,0x18,0x04,0x02,0x18,0x04,0x04,0x18,0x06,0x1C,0x18,0x03,0xF8,0x18,0x01,0xE0,0xF8,0x00,0x00,0x00,0x00,0x00,0x00},/*"2",18*/
|
||||
{0x00,0x00,0x00,0x01,0xC0,0xE0,0x03,0xC0,0xF0,0x04,0x00,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x06,0x18,0x08,0x03,0xF4,0x18,0x01,0xE7,0xF0,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*"3",19*/
|
||||
{0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x0D,0x00,0x00,0x11,0x00,0x00,0x61,0x00,0x00,0x81,0x08,0x03,0x01,0x08,0x07,0xFF,0xF8,0x0F,0xFF,0xF8,0x00,0x01,0x08,0x00,0x01,0x08,0x00,0x00,0x00},/*"4",20*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0xFC,0xD0,0x06,0x08,0x08,0x06,0x10,0x08,0x06,0x10,0x08,0x06,0x10,0x08,0x06,0x18,0x38,0x06,0x0F,0xF0,0x06,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00},/*"5",21*/
|
||||
{0x00,0x00,0x00,0x00,0x3F,0x80,0x01,0xFF,0xE0,0x03,0x84,0x30,0x02,0x08,0x18,0x04,0x10,0x08,0x04,0x10,0x08,0x04,0x10,0x08,0x07,0x18,0x10,0x03,0x0F,0xF0,0x00,0x07,0xC0,0x00,0x00,0x00},/*"6",22*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x07,0x00,0x00,0x06,0x00,0x00,0x06,0x00,0xF8,0x06,0x07,0xF8,0x06,0x18,0x00,0x06,0xE0,0x00,0x07,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00},/*"7",23*/
|
||||
{0x00,0x00,0x00,0x01,0xE1,0xE0,0x03,0xF7,0xF0,0x06,0x34,0x10,0x04,0x18,0x08,0x04,0x18,0x08,0x04,0x0C,0x08,0x04,0x0C,0x08,0x06,0x16,0x18,0x03,0xF3,0xF0,0x01,0xC1,0xE0,0x00,0x00,0x00},/*"8",24*/
|
||||
{0x00,0x00,0x00,0x00,0xF8,0x00,0x03,0xFC,0x30,0x03,0x06,0x38,0x04,0x02,0x08,0x04,0x02,0x08,0x04,0x02,0x08,0x04,0x04,0x10,0x03,0x08,0xF0,0x01,0xFF,0xC0,0x00,0x7F,0x00,0x00,0x00,0x00},/*"9",25*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x38,0x00,0x70,0x38,0x00,0x70,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x1A,0x00,0x30,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x14,0x00,0x00,0x22,0x00,0x00,0x41,0x00,0x00,0x80,0x80,0x01,0x00,0x40,0x02,0x00,0x20,0x04,0x00,0x10,0x08,0x00,0x08,0x00,0x00,0x00},/*"<",28*/
|
||||
{0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x00,0x00},/*"=",29*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x04,0x00,0x10,0x02,0x00,0x20,0x01,0x00,0x40,0x00,0x80,0x80,0x00,0x41,0x00,0x00,0x22,0x00,0x00,0x14,0x00,0x00,0x08,0x00,0x00,0x00,0x00},/*">",30*/
|
||||
{0x00,0x00,0x00,0x03,0xC0,0x00,0x04,0xC0,0x00,0x04,0x00,0x00,0x08,0x00,0x38,0x08,0x0F,0x38,0x08,0x08,0x38,0x08,0x10,0x00,0x0C,0x30,0x00,0x07,0xE0,0x00,0x03,0xC0,0x00,0x00,0x00,0x00},/*"?",31*/
|
||||
{0x00,0x00,0x00,0x00,0x3F,0x80,0x00,0xFF,0xE0,0x03,0x80,0x70,0x02,0x0F,0x10,0x06,0x70,0x88,0x04,0xC0,0x88,0x04,0x83,0x08,0x04,0x7F,0x88,0x02,0xC0,0x90,0x03,0x01,0x20,0x00,0xFE,0x40},/*"@",32*/
|
||||
{0x00,0x00,0x08,0x00,0x00,0x18,0x00,0x01,0xF8,0x00,0x3E,0x08,0x01,0xC2,0x00,0x07,0x02,0x00,0x07,0xE2,0x00,0x00,0xFE,0x00,0x00,0x1F,0xC8,0x00,0x01,0xF8,0x00,0x00,0x38,0x00,0x00,0x08},/*"A",33*/
|
||||
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x06,0x18,0x08,0x03,0xF4,0x18,0x01,0xE7,0xF0,0x00,0x01,0xE0,0x00,0x00,0x00},/*"B",34*/
|
||||
{0x00,0x00,0x00,0x00,0x3F,0x80,0x01,0xFF,0xE0,0x03,0x80,0x70,0x02,0x00,0x18,0x04,0x00,0x08,0x04,0x00,0x08,0x04,0x00,0x08,0x04,0x00,0x10,0x06,0x00,0x20,0x07,0x80,0xC0,0x00,0x00,0x00},/*"C",35*/
|
||||
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x00,0x08,0x04,0x00,0x08,0x04,0x00,0x08,0x04,0x00,0x18,0x02,0x00,0x10,0x03,0x80,0x70,0x01,0xFF,0xE0,0x00,0x7F,0x80,0x00,0x00,0x00},/*"D",36*/
|
||||
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x3E,0x08,0x04,0x00,0x08,0x06,0x00,0x18,0x01,0x00,0x60,0x00,0x00,0x00},/*"E",37*/
|
||||
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x08,0x08,0x04,0x08,0x00,0x04,0x08,0x00,0x04,0x08,0x00,0x04,0x3E,0x00,0x06,0x00,0x00,0x06,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00},/*"F",38*/
|
||||
{0x00,0x00,0x00,0x00,0x3F,0x80,0x01,0xFF,0xE0,0x03,0x80,0x70,0x06,0x00,0x18,0x04,0x00,0x08,0x04,0x02,0x08,0x04,0x02,0x08,0x02,0x03,0xF0,0x07,0x83,0xF0,0x00,0x02,0x00,0x00,0x02,0x00},/*"G",39*/
|
||||
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x08,0x08,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x04,0x08,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x00,0x08},/*"H",40*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x08,0x04,0x00,0x08,0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x00,0x08,0x04,0x00,0x08,0x04,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00},/*"I",41*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x07,0x00,0x00,0x01,0x04,0x00,0x01,0x04,0x00,0x01,0x04,0x00,0x03,0x07,0xFF,0xFE,0x07,0xFF,0xFC,0x04,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00},/*"J",42*/
|
||||
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x0C,0x08,0x00,0x18,0x00,0x00,0x3E,0x00,0x04,0xC7,0x80,0x05,0x03,0xC8,0x06,0x00,0xF8,0x04,0x00,0x38,0x04,0x00,0x18,0x00,0x00,0x08},/*"K",43*/
|
||||
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x18,0x00,0x00,0x60,0x00,0x00,0x00},/*"L",44*/
|
||||
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0x80,0x08,0x07,0xFC,0x00,0x00,0x7F,0xC0,0x00,0x03,0xF8,0x00,0x07,0xC0,0x00,0x78,0x00,0x07,0x80,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x00,0x08},/*"M",45*/
|
||||
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0x00,0x08,0x03,0xC0,0x00,0x00,0xE0,0x00,0x00,0x38,0x00,0x00,0x1E,0x00,0x00,0x07,0x00,0x00,0x01,0xC0,0x04,0x00,0xF0,0x07,0xFF,0xF8,0x04,0x00,0x00},/*"N",46*/
|
||||
{0x00,0x00,0x00,0x00,0x7F,0x80,0x01,0xFF,0xE0,0x03,0x80,0x70,0x06,0x00,0x18,0x04,0x00,0x08,0x04,0x00,0x08,0x06,0x00,0x18,0x03,0x00,0x30,0x01,0xFF,0xE0,0x00,0x7F,0x80,0x00,0x00,0x00},/*"O",47*/
|
||||
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x04,0x08,0x04,0x04,0x00,0x04,0x04,0x00,0x04,0x04,0x00,0x04,0x04,0x00,0x06,0x0C,0x00,0x03,0xF8,0x00,0x01,0xF0,0x00,0x00,0x00,0x00},/*"P",48*/
|
||||
{0x00,0x00,0x00,0x00,0x7F,0x80,0x01,0xFF,0xE0,0x03,0x80,0x70,0x06,0x00,0x88,0x04,0x00,0x88,0x04,0x00,0xC8,0x06,0x00,0x3C,0x03,0x00,0x3E,0x01,0xFF,0xE6,0x00,0x7F,0x84,0x00,0x00,0x00},/*"Q",49*/
|
||||
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x08,0x08,0x04,0x08,0x00,0x04,0x0C,0x00,0x04,0x0F,0x00,0x04,0x0B,0xC0,0x06,0x10,0xF0,0x03,0xF0,0x38,0x01,0xE0,0x08,0x00,0x00,0x08},/*"R",50*/
|
||||
{0x00,0x00,0x00,0x01,0xE0,0xF8,0x03,0xF0,0x30,0x06,0x30,0x10,0x04,0x18,0x08,0x04,0x18,0x08,0x04,0x0C,0x08,0x04,0x0C,0x08,0x02,0x06,0x18,0x02,0x07,0xF0,0x07,0x81,0xE0,0x00,0x00,0x00},/*"S",51*/
|
||||
{0x01,0x80,0x00,0x06,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x00,0x08,0x04,0x00,0x00,0x04,0x00,0x00,0x06,0x00,0x00,0x01,0x80,0x00},/*"T",52*/
|
||||
{0x04,0x00,0x00,0x07,0xFF,0xE0,0x07,0xFF,0xF0,0x04,0x00,0x18,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x04,0x00,0x10,0x07,0xFF,0xE0,0x04,0x00,0x00},/*"U",53*/
|
||||
{0x04,0x00,0x00,0x06,0x00,0x00,0x07,0xE0,0x00,0x07,0xFE,0x00,0x04,0x1F,0xE0,0x00,0x01,0xF8,0x00,0x00,0x38,0x00,0x01,0xE0,0x04,0x3E,0x00,0x07,0xC0,0x00,0x06,0x00,0x00,0x04,0x00,0x00},/*"V",54*/
|
||||
{0x04,0x00,0x00,0x07,0xE0,0x00,0x07,0xFF,0xC0,0x04,0x1F,0xF8,0x00,0x07,0xC0,0x07,0xF8,0x00,0x07,0xFF,0x80,0x04,0x3F,0xF8,0x00,0x07,0xC0,0x04,0xF8,0x00,0x07,0x00,0x00,0x04,0x00,0x00},/*"W",55*/
|
||||
{0x00,0x00,0x00,0x04,0x00,0x08,0x06,0x00,0x18,0x07,0xC0,0x78,0x05,0xF1,0xC8,0x00,0x3E,0x00,0x00,0x1F,0x80,0x04,0x63,0xE8,0x07,0x80,0xF8,0x06,0x00,0x18,0x04,0x00,0x08,0x00,0x00,0x00},/*"X",56*/
|
||||
{0x04,0x00,0x00,0x06,0x00,0x00,0x07,0x80,0x00,0x07,0xE0,0x08,0x04,0x7C,0x08,0x00,0x1F,0xF8,0x00,0x07,0xF8,0x00,0x18,0x08,0x04,0xE0,0x08,0x07,0x00,0x00,0x06,0x00,0x00,0x04,0x00,0x00},/*"Y",57*/
|
||||
{0x00,0x00,0x00,0x01,0x00,0x08,0x06,0x00,0x38,0x04,0x00,0xF8,0x04,0x03,0xE8,0x04,0x0F,0x08,0x04,0x7C,0x08,0x05,0xF0,0x08,0x07,0xC0,0x08,0x07,0x00,0x18,0x04,0x00,0x60,0x00,0x00,0x00},/*"Z",58*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFE,0x20,0x00,0x02,0x20,0x00,0x02,0x20,0x00,0x02,0x20,0x00,0x02,0x20,0x00,0x02,0x00,0x00,0x00},/*"[",59*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x07,0x00,0x00,0x00,0xC0,0x00,0x00,0x38,0x00,0x00,0x06,0x00,0x00,0x01,0xC0,0x00,0x00,0x30,0x00,0x00,0x0E,0x00,0x00,0x01,0x00,0x00,0x00},/*"\",60*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x02,0x20,0x00,0x02,0x20,0x00,0x02,0x20,0x00,0x02,0x20,0x00,0x02,0x3F,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"]",61*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x10,0x00,0x00,0x30,0x00,0x00,0x20,0x00,0x00,0x30,0x00,0x00,0x10,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
|
||||
{0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01},/*"_",63*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x19,0xF8,0x00,0x1B,0x18,0x00,0x22,0x08,0x00,0x26,0x08,0x00,0x24,0x08,0x00,0x24,0x10,0x00,0x3F,0xF8,0x00,0x1F,0xF8,0x00,0x00,0x08,0x00,0x00,0x18},/*"a",65*/
|
||||
{0x00,0x00,0x00,0x04,0x00,0x00,0x07,0xFF,0xF8,0x0F,0xFF,0xF0,0x00,0x18,0x18,0x00,0x10,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x30,0x18,0x00,0x1F,0xF0,0x00,0x0F,0xC0,0x00,0x00,0x00},/*"b",66*/
|
||||
{0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x1F,0xF0,0x00,0x18,0x30,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x3C,0x08,0x00,0x1C,0x10,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00},/*"c",67*/
|
||||
{0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x1F,0xF0,0x00,0x38,0x18,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x04,0x10,0x10,0x07,0xFF,0xF8,0x0F,0xFF,0xF0,0x00,0x00,0x10,0x00,0x00,0x00},/*"d",68*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x1F,0xF0,0x00,0x12,0x30,0x00,0x22,0x18,0x00,0x22,0x08,0x00,0x22,0x08,0x00,0x32,0x08,0x00,0x1E,0x10,0x00,0x0E,0x20,0x00,0x00,0x00},/*"e",69*/
|
||||
{0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x08,0x00,0x20,0x08,0x01,0xFF,0xF8,0x03,0xFF,0xF8,0x06,0x20,0x08,0x04,0x20,0x08,0x04,0x20,0x08,0x07,0x20,0x00,0x03,0x00,0x00,0x00,0x00,0x00},/*"f",70*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x0E,0x6E,0x00,0x1F,0xF3,0x00,0x31,0xB1,0x00,0x20,0xB1,0x00,0x20,0xB1,0x00,0x31,0x91,0x00,0x1F,0x13,0x00,0x2E,0x1E,0x00,0x20,0x0E,0x00,0x30,0x00},/*"g",71*/
|
||||
{0x00,0x00,0x00,0x04,0x00,0x08,0x07,0xFF,0xF8,0x0F,0xFF,0xF8,0x00,0x10,0x08,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x20,0x08,0x00,0x3F,0xF8,0x00,0x1F,0xF8,0x00,0x00,0x08,0x00,0x00,0x00},/*"h",72*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x06,0x3F,0xF8,0x06,0x3F,0xF8,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00},/*"i",73*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x20,0x01,0x00,0x20,0x01,0x00,0x20,0x03,0x06,0x3F,0xFE,0x06,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"j",74*/
|
||||
{0x00,0x00,0x00,0x04,0x00,0x08,0x07,0xFF,0xF8,0x0F,0xFF,0xF8,0x00,0x01,0x88,0x00,0x03,0x00,0x00,0x2F,0xC0,0x00,0x38,0xF8,0x00,0x20,0x38,0x00,0x20,0x08,0x00,0x00,0x08,0x00,0x00,0x00},/*"k",75*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x08,0x04,0x00,0x08,0x04,0x00,0x08,0x07,0xFF,0xF8,0x0F,0xFF,0xF8,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00},/*"l",76*/
|
||||
{0x00,0x20,0x08,0x00,0x3F,0xF8,0x00,0x3F,0xF8,0x00,0x10,0x08,0x00,0x20,0x00,0x00,0x3F,0xF8,0x00,0x3F,0xF8,0x00,0x10,0x08,0x00,0x20,0x00,0x00,0x3F,0xF8,0x00,0x3F,0xF8,0x00,0x00,0x08},/*"m",77*/
|
||||
{0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x3F,0xF8,0x00,0x3F,0xF8,0x00,0x10,0x08,0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x20,0x08,0x00,0x3F,0xF8,0x00,0x1F,0xF8,0x00,0x00,0x08,0x00,0x00,0x00},/*"n",78*/
|
||||
{0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x0F,0xF0,0x00,0x18,0x30,0x00,0x30,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x30,0x08,0x00,0x18,0x30,0x00,0x0F,0xF0,0x00,0x07,0xC0,0x00,0x00,0x00},/*"o",79*/
|
||||
{0x00,0x00,0x00,0x00,0x20,0x01,0x00,0x3F,0xFF,0x00,0x3F,0xFF,0x00,0x10,0x11,0x00,0x20,0x09,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x30,0x38,0x00,0x1F,0xF0,0x00,0x0F,0xC0,0x00,0x00,0x00},/*"p",80*/
|
||||
{0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x1F,0xF0,0x00,0x38,0x18,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x20,0x09,0x00,0x10,0x11,0x00,0x1F,0xFF,0x00,0x3F,0xFF,0x00,0x00,0x01,0x00,0x00,0x00},/*"q",81*/
|
||||
{0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x3F,0xF8,0x00,0x3F,0xF8,0x00,0x08,0x08,0x00,0x10,0x08,0x00,0x20,0x08,0x00,0x20,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00},/*"r",82*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x78,0x00,0x1E,0x18,0x00,0x33,0x08,0x00,0x23,0x08,0x00,0x21,0x08,0x00,0x21,0x88,0x00,0x21,0x98,0x00,0x30,0xF0,0x00,0x38,0x60,0x00,0x00,0x00},/*"s",83*/
|
||||
{0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0xFF,0xF0,0x03,0xFF,0xF8,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00},/*"t",84*/
|
||||
{0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x3F,0xF0,0x00,0x7F,0xF8,0x00,0x00,0x18,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x20,0x10,0x00,0x3F,0xF8,0x00,0x7F,0xF0,0x00,0x00,0x10,0x00,0x00,0x00},/*"u",85*/
|
||||
{0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x30,0x00,0x00,0x3C,0x00,0x00,0x3F,0x80,0x00,0x23,0xF0,0x00,0x00,0x78,0x00,0x00,0x70,0x00,0x23,0x80,0x00,0x3C,0x00,0x00,0x30,0x00,0x00,0x20,0x00},/*"v",86*/
|
||||
{0x00,0x20,0x00,0x00,0x3C,0x00,0x00,0x3F,0xE0,0x00,0x23,0xF8,0x00,0x00,0xE0,0x00,0x27,0x00,0x00,0x3E,0x00,0x00,0x3F,0xE0,0x00,0x21,0xF8,0x00,0x01,0xE0,0x00,0x3E,0x00,0x00,0x20,0x00},/*"w",87*/
|
||||
{0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x38,0x38,0x00,0x3E,0x68,0x00,0x27,0x80,0x00,0x03,0xC8,0x00,0x2C,0xF8,0x00,0x38,0x38,0x00,0x20,0x18,0x00,0x20,0x08,0x00,0x00,0x00},/*"x",88*/
|
||||
{0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x30,0x03,0x00,0x3C,0x01,0x00,0x3F,0x83,0x00,0x23,0xEC,0x00,0x00,0x70,0x00,0x23,0x80,0x00,0x3C,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x00,0x00},/*"y",89*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x08,0x00,0x20,0x38,0x00,0x20,0xF8,0x00,0x23,0xE8,0x00,0x2F,0x88,0x00,0x3E,0x08,0x00,0x38,0x08,0x00,0x20,0x18,0x00,0x00,0x70,0x00,0x00,0x00},/*"z",90*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x14,0x00,0x1F,0xF7,0xFC,0x30,0x00,0x06,0x20,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00},/*"{",91*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"|",92*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x02,0x30,0x00,0x06,0x1F,0xF7,0xFC,0x00,0x14,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/
|
||||
{0x00,0x00,0x00,0x18,0x00,0x00,0x60,0x00,0x00,0x40,0x00,0x00,0x40,0x00,0x00,0x20,0x00,0x00,0x10,0x00,0x00,0x08,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0x0C,0x00,0x00,0x10,0x00,0x00},/*"~",94*/
|
||||
};
|
||||
|
||||
//32*32 ASCII<49>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
const unsigned char asc2_3216[95][128]={
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0xC0,0x07,0xFF,0xE1,0xE0,0x07,0xF0,0x01,0xE0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1C,0x20,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x18,0x0C,0x00,0x00,0x18,0x0C,0x00,0x00,0x18,0x0F,0xE0,0x00,0x1F,0xFC,0x00,0x03,0xF8,0x0C,0x00,0x00,0x18,0x0C,0x00,0x00,0x18,0x0C,0x00,0x00,0x18,0x0C,0x00,0x00,0x18,0x0C,0x00,0x00,0x18,0x0F,0xE0,0x00,0x1F,0xFC,0x00,0x03,0xF8,0x0C,0x00,0x00,0x18,0x0C,0x00,0x00,0x18,0x0C,0x00,0x00,0x00,0x00,0x00},/*"#",3*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x78,0x07,0xC0,0x00,0xFC,0x06,0x40,0x01,0x0E,0x00,0x20,0x03,0x07,0x00,0x20,0x02,0x03,0x80,0x20,0x0F,0xFF,0xFF,0xFC,0x02,0x01,0xC0,0x20,0x02,0x00,0xE0,0x60,0x01,0x30,0x70,0x40,0x01,0xF0,0x3F,0x80,0x00,0xF0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"$",4*/
|
||||
{0x00,0xFE,0x00,0x00,0x01,0xFF,0x00,0x00,0x03,0x01,0x80,0x00,0x02,0x00,0x80,0x60,0x03,0x01,0x81,0xC0,0x01,0xFF,0x07,0x00,0x00,0xFE,0x18,0x00,0x00,0x00,0xE0,0x00,0x00,0x03,0xBF,0x00,0x00,0x0C,0xFF,0xC0,0x00,0x71,0x80,0x60,0x01,0xC1,0x00,0x20,0x03,0x01,0x80,0x60,0x00,0x00,0xFF,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00},/*"%",5*/
|
||||
{0x00,0x00,0x1F,0x00,0x00,0x00,0x7F,0xC0,0x00,0xFC,0xC0,0xC0,0x01,0xFF,0x80,0x60,0x03,0x03,0xE0,0x20,0x02,0x02,0x78,0x20,0x02,0x06,0x1E,0x20,0x03,0xFC,0x07,0x40,0x01,0xF0,0x03,0x80,0x00,0x01,0x03,0xC0,0x00,0x01,0x1C,0x60,0x00,0x01,0xE0,0x20,0x00,0x01,0x00,0x20,0x00,0x01,0x00,0x40,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00},/*"&",6*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x1C,0x60,0x00,0x00,0x1C,0x40,0x00,0x00,0x1F,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF8,0x00,0x00,0x3F,0xFF,0x00,0x00,0x78,0x07,0xC0,0x01,0xC0,0x00,0xE0,0x03,0x00,0x00,0x30,0x04,0x00,0x00,0x08,0x08,0x00,0x00,0x04,0x10,0x00,0x00,0x02,0x00,0x00,0x00,0x00},/*"(",8*/
|
||||
{0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x02,0x08,0x00,0x00,0x04,0x04,0x00,0x00,0x08,0x03,0x00,0x00,0x30,0x01,0xC0,0x00,0xE0,0x00,0x78,0x07,0xC0,0x00,0x3F,0xFF,0x00,0x00,0x07,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x00,0x00,0x0E,0x38,0x00,0x00,0x0E,0x38,0x00,0x00,0x06,0x30,0x00,0x00,0x03,0x60,0x00,0x00,0x61,0x43,0x80,0x00,0xFF,0xFF,0x80,0x00,0x61,0x43,0x00,0x00,0x03,0x60,0x00,0x00,0x06,0x30,0x00,0x00,0x0E,0x38,0x00,0x00,0x0E,0x38,0x00,0x00,0x0C,0x18,0x00,0x00,0x00,0x00,0x00},/*"*",10*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x7F,0xFF,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00},/*"+",11*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xE3,0x00,0x00,0x00,0xE2,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00},/*"-",13*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xE0,0x00,0x00,0x03,0x80,0x00,0x00,0x0E,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xE0,0x00,0x00,0x03,0x80,0x00,0x00,0x0E,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xE0,0x00,0x00,0x03,0x80,0x00,0x00,0x0E,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"/",15*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF8,0x00,0x00,0x7F,0xFF,0x00,0x00,0xF0,0x07,0x80,0x01,0x80,0x00,0xC0,0x03,0x00,0x00,0x60,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0x00,0x00,0x60,0x01,0x80,0x00,0xC0,0x00,0xE0,0x03,0x80,0x00,0x7F,0xFF,0x00,0x00,0x0F,0xF8,0x00,0x00,0x00,0x00,0x00},/*"0",16*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x20,0x00,0x80,0x00,0x20,0x00,0x80,0x00,0x20,0x00,0x80,0x00,0x60,0x01,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"1",17*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0xE0,0x00,0x98,0x01,0x60,0x01,0x00,0x02,0x60,0x02,0x00,0x04,0x60,0x02,0x00,0x08,0x60,0x02,0x00,0x10,0x60,0x02,0x00,0x20,0x60,0x02,0x00,0x40,0x60,0x03,0x00,0x80,0x60,0x01,0x83,0x00,0x60,0x01,0xFE,0x00,0xE0,0x00,0x7C,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"2",18*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x07,0x80,0x01,0xF0,0x07,0xC0,0x01,0x00,0x00,0x40,0x02,0x00,0x00,0x20,0x02,0x01,0x00,0x20,0x02,0x01,0x00,0x20,0x02,0x01,0x00,0x20,0x03,0x03,0x80,0x20,0x01,0x86,0x80,0x40,0x01,0xFC,0xC0,0xC0,0x00,0x78,0x7F,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"3",19*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x48,0x00,0x00,0x01,0x88,0x00,0x00,0x06,0x08,0x00,0x00,0x0C,0x08,0x10,0x00,0x30,0x08,0x10,0x00,0x40,0x08,0x10,0x01,0xFF,0xFF,0xF0,0x03,0xFF,0xFF,0xF0,0x03,0xFF,0xFF,0xF0,0x00,0x00,0x08,0x10,0x00,0x00,0x08,0x10,0x00,0x00,0x08,0x10,0x00,0x00,0x00,0x00},/*"4",20*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x1F,0x86,0x40,0x03,0xE1,0x00,0x20,0x03,0x02,0x00,0x20,0x03,0x04,0x00,0x20,0x03,0x04,0x00,0x20,0x03,0x04,0x00,0x20,0x03,0x04,0x00,0x20,0x03,0x06,0x00,0x40,0x03,0x03,0x01,0xC0,0x03,0x01,0xFF,0x80,0x03,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"5",21*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x3F,0xFF,0x00,0x00,0x70,0xC3,0x80,0x00,0x81,0x80,0xC0,0x01,0x01,0x00,0x60,0x03,0x02,0x00,0x20,0x02,0x02,0x00,0x20,0x02,0x02,0x00,0x20,0x02,0x02,0x00,0x20,0x02,0x03,0x00,0x40,0x01,0xC1,0x80,0xC0,0x00,0xC0,0xFF,0x80,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00},/*"6",22*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0x80,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x07,0xE0,0x03,0x00,0x3F,0xE0,0x03,0x01,0xC0,0x00,0x03,0x06,0x00,0x00,0x03,0x18,0x00,0x00,0x03,0x60,0x00,0x00,0x03,0x80,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"7",23*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x78,0x3F,0x80,0x00,0xFC,0x60,0xC0,0x01,0x8E,0xC0,0x40,0x03,0x07,0x80,0x20,0x02,0x03,0x00,0x20,0x02,0x01,0x80,0x20,0x02,0x01,0x80,0x20,0x02,0x01,0xC0,0x20,0x03,0x01,0xE0,0x40,0x01,0x86,0x70,0xC0,0x00,0xFC,0x3F,0x80,0x00,0x78,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"8",24*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0xFF,0x81,0xC0,0x01,0xC0,0xC1,0xC0,0x01,0x00,0x60,0x20,0x02,0x00,0x20,0x20,0x02,0x00,0x20,0x20,0x02,0x00,0x20,0x20,0x02,0x00,0x20,0x60,0x02,0x00,0x40,0xC0,0x01,0x00,0xC1,0x80,0x00,0xC1,0x8F,0x00,0x00,0x7F,0xFE,0x00,0x00,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"9",25*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0xC0,0x00,0x07,0x81,0xE0,0x00,0x07,0x81,0xE0,0x00,0x03,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x66,0x00,0x06,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x01,0xC0,0x00,0x00,0x03,0x60,0x00,0x00,0x06,0x30,0x00,0x00,0x0C,0x18,0x00,0x00,0x18,0x0C,0x00,0x00,0x30,0x06,0x00,0x00,0x60,0x03,0x00,0x00,0xC0,0x01,0x80,0x01,0x00,0x00,0x40,0x02,0x00,0x00,0x20,0x04,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"<",28*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x00,0x00,0x00},/*"=",29*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x10,0x02,0x00,0x00,0x20,0x01,0x00,0x00,0x40,0x00,0xC0,0x01,0x80,0x00,0x60,0x03,0x00,0x00,0x30,0x06,0x00,0x00,0x18,0x0C,0x00,0x00,0x0C,0x18,0x00,0x00,0x06,0x30,0x00,0x00,0x03,0x60,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*">",30*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x02,0x38,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0xC0,0x04,0x00,0x79,0xE0,0x04,0x00,0x81,0xE0,0x04,0x01,0x00,0xC0,0x04,0x03,0x00,0x00,0x02,0x02,0x00,0x00,0x03,0x06,0x00,0x00,0x01,0xFC,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00},/*"?",31*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x0F,0xF8,0x00,0x00,0x3F,0xFE,0x00,0x00,0x70,0x07,0x80,0x00,0xC0,0x00,0xC0,0x01,0x01,0xF8,0x40,0x03,0x07,0xFC,0x20,0x02,0x1E,0x04,0x20,0x02,0x30,0x08,0x20,0x02,0x20,0x30,0x20,0x02,0x3F,0xFC,0x20,0x01,0x3F,0x04,0x40,0x01,0x80,0x0C,0xC0,0x00,0xE0,0x31,0x80,0x00,0x1F,0xC2,0x00,0x00,0x00,0x00,0x00},/*"@",32*/
|
||||
{0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x60,0x00,0x00,0x03,0xE0,0x00,0x00,0x3E,0x20,0x00,0x03,0xE0,0x20,0x00,0x3E,0x20,0x00,0x03,0xE0,0x20,0x00,0x03,0x80,0x20,0x00,0x07,0xFC,0x20,0x00,0x00,0x3F,0xE0,0x00,0x00,0x03,0xFE,0x20,0x00,0x00,0x3F,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},/*"A",33*/
|
||||
{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x02,0x01,0x00,0x20,0x02,0x01,0x00,0x20,0x02,0x01,0x00,0x20,0x02,0x01,0x00,0x20,0x02,0x01,0x00,0x20,0x03,0x03,0x00,0x20,0x01,0x86,0x80,0x60,0x01,0xFC,0xC0,0xC0,0x00,0xF8,0x7F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00},/*"B",34*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x07,0xF8,0x00,0x00,0x3F,0xFF,0x00,0x00,0x70,0x07,0x80,0x00,0xC0,0x00,0xC0,0x01,0x00,0x00,0x40,0x03,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x01,0x00,0x00,0x40,0x01,0x80,0x00,0xC0,0x03,0xC0,0x01,0x80,0x00,0x30,0x06,0x00,0x00,0x00,0x00,0x00},/*"C",35*/
|
||||
{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0x00,0x00,0x60,0x01,0x00,0x00,0x40,0x01,0x80,0x00,0xC0,0x00,0xF0,0x07,0x80,0x00,0x7F,0xFE,0x00,0x00,0x0F,0xF8,0x00,0x00,0x00,0x00,0x00},/*"D",36*/
|
||||
{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x02,0x01,0x00,0x20,0x02,0x01,0x00,0x20,0x02,0x01,0x00,0x20,0x02,0x01,0x00,0x20,0x02,0x01,0x00,0x20,0x02,0x03,0x80,0x20,0x02,0x0F,0xE0,0x20,0x03,0x00,0x00,0x60,0x03,0xC0,0x00,0xE0,0x00,0x60,0x03,0x00,0x00,0x00,0x00,0x00},/*"E",37*/
|
||||
{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x02,0x01,0x00,0x20,0x02,0x01,0x00,0x20,0x02,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x02,0x03,0x80,0x00,0x03,0x0F,0xE0,0x00,0x03,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x60,0x00,0x00},/*"F",38*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x07,0xF8,0x00,0x00,0x3F,0xFE,0x00,0x00,0x70,0x07,0x80,0x01,0xC0,0x01,0xC0,0x01,0x00,0x00,0x40,0x03,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x01,0x00,0x20,0x20,0x01,0x00,0x20,0x40,0x03,0xC0,0x3F,0x80,0x00,0x30,0x3F,0x80,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00},/*"G",39*/
|
||||
{0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x02,0x00,0x80,0x20,0x02,0x00,0x80,0x20,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x80,0x20,0x02,0x00,0x80,0x20,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x00},/*"H",40*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"I",41*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x06,0x03,0xFF,0xFF,0xFC,0x03,0xFF,0xFF,0xF8,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"J",42*/
|
||||
{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x02,0x00,0xC0,0x20,0x02,0x01,0x00,0x20,0x00,0x07,0x80,0x00,0x00,0x0F,0xE0,0x00,0x00,0x30,0xF8,0x00,0x02,0x60,0x3E,0x20,0x03,0x80,0x0F,0x20,0x03,0x00,0x03,0xE0,0x02,0x00,0x00,0xE0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x20},/*"K",43*/
|
||||
{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xE0,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00},/*"L",44*/
|
||||
{0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x03,0xE0,0x00,0x20,0x03,0xFF,0x00,0x20,0x00,0x1F,0xF0,0x00,0x00,0x01,0xFF,0x80,0x00,0x00,0x0F,0xE0,0x00,0x00,0x1E,0x00,0x00,0x03,0xE0,0x00,0x00,0x3E,0x00,0x20,0x03,0xE0,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20},/*"M",45*/
|
||||
{0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x03,0x80,0x00,0x20,0x03,0xF0,0x00,0x20,0x00,0xFC,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x7C,0x00,0x02,0x00,0x1F,0x80,0x02,0x00,0x07,0xE0,0x03,0xFF,0xFF,0xE0,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"N",46*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x0F,0xF8,0x00,0x00,0x3F,0xFE,0x00,0x00,0xF0,0x07,0x80,0x01,0x80,0x00,0xC0,0x01,0x00,0x00,0x40,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x01,0x00,0x00,0x40,0x01,0x80,0x00,0xC0,0x00,0xF0,0x03,0x80,0x00,0x3F,0xFE,0x00,0x00,0x0F,0xF8,0x00,0x00,0x00,0x00,0x00},/*"O",47*/
|
||||
{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x02,0x00,0x80,0x20,0x02,0x00,0x80,0x20,0x02,0x00,0x80,0x00,0x02,0x00,0x80,0x00,0x02,0x00,0x80,0x00,0x02,0x00,0x80,0x00,0x03,0x01,0x80,0x00,0x01,0x83,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00},/*"P",48*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x0F,0xF8,0x00,0x00,0x7F,0xFF,0x00,0x00,0xF0,0x03,0x80,0x01,0x80,0x01,0xC0,0x01,0x00,0x06,0x40,0x02,0x00,0x04,0x20,0x02,0x00,0x04,0x20,0x02,0x00,0x06,0x20,0x02,0x00,0x03,0xE0,0x01,0x00,0x00,0xF8,0x01,0x80,0x00,0x5C,0x00,0xE0,0x03,0x8C,0x00,0x3F,0xFF,0x0C,0x00,0x0F,0xFC,0x18,0x00,0x00,0x00,0x00},/*"Q",49*/
|
||||
{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x02,0x01,0x00,0x20,0x02,0x01,0x00,0x20,0x02,0x01,0x80,0x00,0x02,0x01,0xE0,0x00,0x02,0x01,0xFC,0x00,0x03,0x03,0x3F,0x80,0x01,0x86,0x07,0xE0,0x01,0xFC,0x00,0xE0,0x00,0xF8,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},/*"R",50*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x06,0x00,0x00,0xFE,0x01,0xE0,0x01,0x86,0x00,0xC0,0x03,0x03,0x00,0x40,0x02,0x03,0x00,0x20,0x02,0x01,0x80,0x20,0x02,0x01,0x80,0x20,0x02,0x01,0xC0,0x20,0x02,0x00,0xC0,0x20,0x01,0x00,0xE0,0x60,0x01,0x80,0x70,0xC0,0x03,0xE0,0x3F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00},/*"S",51*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x03,0x80,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*"T",52*/
|
||||
{0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0xC0,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x80,0x03,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"U",53*/
|
||||
{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xFC,0x00,0x00,0x02,0x3F,0xC0,0x00,0x00,0x03,0xF8,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x78,0x00,0x02,0x03,0xC0,0x00,0x02,0x3C,0x00,0x00,0x03,0xC0,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"V",54*/
|
||||
{0x02,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xFF,0x80,0x00,0x02,0x3F,0xFE,0x00,0x02,0x00,0x7F,0xE0,0x00,0x00,0x0F,0x00,0x02,0x00,0xF0,0x00,0x03,0xEF,0x00,0x00,0x03,0xFF,0x80,0x00,0x02,0x0F,0xFE,0x00,0x00,0x00,0x3F,0xE0,0x00,0x00,0x1F,0x00,0x02,0x07,0xE0,0x00,0x03,0xF8,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"W",55*/
|
||||
{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0x80,0x00,0xE0,0x03,0xF0,0x03,0x20,0x02,0xFC,0x0C,0x20,0x02,0x1F,0x30,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xF0,0x00,0x02,0x18,0x7C,0x00,0x02,0x60,0x1F,0x20,0x03,0x80,0x03,0xE0,0x02,0x00,0x00,0xE0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},/*"X",56*/
|
||||
{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xF8,0x00,0x00,0x02,0x3E,0x00,0x20,0x02,0x0F,0xC0,0x20,0x00,0x01,0xFF,0xE0,0x00,0x00,0x7F,0xE0,0x00,0x03,0x80,0x20,0x02,0x1C,0x00,0x20,0x02,0x70,0x00,0x00,0x03,0x80,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"Y",57*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x60,0x00,0xE0,0x03,0x80,0x03,0xE0,0x03,0x00,0x0F,0xA0,0x02,0x00,0x3E,0x20,0x02,0x00,0xF8,0x20,0x02,0x03,0xE0,0x20,0x02,0x0F,0x80,0x20,0x02,0x3E,0x00,0x20,0x02,0x78,0x00,0x20,0x03,0xE0,0x00,0x60,0x03,0x80,0x00,0xE0,0x02,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"Z",58*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFC,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"[",59*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"\",60*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x1F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"]",61*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
|
||||
{0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01},/*"_",63*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x01,0x8F,0xC0,0x00,0x03,0x8C,0x60,0x00,0x06,0x18,0x20,0x00,0x04,0x10,0x20,0x00,0x04,0x10,0x20,0x00,0x04,0x20,0x20,0x00,0x04,0x20,0x40,0x00,0x06,0x20,0x40,0x00,0x03,0xFF,0xC0,0x00,0x01,0xFF,0xE0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00},/*"a",65*/
|
||||
{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x00,0x01,0x80,0xC0,0x00,0x02,0x00,0x60,0x00,0x02,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x06,0x00,0x40,0x00,0x03,0x00,0xC0,0x00,0x01,0xFF,0x80,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00},/*"b",66*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x01,0xFF,0x80,0x00,0x03,0x81,0xC0,0x00,0x02,0x00,0x40,0x00,0x06,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x06,0x00,0x20,0x00,0x03,0xC0,0x40,0x00,0x01,0xC0,0x80,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"c",67*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x01,0xFF,0x80,0x00,0x03,0x80,0xC0,0x00,0x06,0x00,0x60,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x02,0x04,0x00,0x40,0x02,0x02,0x00,0x80,0x03,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00},/*"d",68*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x01,0xFF,0x80,0x00,0x03,0x11,0xC0,0x00,0x02,0x10,0x40,0x00,0x04,0x10,0x60,0x00,0x04,0x10,0x20,0x00,0x04,0x10,0x20,0x00,0x04,0x10,0x20,0x00,0x06,0x10,0x20,0x00,0x03,0x10,0x40,0x00,0x01,0xF0,0xC0,0x00,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"e",69*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x7F,0xFF,0xE0,0x01,0xFF,0xFF,0xE0,0x01,0x04,0x00,0x20,0x03,0x04,0x00,0x20,0x02,0x04,0x00,0x20,0x02,0x04,0x00,0x20,0x02,0x04,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00},/*"f",70*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0xE3,0x3E,0x00,0x03,0xFF,0xC2,0x00,0x02,0x0C,0xC3,0x00,0x04,0x04,0xC1,0x00,0x04,0x04,0xC1,0x00,0x04,0x04,0xC1,0x00,0x04,0x04,0xC1,0x00,0x06,0x0C,0xC1,0x00,0x03,0xF8,0xC3,0x00,0x05,0xF0,0x62,0x00,0x06,0x00,0x7E,0x00,0x06,0x00,0x3C,0x00,0x00,0x00,0x00},/*"g",71*/
|
||||
{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x00,0x01,0x00,0x20,0x00,0x02,0x00,0x20,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x06,0x00,0x20,0x00,0x03,0xFF,0xE0,0x00,0x01,0xFF,0xE0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20},/*"h",72*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x03,0x87,0xFF,0xE0,0x03,0x8F,0xFF,0xE0,0x03,0x80,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"i",73*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x04,0x00,0x01,0x00,0x04,0x00,0x01,0x00,0x04,0x00,0x03,0x00,0x04,0x00,0x06,0x03,0x87,0xFF,0xFC,0x03,0x8F,0xFF,0xF8,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"j",74*/
|
||||
{0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x00,0x00,0x08,0x20,0x00,0x00,0x10,0x20,0x00,0x00,0x30,0x00,0x00,0x00,0xFC,0x00,0x00,0x05,0x8E,0x00,0x00,0x07,0x07,0xA0,0x00,0x06,0x01,0xE0,0x00,0x04,0x00,0xE0,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},/*"k",75*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x03,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"l",76*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x07,0xFF,0xE0,0x00,0x0F,0xFF,0xE0,0x00,0x02,0x00,0x20,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x07,0xFF,0xE0,0x00,0x03,0xFF,0xE0,0x00,0x02,0x00,0x20,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x07,0xFF,0xE0,0x00,0x03,0xFF,0xE0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},/*"m",77*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x07,0xFF,0xE0,0x00,0x0F,0xFF,0xE0,0x00,0x01,0x00,0x20,0x00,0x02,0x00,0x20,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x06,0x00,0x20,0x00,0x03,0xFF,0xE0,0x00,0x01,0xFF,0xE0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20},/*"n",78*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0xFF,0x80,0x00,0x03,0x81,0xC0,0x00,0x02,0x00,0x40,0x00,0x06,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x06,0x00,0x20,0x00,0x02,0x00,0x40,0x00,0x03,0x81,0xC0,0x00,0x01,0xFF,0x80,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00},/*"o",79*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x01,0x00,0x04,0x00,0x01,0x00,0x07,0xFF,0xFF,0x00,0x0F,0xFF,0xFF,0x00,0x01,0x00,0xC1,0x00,0x02,0x00,0x41,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x06,0x00,0x40,0x00,0x03,0x01,0xC0,0x00,0x01,0xFF,0x80,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00},/*"p",80*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x01,0xFF,0x80,0x00,0x03,0x80,0xC0,0x00,0x02,0x00,0x60,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x02,0x00,0x41,0x00,0x03,0x00,0xC1,0x00,0x03,0xFF,0xFF,0x00,0x07,0xFF,0xFF,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01},/*"q",81*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x0F,0xFF,0xE0,0x00,0x0F,0xFF,0xE0,0x00,0x00,0xC0,0x20,0x00,0x01,0x00,0x20,0x00,0x02,0x00,0x20,0x00,0x06,0x00,0x20,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00},/*"r",82*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x01,0xC0,0xE0,0x00,0x03,0xE0,0x40,0x00,0x06,0x30,0x20,0x00,0x04,0x30,0x20,0x00,0x04,0x18,0x20,0x00,0x04,0x18,0x20,0x00,0x04,0x18,0x20,0x00,0x04,0x0C,0x20,0x00,0x02,0x0C,0x60,0x00,0x03,0x07,0xC0,0x00,0x07,0x83,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"s",83*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x1F,0xFF,0x80,0x00,0xFF,0xFF,0xC0,0x00,0x04,0x00,0x60,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x40,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"t",84*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x07,0xFF,0x80,0x00,0x0F,0xFF,0xC0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x40,0x00,0x04,0x00,0x80,0x00,0x07,0xFF,0xE0,0x00,0x0F,0xFF,0xC0,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x40},/*"u",85*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0xF0,0x00,0x00,0x04,0xFE,0x00,0x00,0x04,0x1F,0xC0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0x80,0x00,0x00,0x1C,0x00,0x00,0x04,0x60,0x00,0x00,0x07,0x80,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"v",86*/
|
||||
{0x00,0x04,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xFC,0x00,0x00,0x04,0x3F,0x80,0x00,0x00,0x03,0xE0,0x00,0x04,0x0F,0x80,0x00,0x06,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xFF,0x80,0x00,0x04,0x0F,0xE0,0x00,0x00,0x03,0x80,0x00,0x04,0x3C,0x00,0x00,0x07,0xC0,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00},/*"w",87*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x20,0x00,0x04,0x00,0x60,0x00,0x07,0x00,0xE0,0x00,0x07,0x83,0x20,0x00,0x07,0xE6,0x00,0x00,0x04,0xF8,0x00,0x00,0x00,0x3C,0x00,0x00,0x04,0x5E,0x20,0x00,0x05,0x87,0xA0,0x00,0x06,0x01,0xE0,0x00,0x04,0x00,0x60,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},/*"x",88*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x03,0x00,0x07,0x00,0x03,0x00,0x07,0xE0,0x01,0x00,0x04,0xF8,0x01,0x00,0x04,0x1F,0x02,0x00,0x00,0x07,0xFC,0x00,0x00,0x00,0xE0,0x00,0x00,0x07,0x00,0x00,0x04,0x38,0x00,0x00,0x07,0xC0,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00},/*"y",89*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x60,0x00,0x06,0x00,0xE0,0x00,0x04,0x03,0xE0,0x00,0x04,0x07,0xA0,0x00,0x04,0x0E,0x20,0x00,0x04,0x3C,0x20,0x00,0x04,0x70,0x20,0x00,0x05,0xE0,0x20,0x00,0x07,0x80,0x20,0x00,0x07,0x00,0x60,0x00,0x04,0x00,0xE0,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"z",90*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x01,0x40,0x00,0x07,0xFE,0x3F,0xF8,0x08,0x00,0x00,0x04,0x10,0x00,0x00,0x02,0x10,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"{",91*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"|",92*/
|
||||
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x02,0x10,0x00,0x00,0x02,0x08,0x00,0x00,0x04,0x07,0xFE,0x3F,0xF8,0x00,0x01,0x40,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/
|
||||
{0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/
|
||||
};
|
||||
#endif
|
||||
2251
HARDWARE/LCD/lcd.c
2251
HARDWARE/LCD/lcd.c
File diff suppressed because it is too large
Load Diff
@@ -1,153 +0,0 @@
|
||||
#ifndef __LCD_H
|
||||
#define __LCD_H
|
||||
#include "sys.h"
|
||||
#include "stdlib.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//2.8<EFBFBD><EFBFBD>/3.5<EFBFBD><EFBFBD>/4.3<EFBFBD><EFBFBD>/7<><37> TFTҺ<54><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//֧<><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IC<49>ͺŰ<CDBA><C5B0><EFBFBD>:ILI9341/NT35310/NT35510/SSD1963<36><33>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/6
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.4
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
//V1.1
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RGBLCD<43><44><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>(ʹ<><CAB9>LTDC).
|
||||
//V1.2 20211111
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ST7789<38><39><EFBFBD><EFBFBD>IC<49><43>֧<EFBFBD><D6A7>
|
||||
//V1.3 20211208
|
||||
//<2F><EFBFBD>NT5510 ID<49><44>ȡ<EFBFBD><C8A1>ʽ,<2C><>Ϊ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>Կ,Ȼ<><C8BB><EFBFBD><EFBFBD>ȡC500<30><30>C501,<2C>Ӷ<EFBFBD><D3B6><EFBFBD>ȡ<EFBFBD><C8A1>ȷ<EFBFBD><C8B7>ID(0X5510)
|
||||
//V1.4 20211222
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NT5510 ID<49><44>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C501ָ<31><EFBFBD><EEA3A9><EFBFBD><EFBFBD>SSD1963<36><EFBFBD><F3B4A5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ID<49><44><EFBFBD>⣬<EFBFBD><E2A3AC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//LCD<43><44>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
typedef struct
|
||||
{
|
||||
u16 width; //LCD <20><><EFBFBD><EFBFBD>
|
||||
u16 height; //LCD <20>߶<EFBFBD>
|
||||
u16 id; //LCD ID
|
||||
u8 dir; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u16 wramcmd; //<2F><>ʼдgramָ<6D><D6B8>
|
||||
u16 setxcmd; //<2F><><EFBFBD><EFBFBD>x<EFBFBD><78><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
u16 setycmd; //<2F><><EFBFBD><EFBFBD>y<EFBFBD><79><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
}_lcd_dev;
|
||||
|
||||
//LCD<43><44><EFBFBD><EFBFBD>
|
||||
extern _lcd_dev lcddev; //<2F><><EFBFBD><EFBFBD>LCD<43><44>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
||||
//LCD<43>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>ɫ
|
||||
extern u32 POINT_COLOR;//Ĭ<>Ϻ<EFBFBD>ɫ
|
||||
extern u32 BACK_COLOR; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ.Ĭ<><C4AC>Ϊ<EFBFBD><CEAA>ɫ
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//-----------------MCU<43><55> LCD<43>˿ڶ<CBBF><DAB6><EFBFBD>----------------
|
||||
//LCD<43><44><EFBFBD><EFBFBD> PB5
|
||||
#define LCD_LED PBout(5)
|
||||
//LCD<43><44>ַ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
typedef struct
|
||||
{
|
||||
vu16 LCD_REG;
|
||||
vu16 LCD_RAM;
|
||||
} LCD_TypeDef;
|
||||
//ʹ<><CAB9>NOR/SRAM<41><4D> Bank1.sector4,<2C><>ַλHADDR[27,26]=11 A18<31><38>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱSTM32<33>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һλ<D2BB><CEBB><EFBFBD><EFBFBD>!
|
||||
#define LCD_BASE ((u32)(0x60000000 | 0x0007FFFE))
|
||||
#define LCD ((LCD_TypeDef *) LCD_BASE)
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//ɨ<>跽<EFBFBD><E8B7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define L2R_U2D 0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
|
||||
#define L2R_D2U 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
|
||||
#define R2L_U2D 2 //<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>,<2C><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
|
||||
#define R2L_D2U 3 //<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>,<2C><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
|
||||
|
||||
#define U2D_L2R 4 //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define U2D_R2L 5 //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>,<2C><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>
|
||||
#define D2U_L2R 6 //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define D2U_R2L 7 //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>,<2C><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>
|
||||
|
||||
#define DFT_SCAN_DIR L2R_U2D //Ĭ<>ϵ<EFBFBD>ɨ<EFBFBD>跽<EFBFBD><E8B7BD>
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
||||
#define WHITE 0xFFFF
|
||||
#define BLACK 0x0000
|
||||
#define BLUE 0x001F
|
||||
#define BRED 0XF81F
|
||||
#define GRED 0XFFE0
|
||||
#define GBLUE 0X07FF
|
||||
#define RED 0xF800
|
||||
#define MAGENTA 0xF81F
|
||||
#define GREEN 0x07E0
|
||||
#define CYAN 0x7FFF
|
||||
#define YELLOW 0xFFE0
|
||||
#define BROWN 0XBC40 //<2F><>ɫ
|
||||
#define BRRED 0XFC07 //<2F>غ<EFBFBD>ɫ
|
||||
#define GRAY 0X8430 //<2F><>ɫ
|
||||
//GUI<55><49>ɫ
|
||||
|
||||
#define DARKBLUE 0X01CF //<2F><><EFBFBD><EFBFBD>ɫ
|
||||
#define LIGHTBLUE 0X7D7C //dz<><C7B3>ɫ
|
||||
#define GRAYBLUE 0X5458 //<2F><><EFBFBD><EFBFBD>ɫ
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫΪPANEL<45><4C><EFBFBD><EFBFBD>ɫ
|
||||
|
||||
#define LIGHTGREEN 0X841F //dz<><C7B3>ɫ
|
||||
//#define LIGHTGRAY 0XEF5B //dz<><C7B3>ɫ(PANNEL)
|
||||
#define LGRAY 0XC618 //dz<><C7B3>ɫ(PANNEL),<2C><><EFBFBD>屳<EFBFBD><E5B1B3>ɫ
|
||||
|
||||
#define LGRAYBLUE 0XA651 //dz<><C7B3><EFBFBD><EFBFBD>ɫ(<28>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>ɫ)
|
||||
#define LBBLUE 0X2B12 //dz<><C7B3><EFBFBD><EFBFBD>ɫ(ѡ<><D1A1><EFBFBD><EFBFBD>Ŀ<EFBFBD>ķ<EFBFBD>ɫ)
|
||||
|
||||
void LCD_Init(void); //<2F><>ʼ<EFBFBD><CABC>
|
||||
void LCD_DisplayOn(void); //<2F><><EFBFBD><EFBFBD>ʾ
|
||||
void LCD_DisplayOff(void); //<2F><><EFBFBD><EFBFBD>ʾ
|
||||
void LCD_Clear(u32 Color); //<2F><><EFBFBD><EFBFBD>
|
||||
void LCD_SetCursor(u16 Xpos, u16 Ypos); //<2F><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>
|
||||
void LCD_DrawPoint(u16 x,u16 y); //<2F><><EFBFBD><EFBFBD>
|
||||
void LCD_Fast_DrawPoint(u16 x,u16 y,u32 color); //<2F><><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD>
|
||||
u32 LCD_ReadPoint(u16 x,u16 y); //<2F><><EFBFBD><EFBFBD>
|
||||
void LCD_Draw_Circle(u16 x0,u16 y0,u8 r); //<2F><>Բ
|
||||
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2); //<2F><><EFBFBD><EFBFBD>
|
||||
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u32 color); //<2F><><EFBFBD>䵥ɫ
|
||||
void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ
|
||||
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode); //<2F><>ʾһ<CABE><D2BB><EFBFBD>ַ<EFBFBD>
|
||||
void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size); //<2F><>ʾһ<CABE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode); //<2F><>ʾ <20><><EFBFBD><EFBFBD>
|
||||
void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p); //<2F><>ʾһ<CABE><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>,12/16<31><36><EFBFBD><EFBFBD>
|
||||
|
||||
void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue);
|
||||
u16 LCD_ReadReg(u16 LCD_Reg);
|
||||
void LCD_WriteRAM_Prepare(void);
|
||||
void LCD_WriteRAM(u16 RGB_Code);
|
||||
void LCD_SSD_BackLightSet(u8 pwm); //SSD1963 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LCD_Scan_Dir(u8 dir); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD>跽<EFBFBD><E8B7BD>
|
||||
void LCD_Display_Dir(u8 dir); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
void LCD_Set_Window(u16 sx,u16 sy,u16 width,u16 height); //<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
|
||||
//LCD<43>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define SSD_HOR_RESOLUTION 800 //LCDˮƽ<CBAE>ֱ<EFBFBD><D6B1><EFBFBD>
|
||||
#define SSD_VER_RESOLUTION 480 //LCD<43><44>ֱ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>
|
||||
//LCD<43><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define SSD_HOR_PULSE_WIDTH 1 //ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>
|
||||
#define SSD_HOR_BACK_PORCH 46 //ˮƽǰ<C6BD><C7B0>
|
||||
#define SSD_HOR_FRONT_PORCH 210 //ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>
|
||||
|
||||
#define SSD_VER_PULSE_WIDTH 1 //<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
|
||||
#define SSD_VER_BACK_PORCH 23 //<2F><>ֱǰ<D6B1><C7B0>
|
||||
#define SSD_VER_FRONT_PORCH 22 //<2F><>ֱǰ<D6B1><C7B0>
|
||||
//<2F><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define SSD_HT (SSD_HOR_RESOLUTION+SSD_HOR_BACK_PORCH+SSD_HOR_FRONT_PORCH)
|
||||
#define SSD_HPS (SSD_HOR_BACK_PORCH)
|
||||
#define SSD_VT (SSD_VER_RESOLUTION+SSD_VER_BACK_PORCH+SSD_VER_FRONT_PORCH)
|
||||
#define SSD_VPS (SSD_VER_BACK_PORCH)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,525 +0,0 @@
|
||||
#include "ltdc.h"
|
||||
#include "lcd.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//LTDC<44><43><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/7/13
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.2
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//<2F><EFBFBD>˵<EFBFBD><CBB5>
|
||||
//V1.1 20161026
|
||||
//<2F><>LTDC_PanelID_Read<61><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>delay<61><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-O2<4F>Ż<EFBFBD><C5BB><EFBFBD>ID<49><44><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD><EFBFBD><EFBFBD>BUG
|
||||
//V1.2 20170606
|
||||
//<2F><><EFBFBD><EFBFBD>10.1<EFBFBD><EFBFBD>RGB<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
LTDC_HandleTypeDef LTDC_Handler; //LTDC<44><43><EFBFBD><EFBFBD>
|
||||
DMA2D_HandleTypeDef DMA2D_Handler; //DMA2D<32><44><EFBFBD><EFBFBD>
|
||||
|
||||
//<2F><><EFBFBD>ݲ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>ʽ,<2C><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#if LCD_PIXFORMAT==LCD_PIXFORMAT_ARGB8888||LCD_PIXFORMAT==LCD_PIXFORMAT_RGB888
|
||||
u32 ltdc_lcd_framebuf[1280][800] __attribute__((at(LCD_FRAME_BUF_ADDR))); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>ʱ,LCD<43><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
#else
|
||||
u16 ltdc_lcd_framebuf[1280][800] __attribute__((at(LCD_FRAME_BUF_ADDR))); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>ʱ,LCD<43><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
#endif
|
||||
|
||||
u32 *ltdc_framebuf[2]; //LTDC LCD֡<44><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>,<2C><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>С<EFBFBD><D0A1><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
|
||||
_ltdc_dev lcdltdc; //<2F><><EFBFBD><EFBFBD>LCD LTDC<44><43><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>LCD<43><44><EFBFBD><EFBFBD>
|
||||
//lcd_switch:1 <20><><EFBFBD><EFBFBD>,0<><30><EFBFBD>ر<EFBFBD>
|
||||
void LTDC_Switch(u8 sw)
|
||||
{
|
||||
if(sw==1) __HAL_LTDC_ENABLE(<DC_Handler);
|
||||
else if(sw==0)__HAL_LTDC_DISABLE(<DC_Handler);
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>
|
||||
//layerx:<3A><><EFBFBD><EFBFBD>,0,<2C><>һ<EFBFBD><D2BB>; 1,<2C>ڶ<EFBFBD><DAB6><EFBFBD>
|
||||
//sw:1 <20><><EFBFBD><EFBFBD>;0<>ر<EFBFBD>
|
||||
void LTDC_Layer_Switch(u8 layerx,u8 sw)
|
||||
{
|
||||
if(sw==1) __HAL_LTDC_LAYER_ENABLE(<DC_Handler,layerx);
|
||||
else if(sw==0) __HAL_LTDC_LAYER_DISABLE(<DC_Handler,layerx);
|
||||
__HAL_LTDC_RELOAD_CONFIG(<DC_Handler);
|
||||
}
|
||||
|
||||
//ѡ<><D1A1><EFBFBD><EFBFBD>
|
||||
//layerx:<3A><><EFBFBD><EFBFBD>;0,<2C><>һ<EFBFBD><D2BB>;1,<2C>ڶ<EFBFBD><DAB6><EFBFBD>;
|
||||
void LTDC_Select_Layer(u8 layerx)
|
||||
{
|
||||
lcdltdc.activelayer=layerx;
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>LCD<43><44>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
//dir:0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1,<2C><><EFBFBD><EFBFBD>
|
||||
void LTDC_Display_Dir(u8 dir)
|
||||
{
|
||||
lcdltdc.dir=dir; //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
if(dir==0) //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
lcdltdc.width=lcdltdc.pheight;
|
||||
lcdltdc.height=lcdltdc.pwidth;
|
||||
}else if(dir==1) //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
lcdltdc.width=lcdltdc.pwidth;
|
||||
lcdltdc.height=lcdltdc.pheight;
|
||||
}
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD>㺯<EFBFBD><E3BAAF>
|
||||
//x,y:д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//color:<3A><>ɫֵ
|
||||
void LTDC_Draw_Point(u16 x,u16 y,u32 color)
|
||||
{
|
||||
#if LCD_PIXFORMAT==LCD_PIXFORMAT_ARGB8888||LCD_PIXFORMAT==LCD_PIXFORMAT_RGB888
|
||||
if(lcdltdc.dir) //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
*(u32*)((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*y+x))=color;
|
||||
}else //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
*(u32*)((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*(lcdltdc.pheight-x)+y))=color;
|
||||
}
|
||||
#else
|
||||
if(lcdltdc.dir) //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
*(u16*)((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*y+x))=color;
|
||||
}else //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
*(u16*)((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*(lcdltdc.pheight-x-1)+y))=color;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD>㺯<EFBFBD><E3BAAF>
|
||||
//x,y:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>ɫֵ
|
||||
u32 LTDC_Read_Point(u16 x,u16 y)
|
||||
{
|
||||
#if LCD_PIXFORMAT==LCD_PIXFORMAT_ARGB8888||LCD_PIXFORMAT==LCD_PIXFORMAT_RGB888
|
||||
if(lcdltdc.dir) //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
return *(u32*)((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*y+x));
|
||||
}else //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
return *(u32*)((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*(lcdltdc.pheight-x)+y));
|
||||
}
|
||||
#else
|
||||
if(lcdltdc.dir) //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
return *(u16*)((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*y+x));
|
||||
}else //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
return *(u16*)((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*(lcdltdc.pheight-x-1)+y));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//LTDC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,DMA2D<32><44><EFBFBD><EFBFBD>
|
||||
//(sx,sy),(ex,ey):<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζԽ<CEB6><D4BD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>СΪ:(ex-sx+1)*(ey-sy+1)
|
||||
//color:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
||||
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ҪƵ<D2AA><C6B5><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>亯<EFBFBD><E4BAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ٶȣ<D9B6><C8A3><EFBFBD><EFBFBD>亯<EFBFBD><E4BAAF><EFBFBD><EFBFBD><EFBFBD>üĴ<C3BC><C4B4><EFBFBD><EFBFBD>汾<EFBFBD><E6B1BE>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>Ӧ<EFBFBD>Ŀ⺯<C4BF><E2BAAF><EFBFBD>汾<EFBFBD>Ĵ<EFBFBD><C4B4>롣
|
||||
void LTDC_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u32 color)
|
||||
{
|
||||
u32 psx,psy,pex,pey; //<2F><>LCD<43><44><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>仯<EFBFBD><E4BBAF><EFBFBD>仯
|
||||
u32 timeout=0;
|
||||
u16 offline;
|
||||
u32 addr;
|
||||
//<2F><><EFBFBD><EFBFBD>ϵת<CFB5><D7AA>
|
||||
if(lcdltdc.dir) //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
psx=sx;psy=sy;
|
||||
pex=ex;pey=ey;
|
||||
}else //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
psx=sy;psy=lcdltdc.pheight-ex-1;
|
||||
pex=ey;pey=lcdltdc.pheight-sx-1;
|
||||
}
|
||||
offline=lcdltdc.pwidth-(pex-psx+1);
|
||||
addr=((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*psy+psx));
|
||||
__HAL_RCC_DMA2D_CLK_ENABLE(); //ʹ<><CAB9>DM2Dʱ<44><CAB1>
|
||||
DMA2D->CR&=~(DMA2D_CR_START); //<2F><>ֹͣDMA2D
|
||||
DMA2D->CR=DMA2D_R2M; //<2F>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2>ģʽ
|
||||
DMA2D->OPFCCR=LCD_PIXFORMAT; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>ʽ
|
||||
DMA2D->OOR=offline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
|
||||
DMA2D->OMAR=addr; //<2F><><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD>ַ
|
||||
DMA2D->NLR=(pey-psy+1)|((pex-psx+1)<<16); //<2F>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
DMA2D->OCOLR=color; //<2F>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
DMA2D->CR|=DMA2D_CR_START; //<2F><><EFBFBD><EFBFBD>DMA2D
|
||||
while((DMA2D->ISR&(DMA2D_FLAG_TC))==0) //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
timeout++;
|
||||
if(timeout>0X1FFFFF)break; //<2F><>ʱ<EFBFBD>˳<EFBFBD>
|
||||
}
|
||||
DMA2D->IFCR|=DMA2D_FLAG_TC; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־
|
||||
}
|
||||
//<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䵥<EFBFBD><E4B5A5><EFBFBD><EFBFBD>ɫ
|
||||
//(sx,sy),(ex,ey):<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζԽ<CEB6><D4BD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>СΪ:(ex-sx+1)*(ey-sy+1)
|
||||
//color:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
||||
//void LTDC_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u32 color)
|
||||
//{
|
||||
// u32 psx,psy,pex,pey; //<2F><>LCD<43><44><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>仯<EFBFBD><E4BBAF><EFBFBD>仯
|
||||
// u32 timeout=0;
|
||||
// u16 offline;
|
||||
// u32 addr;
|
||||
// if(ex>=lcdltdc.width)ex=lcdltdc.width-1;
|
||||
// if(ey>=lcdltdc.height)ey=lcdltdc.height-1;
|
||||
// //<2F><><EFBFBD><EFBFBD>ϵת<CFB5><D7AA>
|
||||
// if(lcdltdc.dir) //<2F><><EFBFBD><EFBFBD>
|
||||
// {
|
||||
// psx=sx;psy=sy;
|
||||
// pex=ex;pey=ey;
|
||||
// }else //<2F><><EFBFBD><EFBFBD>
|
||||
// {
|
||||
// psx=sy;psy=lcdltdc.pheight-ex-1;
|
||||
// pex=ey;pey=lcdltdc.pheight-sx-1;
|
||||
// }
|
||||
// offline=lcdltdc.pwidth-(pex-psx+1);
|
||||
// addr=((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*psy+psx));
|
||||
// if(LCD_PIXFORMAT==LCD_PIXEL_FORMAT_RGB565) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RGB565<36><35>ʽ<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫת<C9AB><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16bitת<74><D7AA>Ϊ32bit<69><74>
|
||||
// {
|
||||
// color=((color&0X0000F800)<<8)|((color&0X000007E0)<<5)|((color&0X0000001F)<<3);
|
||||
// }
|
||||
// //<2F><><EFBFBD><EFBFBD>DMA2D<32><44>ģʽ
|
||||
// DMA2D_Handler.Instance=DMA2D;
|
||||
// DMA2D_Handler.Init.Mode=DMA2D_R2M; //<2F>ڴ浽<DAB4>洢<EFBFBD><E6B4A2>ģʽ
|
||||
// DMA2D_Handler.Init.ColorMode=LCD_PIXFORMAT; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>ʽ
|
||||
// DMA2D_Handler.Init.OutputOffset=offline; //<2F><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
// HAL_DMA2D_Init(&DMA2D_Handler); //<2F><>ʼ<EFBFBD><CABC>DMA2D
|
||||
// HAL_DMA2D_ConfigLayer(&DMA2D_Handler,lcdltdc.activelayer); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// HAL_DMA2D_Start(&DMA2D_Handler,color,(u32)addr,pex-psx+1,pey-psy+1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// HAL_DMA2D_PollForTransfer(&DMA2D_Handler,1000);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// while((__HAL_DMA2D_GET_FLAG(&DMA2D_Handler,DMA2D_FLAG_TC)==0)&&(timeout<0X5000))//<2F>ȴ<EFBFBD>DMA2D<32><44><EFBFBD><EFBFBD>
|
||||
// {
|
||||
// timeout++;
|
||||
// }
|
||||
// __HAL_DMA2D_CLEAR_FLAG(&DMA2D_Handler,DMA2D_FLAG_TC); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־
|
||||
//}
|
||||
|
||||
//<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>,DMA2D<32><44><EFBFBD><EFBFBD>
|
||||
//<2F>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>u16,RGB565<36><35>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//(sx,sy),(ex,ey):<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζԽ<CEB6><D4BD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>СΪ:(ex-sx+1)*(ey-sy+1)
|
||||
//ע<><D7A2>:sx,ex,<2C><><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>lcddev.width-1;sy,ey,<2C><><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>lcddev.height-1!!!
|
||||
//color:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
void LTDC_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color)
|
||||
{
|
||||
u32 psx,psy,pex,pey; //<2F><>LCD<43><44><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>仯<EFBFBD><E4BBAF><EFBFBD>仯
|
||||
u32 timeout=0;
|
||||
u16 offline;
|
||||
u32 addr;
|
||||
//<2F><><EFBFBD><EFBFBD>ϵת<CFB5><D7AA>
|
||||
if(lcdltdc.dir) //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
psx=sx;psy=sy;
|
||||
pex=ex;pey=ey;
|
||||
}else //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
psx=sy;psy=lcdltdc.pheight-ex-1;
|
||||
pex=ey;pey=lcdltdc.pheight-sx-1;
|
||||
}
|
||||
offline=lcdltdc.pwidth-(pex-psx+1);
|
||||
addr=((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*psy+psx));
|
||||
__HAL_RCC_DMA2D_CLK_ENABLE(); //ʹ<><CAB9>DM2Dʱ<44><CAB1>
|
||||
DMA2D->CR&=~(DMA2D_CR_START); //<2F><>ֹͣDMA2D
|
||||
DMA2D->CR=DMA2D_M2M; //<2F>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2>ģʽ
|
||||
DMA2D->FGPFCCR=LCD_PIXFORMAT; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>ʽ
|
||||
DMA2D->FGOR=0; //ǰ<><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>Ϊ0
|
||||
DMA2D->OOR=offline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
|
||||
DMA2D->FGMAR=(u32)color; //Դ<><D4B4>ַ
|
||||
DMA2D->OMAR=addr; //<2F><><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD>ַ
|
||||
DMA2D->NLR=(pey-psy+1)|((pex-psx+1)<<16); //<2F>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
DMA2D->CR|=DMA2D_CR_START; //<2F><><EFBFBD><EFBFBD>DMA2D
|
||||
while((DMA2D->ISR&(DMA2D_FLAG_TC))==0) //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
timeout++;
|
||||
if(timeout>0X1FFFFF)break; //<2F><>ʱ<EFBFBD>˳<EFBFBD>
|
||||
}
|
||||
DMA2D->IFCR|=DMA2D_FLAG_TC; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־
|
||||
}
|
||||
|
||||
//LCD<43><44><EFBFBD><EFBFBD>
|
||||
//color:<3A><>ɫֵ
|
||||
void LTDC_Clear(u32 color)
|
||||
{
|
||||
LTDC_Fill(0,0,lcdltdc.width-1,lcdltdc.height-1,color);
|
||||
}
|
||||
|
||||
//LTDCʱ<43><CAB1>(Fdclk)<29><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
|
||||
//Fvco=Fin*pllsain;
|
||||
//Fdclk=Fvco/pllsair/2*2^pllsaidivr=Fin*pllsain/pllsair/2*2^pllsaidivr;
|
||||
|
||||
//Fvco:VCOƵ<4F><C6B5>
|
||||
//Fin:<3A><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƶ<EFBFBD><C6B5>һ<EFBFBD><D2BB>Ϊ1Mhz(<28><><EFBFBD><EFBFBD>ϵͳʱ<CDB3><CAB1>PLLM<4C><4D>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ͼ)
|
||||
//pllsain:SAIʱ<49>ӱ<EFBFBD>Ƶϵ<C6B5><CFB5>N,ȡֵ<C8A1><D6B5>Χ:50~432.
|
||||
//pllsair:SAIʱ<49>ӵķ<D3B5>Ƶϵ<C6B5><CFB5>R,ȡֵ<C8A1><D6B5>Χ:2~7
|
||||
//pllsaidivr:LCDʱ<44>ӷ<EFBFBD>Ƶϵ<C6B5><CFB5>,ȡֵ<C8A1><D6B5>Χ:RCC_PLLSAIDIVR_2/4/8/16,<2C><>Ӧ<EFBFBD><D3A6>Ƶ2~16
|
||||
//<2F><><EFBFBD><EFBFBD>:<3A>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>Ϊ25M,pllm=25<32><35>ʱ<EFBFBD><CAB1>,Fin=1Mhz.
|
||||
//<2F><><EFBFBD><EFBFBD>:Ҫ<>õ<EFBFBD>20M<30><4D>LTDCʱ<43><CAB1>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:pllsain=400,pllsair=5,pllsaidivr=RCC_PLLSAIDIVR_4
|
||||
//Fdclk=1*400/5/4=400/20=20Mhz
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>;1,ʧ<>ܡ<EFBFBD>
|
||||
u8 LTDC_Clk_Set(u32 pllsain,u32 pllsair,u32 pllsaidivr)
|
||||
{
|
||||
RCC_PeriphCLKInitTypeDef PeriphClkIniture;
|
||||
|
||||
//LTDC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>LCD<43><44><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
|
||||
PeriphClkIniture.PeriphClockSelection=RCC_PERIPHCLK_LTDC; //LTDCʱ<43><CAB1>
|
||||
PeriphClkIniture.PLLSAI.PLLSAIN=pllsain;
|
||||
PeriphClkIniture.PLLSAI.PLLSAIR=pllsair;
|
||||
PeriphClkIniture.PLLSAIDivR=pllsaidivr;
|
||||
if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkIniture)==HAL_OK) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
{
|
||||
return 0; //<2F>ɹ<EFBFBD>
|
||||
}
|
||||
else return 1; //ʧ<><CAA7>
|
||||
}
|
||||
|
||||
//LTDC,<2C><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LCD<43><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵΪ<CFB5><CEAA>
|
||||
//ע<><D7A2>:<3A>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LTDC_Layer_Parameter_Config֮<67><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//layerx:<3A><>ֵ,0/1.
|
||||
//sx,sy:<3A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
//width,height:<3A><><EFBFBD>Ⱥ߶<CDB8>
|
||||
void LTDC_Layer_Window_Config(u8 layerx,u16 sx,u16 sy,u16 width,u16 height)
|
||||
{
|
||||
HAL_LTDC_SetWindowPosition(<DC_Handler,sx,sy,layerx); //<2F><><EFBFBD>ô<EFBFBD><C3B4>ڵ<EFBFBD>λ<EFBFBD><CEBB>
|
||||
HAL_LTDC_SetWindowSize(<DC_Handler,width,height,layerx);//<2F><><EFBFBD>ô<EFBFBD><C3B4>ڴ<EFBFBD>С
|
||||
}
|
||||
|
||||
//LTDC,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//ע<><D7A2>:<3A>˺<EFBFBD><CBBA><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LTDC_Layer_Window_Config֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD>.
|
||||
//layerx:<3A><>ֵ,0/1.
|
||||
//bufaddr:<3A><><EFBFBD><EFBFBD>ɫ֡<C9AB><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
//pixformat:<3A><>ɫ<EFBFBD><C9AB>ʽ.0,ARGB8888;1,RGB888;2,RGB565;3,ARGB1555;4,ARGB4444;5,L8;6;AL44;7;AL88
|
||||
//alpha:<3A><><EFBFBD><EFBFBD>ɫAlphaֵ,0,ȫ<C8AB><CDB8>;255,<2C><><EFBFBD><CDB8>
|
||||
//alpha0:Ĭ<><C4AC><EFBFBD><EFBFBD>ɫAlphaֵ,0,ȫ<C8AB><CDB8>;255,<2C><><EFBFBD><CDB8>
|
||||
//bfac1:<3A><><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>1,4(100),<2C>㶨<EFBFBD><E3B6A8>Alpha;6(101),<2C><><EFBFBD><EFBFBD>Alpha*<2A>㶨Alpha
|
||||
//bfac2:<3A><><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>2,5(101),<2C>㶨<EFBFBD><E3B6A8>Alpha;7(111),<2C><><EFBFBD><EFBFBD>Alpha*<2A>㶨Alpha
|
||||
//bkcolor:<3A><>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>ɫ,32λ,<2C><>24λ<34><CEBB>Ч,RGB888<38><38>ʽ
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>
|
||||
void LTDC_Layer_Parameter_Config(u8 layerx,u32 bufaddr,u8 pixformat,u8 alpha,u8 alpha0,u8 bfac1,u8 bfac2,u32 bkcolor)
|
||||
{
|
||||
LTDC_LayerCfgTypeDef pLayerCfg;
|
||||
|
||||
pLayerCfg.WindowX0=0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼX<CABC><58><EFBFBD><EFBFBD>
|
||||
pLayerCfg.WindowY0=0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼY<CABC><59><EFBFBD><EFBFBD>
|
||||
pLayerCfg.WindowX1=lcdltdc.pwidth; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹX<D6B9><58><EFBFBD><EFBFBD>
|
||||
pLayerCfg.WindowY1=lcdltdc.pheight; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹY<D6B9><59><EFBFBD><EFBFBD>
|
||||
pLayerCfg.PixelFormat=pixformat; //<2F><><EFBFBD>ظ<EFBFBD>ʽ
|
||||
pLayerCfg.Alpha=alpha; //Alphaֵ<61><D6B5><EFBFBD>ã<EFBFBD>0~255,255Ϊ<35><CEAA>ȫ<EFBFBD><C8AB><EFBFBD><CDB8>
|
||||
pLayerCfg.Alpha0=alpha0; //Ĭ<><C4AC>Alphaֵ
|
||||
pLayerCfg.BlendingFactor1=(u32)bfac1<<8; //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
||||
pLayerCfg.BlendingFactor2=(u32)bfac2<<8; //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
||||
pLayerCfg.FBStartAdress=bufaddr; //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ɫ֡<C9AB><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
pLayerCfg.ImageWidth=lcdltdc.pwidth; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ֡<C9AB><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>
|
||||
pLayerCfg.ImageHeight=lcdltdc.pheight; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ֡<C9AB><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ߶<C4B8>
|
||||
pLayerCfg.Backcolor.Red=(u8)(bkcolor&0X00FF0000)>>16; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
|
||||
pLayerCfg.Backcolor.Green=(u8)(bkcolor&0X0000FF00)>>8; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
|
||||
pLayerCfg.Backcolor.Blue=(u8)bkcolor&0X000000FF; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
|
||||
HAL_LTDC_ConfigLayer(<DC_Handler,&pLayerCfg,layerx); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD>еIJ<D0B5>
|
||||
}
|
||||
|
||||
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//PG6=R7(M0);PI2=G7(M1);PI7=B7(M2);
|
||||
//M2:M1:M0
|
||||
//0 :0 :0 //4.3<EFBFBD><EFBFBD>480*272 RGB<47><42>,ID=0X4342
|
||||
//0 :0 :1 //7<><37>800*480 RGB<47><42>,ID=0X7084
|
||||
//0 :1 :0 //7<><37>1024*600 RGB<47><42>,ID=0X7016
|
||||
//0 :1 :1 //7<><37>1280*800 RGB<47><42>,ID=0X7018
|
||||
//1 :0 :0 //4.3<EFBFBD><EFBFBD>800*480 RGB<47><42>,ID=0X4384
|
||||
//1 :0 :1 //10.1<EFBFBD><EFBFBD>1280*800 RGB<47><42>,ID=0X1018
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:LCD ID:0,<2C>Ƿ<EFBFBD>;<3B><><EFBFBD><EFBFBD>ֵ,ID;
|
||||
u16 LTDC_PanelID_Read(void)
|
||||
{
|
||||
u8 idx=0;
|
||||
GPIO_InitTypeDef GPIO_Initure;
|
||||
__HAL_RCC_GPIOG_CLK_ENABLE(); //ʹ<><CAB9>GPIOGʱ<47><CAB1>
|
||||
__HAL_RCC_GPIOI_CLK_ENABLE(); //ʹ<><CAB9>GPIOIʱ<49><CAB1>
|
||||
|
||||
GPIO_Initure.Pin=GPIO_PIN_6; //PG6
|
||||
GPIO_Initure.Mode=GPIO_MODE_INPUT; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //<2F><><EFBFBD><EFBFBD>
|
||||
HAL_GPIO_Init(GPIOG,&GPIO_Initure); //<2F><>ʼ<EFBFBD><CABC>
|
||||
|
||||
GPIO_Initure.Pin=GPIO_PIN_2|GPIO_PIN_7; //PI2,7
|
||||
HAL_GPIO_Init(GPIOI,&GPIO_Initure); //<2F><>ʼ<EFBFBD><CABC>
|
||||
|
||||
idx=(u8)HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_6); //<2F><>ȡM0
|
||||
idx|=(u8)HAL_GPIO_ReadPin(GPIOI,GPIO_PIN_2)<<1;//<2F><>ȡM1
|
||||
idx|=(u8)HAL_GPIO_ReadPin(GPIOI,GPIO_PIN_7)<<2;//<2F><>ȡM2
|
||||
switch(idx)
|
||||
{
|
||||
case 0:return 0X4342; //4.3<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,480*272<37>ֱ<EFBFBD><D6B1><EFBFBD>
|
||||
case 1:return 0X7084; //7<><37><EFBFBD><EFBFBD>,800*480<38>ֱ<EFBFBD><D6B1><EFBFBD>
|
||||
case 2:return 0X7016; //7<><37><EFBFBD><EFBFBD>,1024*600<30>ֱ<EFBFBD><D6B1><EFBFBD>
|
||||
case 3:return 0X7018; //7<><37><EFBFBD><EFBFBD>,1280*800<30>ֱ<EFBFBD><D6B1><EFBFBD>
|
||||
case 4:return 0X4384; //4.3<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,800*480<38>ֱ<EFBFBD><D6B1><EFBFBD>
|
||||
case 5:return 0X1018; //10.1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,1280*800<30>ֱ<EFBFBD><D6B1><EFBFBD>
|
||||
default:return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//LCD<43><44>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LTDC_Init(void)
|
||||
{
|
||||
u16 lcdid=0;
|
||||
|
||||
lcdid=LTDC_PanelID_Read(); //<2F><>ȡLCD<43><44><EFBFBD><EFBFBD>ID
|
||||
if(lcdid==0X4342)
|
||||
{
|
||||
lcdltdc.pwidth=480; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>λ:<3A><><EFBFBD><EFBFBD>
|
||||
lcdltdc.pheight=272; //<2F><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>,<2C><>λ:<3A><><EFBFBD><EFBFBD>
|
||||
lcdltdc.hsw=1; //ˮƽͬ<C6BD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
lcdltdc.vsw=1; //<2F><>ֱͬ<D6B1><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
lcdltdc.hbp=40; //ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>
|
||||
lcdltdc.vbp=8; //<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
|
||||
lcdltdc.hfp=5; //ˮƽǰ<C6BD><C7B0>
|
||||
lcdltdc.vfp=8; //<2F><>ֱǰ<D6B1><C7B0>
|
||||
LTDC_Clk_Set(288,4,RCC_PLLSAIDIVR_8); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 9Mhz
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
}else if(lcdid==0X7084)
|
||||
{
|
||||
lcdltdc.pwidth=800; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>λ:<3A><><EFBFBD><EFBFBD>
|
||||
lcdltdc.pheight=480; //<2F><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>,<2C><>λ:<3A><><EFBFBD><EFBFBD>
|
||||
lcdltdc.hsw=1; //ˮƽͬ<C6BD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
lcdltdc.vsw=1; //<2F><>ֱͬ<D6B1><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
lcdltdc.hbp=46; //ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>
|
||||
lcdltdc.vbp=23; //<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
|
||||
lcdltdc.hfp=210; //ˮƽǰ<C6BD><C7B0>
|
||||
lcdltdc.vfp=22; //<2F><>ֱǰ<D6B1><C7B0>
|
||||
LTDC_Clk_Set(396,3,RCC_PLLSAIDIVR_4); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 33M(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><CBAB>,<2C><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>DCLK<4C><4B>:18.75Mhz 300/4/4,<2C>Ż<EFBFBD><C5BB>ȽϺ<C8BD>)
|
||||
}else if(lcdid==0X7016)
|
||||
{
|
||||
lcdltdc.pwidth=1024; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>λ:<3A><><EFBFBD><EFBFBD>
|
||||
lcdltdc.pheight=600; //<2F><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>,<2C><>λ:<3A><><EFBFBD><EFBFBD>
|
||||
lcdltdc.hsw=20; //ˮƽͬ<C6BD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
lcdltdc.vsw=3; //<2F><>ֱͬ<D6B1><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
lcdltdc.hbp=140; //ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>
|
||||
lcdltdc.vbp=20; //<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
|
||||
lcdltdc.hfp=160; //ˮƽǰ<C6BD><C7B0>
|
||||
lcdltdc.vfp=12; //<2F><>ֱǰ<D6B1><C7B0>
|
||||
LTDC_Clk_Set(360,2,RCC_PLLSAIDIVR_4);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 45Mhz
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
}else if(lcdid==0X7018)
|
||||
{
|
||||
lcdltdc.pwidth=1280; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>λ:<3A><><EFBFBD><EFBFBD>
|
||||
lcdltdc.pheight=800; //<2F><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>,<2C><>λ:<3A><><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
}else if(lcdid==0X4384)
|
||||
{
|
||||
lcdltdc.pwidth=800; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>λ:<3A><><EFBFBD><EFBFBD>
|
||||
lcdltdc.pheight=480; //<2F><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>,<2C><>λ:<3A><><EFBFBD><EFBFBD>
|
||||
lcdltdc.hbp=88; //ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>
|
||||
lcdltdc.hfp=40; //ˮƽǰ<C6BD><C7B0>
|
||||
lcdltdc.hsw=48; //ˮƽͬ<C6BD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
lcdltdc.vbp=32; //<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
|
||||
lcdltdc.vfp=13; //<2F><>ֱǰ<D6B1><C7B0>
|
||||
lcdltdc.vsw=3; //<2F><>ֱͬ<D6B1><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Clk_Set(396,3,RCC_PLLSAIDIVR_4); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 33M
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
}else if(lcdid==0X1018) //10.1<EFBFBD><EFBFBD>1280*800 RGB<47><42>
|
||||
{
|
||||
lcdltdc.pwidth=1280; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>λ:<3A><><EFBFBD><EFBFBD>
|
||||
lcdltdc.pheight=800; //<2F><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>,<2C><>λ:<3A><><EFBFBD><EFBFBD>
|
||||
lcdltdc.hbp=140; //ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>
|
||||
lcdltdc.hfp=10; //ˮƽǰ<C6BD><C7B0>
|
||||
lcdltdc.hsw=10; //ˮƽͬ<C6BD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
lcdltdc.vbp=10; //<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
|
||||
lcdltdc.vfp=10; //<2F><>ֱǰ<D6B1><C7B0>
|
||||
lcdltdc.vsw=3; //<2F><>ֱͬ<D6B1><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Clk_Set(360,2,RCC_PLLSAIDIVR_4);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 45Mhz
|
||||
}
|
||||
|
||||
lcddev.width=lcdltdc.pwidth;
|
||||
lcddev.height=lcdltdc.pheight;
|
||||
|
||||
#if LCD_PIXFORMAT==LCD_PIXFORMAT_ARGB8888||LCD_PIXFORMAT==LCD_PIXFORMAT_RGB888
|
||||
ltdc_framebuf[0]=(u32*)<dc_lcd_framebuf;
|
||||
lcdltdc.pixsize=4; //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ4<D5BC><34><EFBFBD>ֽ<EFBFBD>
|
||||
#else
|
||||
lcdltdc.pixsize=2; //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ2<D5BC><32><EFBFBD>ֽ<EFBFBD>
|
||||
ltdc_framebuf[0]=(u32*)<dc_lcd_framebuf;
|
||||
#endif
|
||||
//LTDC<44><43><EFBFBD><EFBFBD>
|
||||
LTDC_Handler.Instance=LTDC;
|
||||
LTDC_Handler.Init.HSPolarity=LTDC_HSPOLARITY_AL; //ˮƽͬ<C6BD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Handler.Init.VSPolarity=LTDC_VSPOLARITY_AL; //<2F><>ֱͬ<D6B1><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Handler.Init.DEPolarity=LTDC_DEPOLARITY_AL; //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD>
|
||||
if(lcdid==0X1018)LTDC_Handler.Init.PCPolarity=LTDC_PCPOLARITY_IIPC;//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>
|
||||
else LTDC_Handler.Init.PCPolarity=LTDC_PCPOLARITY_IPC; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>
|
||||
LTDC_Handler.Init.HorizontalSync=lcdltdc.hsw-1; //ˮƽͬ<C6BD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Handler.Init.VerticalSync=lcdltdc.vsw-1; //<2F><>ֱͬ<D6B1><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Handler.Init.AccumulatedHBP=lcdltdc.hsw+lcdltdc.hbp-1; //ˮƽͬ<C6BD><CDAC><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>
|
||||
LTDC_Handler.Init.AccumulatedVBP=lcdltdc.vsw+lcdltdc.vbp-1; //<2F><>ֱͬ<D6B1><CDAC><EFBFBD><EFBFBD><EFBFBD>ظ߶<D8B8>
|
||||
LTDC_Handler.Init.AccumulatedActiveW=lcdltdc.hsw+lcdltdc.hbp+lcdltdc.pwidth-1;//<2F><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
|
||||
LTDC_Handler.Init.AccumulatedActiveH=lcdltdc.vsw+lcdltdc.vbp+lcdltdc.pheight-1;//<2F><>Ч<EFBFBD>߶<EFBFBD>
|
||||
LTDC_Handler.Init.TotalWidth=lcdltdc.hsw+lcdltdc.hbp+lcdltdc.pwidth+lcdltdc.hfp-1; //<2F>ܿ<EFBFBD><DCBF><EFBFBD>
|
||||
LTDC_Handler.Init.TotalHeigh=lcdltdc.vsw+lcdltdc.vbp+lcdltdc.pheight+lcdltdc.vfp-1; //<2F>ܸ߶<DCB8>
|
||||
LTDC_Handler.Init.Backcolor.Red=0; //<2F><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
|
||||
LTDC_Handler.Init.Backcolor.Green=0; //<2F><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
|
||||
LTDC_Handler.Init.Backcolor.Blue=0; //<2F><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
|
||||
HAL_LTDC_Init(<DC_Handler);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Layer_Parameter_Config(0,(u32)ltdc_framebuf[0],LCD_PIXFORMAT,255,0,6,7,0X000000);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Layer_Window_Config(0,0,0,lcdltdc.pwidth,lcdltdc.pheight); //<2F>㴰<EFBFBD><E3B4B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>LCD<43><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵΪ<CFB5><CEAA>,<2C><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
||||
|
||||
LTDC_Display_Dir(0); //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Select_Layer(0); //ѡ<><D1A1><EFBFBD><EFBFBD>1<EFBFBD><31>
|
||||
LCD_LED=1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LTDC_Clear(0XFFFFFFFF); //<2F><><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//LTDC<44>ײ<EFBFBD>IO<49><4F>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʹ<EFBFBD><CAB9>
|
||||
//<2F>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ᱻHAL_LTDC_Init()<29><><EFBFBD><EFBFBD>
|
||||
//hltdc:LTDC<44><43><EFBFBD><EFBFBD>
|
||||
void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_Initure;
|
||||
|
||||
__HAL_RCC_LTDC_CLK_ENABLE(); //ʹ<><CAB9>LTDCʱ<43><CAB1>
|
||||
__HAL_RCC_DMA2D_CLK_ENABLE(); //ʹ<><CAB9>DMA2Dʱ<44><CAB1>
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE(); //ʹ<><CAB9>GPIOBʱ<42><CAB1>
|
||||
__HAL_RCC_GPIOF_CLK_ENABLE(); //ʹ<><CAB9>GPIOFʱ<46><CAB1>
|
||||
__HAL_RCC_GPIOG_CLK_ENABLE(); //ʹ<><CAB9>GPIOGʱ<47><CAB1>
|
||||
__HAL_RCC_GPIOH_CLK_ENABLE(); //ʹ<><CAB9>GPIOHʱ<48><CAB1>
|
||||
__HAL_RCC_GPIOI_CLK_ENABLE(); //ʹ<><CAB9>GPIOIʱ<49><CAB1>
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC>PB5<42><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pin=GPIO_PIN_5; //PB5<42><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
|
||||
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //<2F><><EFBFBD><EFBFBD>
|
||||
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC>PF10
|
||||
GPIO_Initure.Pin=GPIO_PIN_10;
|
||||
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_NOPULL;
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Alternate=GPIO_AF14_LTDC; //<2F><><EFBFBD><EFBFBD>ΪLTDC
|
||||
HAL_GPIO_Init(GPIOF,&GPIO_Initure);
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC>PG6,7,11
|
||||
GPIO_Initure.Pin=GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_11;
|
||||
HAL_GPIO_Init(GPIOG,&GPIO_Initure);
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC>PH9,10,11,12,13,14,15
|
||||
GPIO_Initure.Pin=GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|\
|
||||
GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
|
||||
HAL_GPIO_Init(GPIOH,&GPIO_Initure);
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC>PI0,1,2,4,5,6,7,9,10
|
||||
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5|\
|
||||
GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_9|GPIO_PIN_10;
|
||||
HAL_GPIO_Init(GPIOI,&GPIO_Initure);
|
||||
}
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
#ifndef _LCD_H
|
||||
#define _LCD_H
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//LTDC<44><43><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/7/13
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.2
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//<2F><EFBFBD>˵<EFBFBD><CBB5>
|
||||
//V1.1 20161026
|
||||
//<2F><>LTDC_PanelID_Read<61><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>delay<61><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-O2<4F>Ż<EFBFBD><C5BB><EFBFBD>ID<49><44><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD><EFBFBD><EFBFBD>BUG
|
||||
//V1.2 20170606
|
||||
//<2F><><EFBFBD><EFBFBD>10.1<EFBFBD><EFBFBD>RGB<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//LCD LTDC<44><43>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
typedef struct
|
||||
{
|
||||
u32 pwidth; //LCD<43><44><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>,<2C>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>,<2C><><EFBFBD><EFBFBD>Ϊ0,˵<><CBB5>û<EFBFBD><C3BB><EFBFBD>κ<EFBFBD>RGB<47><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 pheight; //LCD<43><44><EFBFBD><EFBFBD><EFBFBD>ĸ߶<C4B8>,<2C>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
|
||||
u16 hsw; //ˮƽͬ<C6BD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u16 vsw; //<2F><>ֱͬ<D6B1><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u16 hbp; //ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>
|
||||
u16 vbp; //<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
|
||||
u16 hfp; //ˮƽǰ<C6BD><C7B0>
|
||||
u16 vfp; //<2F><>ֱǰ<D6B1><C7B0>
|
||||
u8 activelayer; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0/1
|
||||
u8 dir; //0,<2C><><EFBFBD><EFBFBD>;1,<2C><><EFBFBD><EFBFBD>;
|
||||
u16 width; //LCD<43><44><EFBFBD><EFBFBD>
|
||||
u16 height; //LCD<43>߶<EFBFBD>
|
||||
u32 pixsize; //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
}_ltdc_dev;
|
||||
|
||||
extern _ltdc_dev lcdltdc; //<2F><><EFBFBD><EFBFBD>LCD LTDC<44><43><EFBFBD><EFBFBD>
|
||||
extern LTDC_HandleTypeDef LTDC_Handler; //LTDC<44><43><EFBFBD><EFBFBD>
|
||||
extern DMA2D_HandleTypeDef DMA2D_Handler; //DMA2D<32><44><EFBFBD><EFBFBD>
|
||||
|
||||
#define LCD_PIXEL_FORMAT_ARGB8888 0X00
|
||||
#define LCD_PIXEL_FORMAT_RGB888 0X01
|
||||
#define LCD_PIXEL_FORMAT_RGB565 0X02
|
||||
#define LCD_PIXEL_FORMAT_ARGB1555 0X03
|
||||
#define LCD_PIXEL_FORMAT_ARGB4444 0X04
|
||||
#define LCD_PIXEL_FORMAT_L8 0X05
|
||||
#define LCD_PIXEL_FORMAT_AL44 0X06
|
||||
#define LCD_PIXEL_FORMAT_AL88 0X07
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//<2F>û<EFBFBD><C3BB><EFBFBD><DEB8><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>:
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ظ<EFBFBD>ʽ,һ<><D2BB><EFBFBD><EFBFBD>RGB565
|
||||
#define LCD_PIXFORMAT LCD_PIXEL_FORMAT_RGB565
|
||||
//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
||||
#define LTDC_BACKLAYERCOLOR 0X00000000
|
||||
//LCD֡<44><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ,<2C><><EFBFBD>ﶨ<EFBFBD><EFB6A8><EFBFBD><EFBFBD>SDRAM<41><4D><EFBFBD><EFBFBD>.
|
||||
#define LCD_FRAME_BUF_ADDR 0XC0000000
|
||||
|
||||
void LTDC_Switch(u8 sw); //LTDC<44><43><EFBFBD><EFBFBD>
|
||||
void LTDC_Layer_Switch(u8 layerx,u8 sw); //<2F>㿪<EFBFBD><E3BFAA>
|
||||
void LTDC_Select_Layer(u8 layerx); //<2F><>ѡ<EFBFBD><D1A1>
|
||||
void LTDC_Display_Dir(u8 dir); //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LTDC_Draw_Point(u16 x,u16 y,u32 color);//<2F><><EFBFBD>㺯<EFBFBD><E3BAAF>
|
||||
u32 LTDC_Read_Point(u16 x,u16 y); //<2F><><EFBFBD>㺯<EFBFBD><E3BAAF>
|
||||
void LTDC_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u32 color); //<2F><><EFBFBD>ε<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>亯<EFBFBD><E4BAAF>
|
||||
void LTDC_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color); //<2F><><EFBFBD>β<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>亯<EFBFBD><E4BAAF>
|
||||
void LTDC_Clear(u32 color); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 LTDC_Clk_Set(u32 pllsain,u32 pllsair,u32 pllsaidivr);//LTDCʱ<43><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LTDC_Layer_Window_Config(u8 layerx,u16 sx,u16 sy,u16 width,u16 height);//LTDC<44>㴰<EFBFBD><E3B4B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LTDC_Layer_Parameter_Config(u8 layerx,u32 bufaddr,u8 pixformat,u8 alpha,u8 alpha0,u8 bfac1,u8 bfac2,u32 bkcolor);//LTDC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u16 LTDC_PanelID_Read(void); //LCD ID<49><44>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
void LTDC_Init(void); //LTDC<44><43>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#endif
|
||||
@@ -1,30 +1,47 @@
|
||||
#include "led.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32F429<32><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>@ALIENTEK
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/5
|
||||
//<EFBFBD>汾<EFBFBD><EFBFBD>V1.0
|
||||
//<EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC>PB1Ϊ<31><CEAA><EFBFBD><EFBFBD>.<2E><>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1>
|
||||
//LED IO<49><4F>ʼ<EFBFBD><CABC>
|
||||
//-----------------------------------------------------------------
|
||||
GPIO_TypeDef* GPIO_PORT[LEDn] = {LEDB_GPIO_PORT,LEDG_GPIO_PORT,LEDR_GPIO_PORT};
|
||||
const uint16_t GPIO_PIN[LEDn] = {LEDB_PIN,LEDG_PIN,LEDR_PIN};
|
||||
//-----------------------------------------------------------------
|
||||
// void LED_Init(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: LED GPIO<49><4F><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
||||
// <20><> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void LED_Init(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_Initure;
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE(); //<2F><><EFBFBD><EFBFBD>GPIOBʱ<42><CAB1>
|
||||
|
||||
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1; //PB1,0
|
||||
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //<2F><><EFBFBD><EFBFBD>
|
||||
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
|
||||
|
||||
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); //PB0<42><30>1
|
||||
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET); //PB1<42><31>1
|
||||
BSP_LED_Init(LEDB); // LED_B(<28><><EFBFBD><EFBFBD>)<29><>PB14
|
||||
BSP_LED_Init(LEDG); // LED_G(<28>̵<EFBFBD>)<29><>PF7
|
||||
BSP_LED_Init(LEDR); // LED_R(<28><><EFBFBD><EFBFBD>)<29><>PI3
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void BSP_LED_Init(Led_TypeDef Led)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>LED
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: Led<65><64>ָ<EFBFBD><D6B8>Ҫ<EFBFBD><D2AA><EFBFBD>õ<EFBFBD>LED<45><44>ֵ<EFBFBD><D6B5>LEDB<44><42>LEDG<44><47>LEDR<44><52>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void BSP_LED_Init(Led_TypeDef Led)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
LEDx_GPIO_CLK_ENABLE(Led); // <20><><EFBFBD><EFBFBD>Ledʱ<64><CAB1>
|
||||
|
||||
GPIO_InitStruct.Pin = GPIO_PIN[Led]; // <20><><EFBFBD><EFBFBD>Led
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP; // <20><><EFBFBD><EFBFBD>
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; // <20><><EFBFBD><EFBFBD>
|
||||
HAL_GPIO_Init(GPIO_PORT[Led], &GPIO_InitStruct); // <20><>ʼ<EFBFBD><CABC>Led
|
||||
|
||||
HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET); // LED<45>ø<EFBFBD>
|
||||
}
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
@@ -1,21 +1,53 @@
|
||||
#ifndef _LED_H
|
||||
#define _LED_H
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>ѧϰʹ<EFBFBD>ã<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>;
|
||||
//ALIENTEK STM32F429<32><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/1
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
#include "stm32f429_winner.h"
|
||||
//-----------------------------------------------------------------
|
||||
// LED<EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
typedef enum
|
||||
{
|
||||
LEDB = 0,
|
||||
LEDG = 1,
|
||||
LEDR = 2
|
||||
}Led_TypeDef;
|
||||
|
||||
#define LED0 PBout(1) //LED0
|
||||
#define LED1 PBout(0) //LED1
|
||||
#define LEDn 3
|
||||
|
||||
void LED_Init(void);
|
||||
#define LEDB_PIN GPIO_PIN_14
|
||||
#define LEDB_GPIO_PORT GPIOB
|
||||
#define LEDB_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
||||
#define LEDB_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
|
||||
#define LED_B PBout(14) // LED_B(<28><><EFBFBD><EFBFBD>) PB14
|
||||
|
||||
#define LEDG_PIN GPIO_PIN_7
|
||||
#define LEDG_GPIO_PORT GPIOF
|
||||
#define LEDG_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE()
|
||||
#define LEDG_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE()
|
||||
#define LED_G PFout(7) // LED_G(<28>̵<EFBFBD>) PF7
|
||||
|
||||
#define LEDR_PIN GPIO_PIN_3
|
||||
#define LEDR_GPIO_PORT GPIOI
|
||||
#define LEDR_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE()
|
||||
#define LEDR_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE()
|
||||
#define LED_R PIout(3) // LED_R(<28><><EFBFBD><EFBFBD>) PI3
|
||||
|
||||
#define LEDx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) LEDB_GPIO_CLK_ENABLE(); else \
|
||||
if((__INDEX__) == 1) LEDG_GPIO_CLK_ENABLE(); else \
|
||||
if((__INDEX__) == 2) LEDR_GPIO_CLK_ENABLE(); \
|
||||
}while(0)
|
||||
#define LEDx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) LEDB_GPIO_CLK_DISABLE(); else \
|
||||
if((__INDEX__) == 1) LEDG_GPIO_CLK_DISABLE(); else \
|
||||
if((__INDEX__) == 2) LEDR_GPIO_CLK_DISABLE(); \
|
||||
}while(0)
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
extern void LED_Init(void);
|
||||
extern void BSP_LED_Init(Led_TypeDef Led);
|
||||
#endif
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
@@ -1,489 +0,0 @@
|
||||
#include "ftl.h"
|
||||
#include "string.h"
|
||||
#include "malloc.h"
|
||||
#include "nand.h"
|
||||
#include "usart.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//NAND FLASH FTL<54><4C><EFBFBD>㷨<EFBFBD><E3B7A8><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/15
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.3
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
//V1.1 20160124
|
||||
//<2F><EFBFBD>FTL_CopyAndWriteToBlock<63><6B>FTL_WriteSectors<72><73><EFBFBD><EFBFBD>,<2C><><EFBFBD>߷<EFBFBD>0XFFʱ<46><CAB1>д<EFBFBD><D0B4><EFBFBD>ٶ<EFBFBD>.
|
||||
//V1.2 20160520
|
||||
//1,<2C><EFBFBD>FTL_ReadSectors,<2C><><EFBFBD><EFBFBD>ECC<43><43><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD>鴦<EFBFBD><E9B4A6>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
||||
//2,<2C><><EFBFBD><EFBFBD>FTL_BlockCompare<72><65>FTL_SearchBadBlock<63><6B><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD><EFBFBD>
|
||||
//3,<2C><EFBFBD>FTL_Format<61><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⷽʽ,<2C><><EFBFBD><EFBFBD>FTL_USE_BAD_BLOCK_SEARCH<43><48>
|
||||
//V1.3 20160530
|
||||
//<2F>ĵ<DEB8>1bit ECC<43><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ȡ2<C8A1>Σ<EFBFBD><CEA3><EFBFBD>ȷ<EFBFBD><C8B7>1bit <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//ÿ<><C3BF><EFBFBD><EFBFBD>,<2C><>һ<EFBFBD><D2BB>page<67><65>spare<72><65>,ǰ<>ĸ<EFBFBD><C4B8>ֽڵĺ<DAB5><C4BA><EFBFBD>:
|
||||
//<2F><>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>,<2C><>ʾ<EFBFBD>ÿ<EFBFBD><C3BF>Ƿ<EFBFBD><C7B7>ǻ<EFBFBD><C7BB><EFBFBD>:0XFF,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>ֵ,<2C><><EFBFBD><EFBFBD>.
|
||||
//<2F>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>ֽ<EFBFBD>,<2C><>ʾ<EFBFBD>ÿ<EFBFBD><C3BF>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ù<EFBFBD>:0XFF,û<><C3BB>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;0XCC,д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>ĸ<EFBFBD><C4B8>ֽ<EFBFBD>,<2C><>ʾ<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
|
||||
//ÿ<><C3BF>page,spare<72><65>16<31>ֽ<EFBFBD><D6BD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ֽں<D6BD><DABA><EFBFBD>:
|
||||
//<2F><>ʮ<EFBFBD><CAAE><EFBFBD>ֽڿ<D6BD>ʼ,<2C><><EFBFBD><EFBFBD>ÿ4<C3BF><34><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ڴ洢һ<E6B4A2><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>С:NAND_ECC_SECTOR_SIZE)<29><>ECCֵ,<2C><><EFBFBD><EFBFBD>ECCУ<43><D0A3>
|
||||
|
||||
|
||||
//FTL<54><4C><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,ʧ<><CAA7>
|
||||
u8 FTL_Init(void)
|
||||
{
|
||||
u8 temp;
|
||||
if(NAND_Init())return 1; //<2F><>ʼ<EFBFBD><CABC>NAND FLASH
|
||||
if(nand_dev.lut)myfree(SRAMIN,nand_dev.lut);
|
||||
nand_dev.lut=mymalloc(SRAMIN,(nand_dev.block_totalnum)*2); //<2F><>LUT<55><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
memset(nand_dev.lut,0,nand_dev.block_totalnum*2); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(!nand_dev.lut)return 1; //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
temp=FTL_CreateLUT(1);
|
||||
if(temp)
|
||||
{
|
||||
printf("format nand flash...\r\n");
|
||||
temp=FTL_Format(); //<2F><>ʽ<EFBFBD><CABD>NAND
|
||||
if(temp)
|
||||
{
|
||||
printf("format failed!\r\n");
|
||||
return 2;
|
||||
}
|
||||
}else //<2F><><EFBFBD><EFBFBD>LUT<55><54><EFBFBD>ɹ<EFBFBD>
|
||||
{
|
||||
printf("total block num:%d\r\n",nand_dev.block_totalnum);
|
||||
printf("good block num:%d\r\n",nand_dev.good_blocknum);
|
||||
printf("valid block num:%d\r\n",nand_dev.valid_blocknum);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>ijһ<C4B3><D2BB><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
//blocknum:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>Χ:0~(block_totalnum-1)
|
||||
void FTL_BadBlockMark(u32 blocknum)
|
||||
{
|
||||
u32 temp=0XAAAAAAAA;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mark,<2C><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>OK,ֻҪ<D6BB><D2AA><EFBFBD><EFBFBD>0XFF.<2E><><EFBFBD><EFBFBD>дǰ4<C7B0><34><EFBFBD>ֽ<EFBFBD>,<2C><><EFBFBD><EFBFBD>FTL_FindUnusedBlock<63><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>黵<EFBFBD><E9BBB5>.(<28><><EFBFBD><EFBFBD><EFBFBD>鱸<EFBFBD><E9B1B8><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>)
|
||||
NAND_WriteSpare(blocknum*nand_dev.block_pagenum,0,(u8*)&temp,4); //<2F>ڵ<EFBFBD>һ<EFBFBD><D2BB>page<67><65>spare<72><65>,<2C><>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ǰ4<C7B0><34><EFBFBD>ֽڶ<D6BD>д)
|
||||
NAND_WriteSpare(blocknum*nand_dev.block_pagenum+1,0,(u8*)&temp,4); //<2F>ڵڶ<DAB5><DAB6><EFBFBD>page<67><65>spare<72><65>,<2C><>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ǰ4<C7B0><34><EFBFBD>ֽڶ<D6BD>д)
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD>ijһ<C4B3><D2BB><EFBFBD>Ƿ<EFBFBD><C7B7>ǻ<EFBFBD><C7BB><EFBFBD>
|
||||
//blocknum:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>Χ:0~(block_totalnum-1)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ÿ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>
|
||||
u8 FTL_CheckBadBlock(u32 blocknum)
|
||||
{
|
||||
u8 flag=0;
|
||||
NAND_ReadSpare(blocknum*nand_dev.block_pagenum,0,&flag,1);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
||||
if(flag==0XFF)//<2F>ÿ<EFBFBD>?,<2C><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
NAND_ReadSpare(blocknum*nand_dev.block_pagenum+1,0,&flag,1);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
||||
if(flag==0XFF)return 0; //<2F>ÿ<EFBFBD>
|
||||
else return 1; //<2F><><EFBFBD><EFBFBD>
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD>ijһ<C4B3><D2BB><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
//blocknum:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>Χ:0~(block_totalnum-1)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,ʧ<><CAA7>
|
||||
u8 FTL_UsedBlockMark(u32 blocknum)
|
||||
{
|
||||
u8 Usedflag=0XCC;
|
||||
u8 temp=0;
|
||||
temp=NAND_WriteSpare(blocknum*nand_dev.block_pagenum,1,(u8*)&Usedflag,1);//д<><D0B4><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD>ʹ<EFBFBD>ñ<EFBFBD>־
|
||||
return temp;
|
||||
}
|
||||
//<2F>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD>Ŀ鿪ʼ<E9BFAA>ҵ<EFBFBD><D2B5><EFBFBD>ǰ<EFBFBD>ҵ<EFBFBD>һ<EFBFBD><D2BB>δ<EFBFBD><CEB4>ʹ<EFBFBD>õĿ<C3B5>(ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/ż<><C5BC>)
|
||||
//sblock:<3A><>ʼ<EFBFBD><CABC>,<2C><>Χ:0~(block_totalnum-1)
|
||||
//flag:0,ż<><C5BC><EFBFBD><EFBFBD>;1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0XFFFFFFFF,ʧ<><CAA7>
|
||||
// <20><><EFBFBD><EFBFBD>ֵ,δʹ<CEB4>ÿ<EFBFBD><C3BF><EFBFBD>
|
||||
u32 FTL_FindUnusedBlock(u32 sblock,u8 flag)
|
||||
{
|
||||
u32 temp=0;
|
||||
u32 blocknum=0;
|
||||
for(blocknum=sblock+1;blocknum>0;blocknum--)
|
||||
{
|
||||
if(((blocknum-1)%2)==flag)//<2F><>ż<EFBFBD>ϸ<EFBFBD>,<2C>ż<EFBFBD><C5BC><EFBFBD>
|
||||
{
|
||||
NAND_ReadSpare((blocknum-1)*nand_dev.block_pagenum,0,(u8*)&temp,4);//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʹ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
||||
if(temp==0XFFFFFFFF)return(blocknum-1);//<2F>ҵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>տ<EFBFBD>,<2C><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
return 0XFFFFFFFF; //δ<>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB>plane<6E>ڵ<EFBFBD>δʹ<CEB4>õĿ<C3B5>
|
||||
//sblock<63><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>Χ:0~(block_totalnum-1)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0XFFFFFFFF,ʧ<><CAA7>
|
||||
// <20><><EFBFBD><EFBFBD>ֵ,δʹ<CEB4>ÿ<EFBFBD><C3BF><EFBFBD>
|
||||
u32 FTL_FindSamePlaneUnusedBlock(u32 sblock)
|
||||
{
|
||||
static u32 curblock=0XFFFFFFFF;
|
||||
u32 unusedblock=0;
|
||||
if(curblock>(nand_dev.block_totalnum-1))curblock=nand_dev.block_totalnum-1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>,ǿ<>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>鿪ʼ
|
||||
unusedblock=FTL_FindUnusedBlock(curblock,sblock%2); //<2F>ӵ<EFBFBD>ǰ<EFBFBD><C7B0>,<2C><>ʼ,<2C><>ǰ<EFBFBD><C7B0><EFBFBD>ҿ<EFBFBD><D2BF><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(unusedblock==0XFFFFFFFF&&curblock<(nand_dev.block_totalnum-1)) //δ<>ҵ<EFBFBD>,<2C>Ҳ<EFBFBD><D2B2>Ǵ<EFBFBD><C7B4><EFBFBD>ĩβ<C4A9><CEB2>ʼ<EFBFBD>ҵ<EFBFBD>
|
||||
{
|
||||
curblock=nand_dev.block_totalnum-1; //ǿ<>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>鿪ʼ
|
||||
unusedblock=FTL_FindUnusedBlock(curblock,sblock%2); //<2F><><EFBFBD><EFBFBD>ĩβ<C4A9><CEB2>ʼ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
||||
}
|
||||
if(unusedblock==0XFFFFFFFF)return 0XFFFFFFFF; //<2F>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>block
|
||||
curblock=unusedblock; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>δʹ<CEB4>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>.<2E>´<EFBFBD><C2B4><EFBFBD><EFBFBD>Ӵ˴<D3B4><CBB4><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
return unusedblock; //<2F><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>Ŀ<EFBFBD><C4BF><EFBFBD>block
|
||||
}
|
||||
//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>,<2C><><EFBFBD>ҿ<EFBFBD><D2BF><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//Source_PageNo:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ҳ<EFBFBD><D2B3>ַ,<2C><>Χ:0~(block_pagenum*block_totalnum-1)
|
||||
//ColNum:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD>ʼ<EFBFBD><CABC>ַ(Ҳ<><D2B2><EFBFBD><EFBFBD>ҳ<EFBFBD>ڵ<EFBFBD>ַ),<2C><>Χ:0~(page_totalsize-1)
|
||||
//pBuffer:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//NumByteToWrite:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,ʧ<><CAA7>
|
||||
u8 FTL_CopyAndWriteToBlock(u32 Source_PageNum,u16 ColNum,u8 *pBuffer,u32 NumByteToWrite)
|
||||
{
|
||||
u16 i=0,temp=0,wrlen;
|
||||
u32 source_block=0,pageoffset=0;
|
||||
u32 unusedblock=0;
|
||||
source_block=Source_PageNum/nand_dev.block_pagenum; //<2F><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD>ڵĿ<DAB5><C4BF><EFBFBD>
|
||||
pageoffset=Source_PageNum%nand_dev.block_pagenum; //<2F><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF>ڵ<EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
retry:
|
||||
unusedblock=FTL_FindSamePlaneUnusedBlock(source_block);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>plane<6E><65>δʹ<CEB4>ÿ<EFBFBD>
|
||||
if(unusedblock>nand_dev.block_totalnum)return 1; //<2F><><EFBFBD>ҵ<EFBFBD><D2B5>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>϶<EFBFBD><CFB6>dz<EFBFBD><C7B3><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(i=0;i<nand_dev.block_pagenum;i++) //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8>Ƶ<EFBFBD><C6B5>ҵ<EFBFBD><D2B5><EFBFBD>δʹ<CEB4>ÿ<EFBFBD><C3BF><EFBFBD>
|
||||
{
|
||||
if(i>=pageoffset&&NumByteToWrite) //<2F><><EFBFBD><EFBFBD>Ҫд<D2AA>뵽<EFBFBD><EBB5BD>ǰҳ
|
||||
{
|
||||
if(NumByteToWrite>(nand_dev.page_mainsize-ColNum))//Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>ǰҳ<C7B0><D2B3>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
wrlen=nand_dev.page_mainsize-ColNum; //д<>볤<EFBFBD>ȵ<EFBFBD><C8B5>ڵ<EFBFBD>ǰҳʣ<D2B3><CAA3><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
}else wrlen=NumByteToWrite; //д<><D0B4>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
temp=NAND_CopyPageWithWrite(source_block*nand_dev.block_pagenum+i,unusedblock*nand_dev.block_pagenum+i,ColNum,pBuffer,wrlen);
|
||||
ColNum=0; //<2F>е<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
|
||||
pBuffer+=wrlen; //д<><D0B4>ַƫ<D6B7><C6AB>
|
||||
NumByteToWrite-=wrlen; //д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>
|
||||
}else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>,ֱ<>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
temp=NAND_CopyPageWithoutWrite(source_block*nand_dev.block_pagenum+i,unusedblock*nand_dev.block_pagenum+i);
|
||||
}
|
||||
if(temp) //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>鴦<EFBFBD><E9B4A6>
|
||||
{
|
||||
FTL_BadBlockMark(unusedblock); //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
FTL_CreateLUT(1); //<2F>ؽ<EFBFBD>LUT<55><54>
|
||||
goto retry;
|
||||
}
|
||||
}
|
||||
if(i==nand_dev.block_pagenum) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
FTL_UsedBlockMark(unusedblock); //<2F><><EFBFBD>ǿ<EFBFBD><C7BF>Ѿ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
NAND_EraseBlock(source_block); //<2F><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
//printf("\r\ncopy block %d to block %d\r\n",source_block,unusedblock);//<2F><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
for(i=0;i<nand_dev.block_totalnum;i++) //<2F><><EFBFBD><EFBFBD>LUT<55><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>unusedblock<63>滻source_block
|
||||
{
|
||||
if(nand_dev.lut[i]==source_block)
|
||||
{
|
||||
nand_dev.lut[i]=unusedblock;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0; //<2F>ɹ<EFBFBD>
|
||||
}
|
||||
//<2F><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//LBNNum:<3A><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u16 FTL_LBNToPBN(u32 LBNNum)
|
||||
{
|
||||
u16 PBNNo=0;
|
||||
//<2F><><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>0XFFFF
|
||||
if(LBNNum>nand_dev.valid_blocknum)return 0XFFFF;
|
||||
PBNNo=nand_dev.lut[LBNNum];
|
||||
return PBNNo;
|
||||
}
|
||||
//д<><D0B4><EFBFBD><EFBFBD>(֧<>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>д)<29><>FATFS<46>ļ<EFBFBD>ϵͳʹ<CDB3><CAB9>
|
||||
//pBuffer:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//SectorNo:<3A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//SectorSize:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(<28><><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>NAND_ECC_SECTOR_SIZE<5A><45><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!)
|
||||
//SectorCount:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,ʧ<><CAA7>
|
||||
u8 FTL_WriteSectors(u8 *pBuffer,u32 SectorNo,u16 SectorSize,u32 SectorCount)
|
||||
{
|
||||
u8 flag=0;
|
||||
u16 temp;
|
||||
u32 i=0;
|
||||
u16 wsecs; //дҳ<D0B4><D2B3>С
|
||||
u32 wlen; //д<>볤<EFBFBD><EBB3A4>
|
||||
u32 LBNNo; //<2F><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 PBNNo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 PhyPageNo; //<2F><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>
|
||||
u32 PageOffset; //ҳ<><D2B3>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
|
||||
u32 BlockOffset;//<2F><><EFBFBD><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
|
||||
u32 markdpbn=0XFFFFFFFF; //<2F><><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(i=0;i<SectorCount;i++)
|
||||
{
|
||||
LBNNo=(SectorNo+i)/(nand_dev.block_pagenum*(nand_dev.page_mainsize/SectorSize));//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
PBNNo=FTL_LBNToPBN(LBNNo); //<2F><><EFBFBD><EFBFBD><DFBC><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(PBNNo>=nand_dev.block_totalnum)return 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD>NAND FLASH<53><48><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD>,<2C><>ʧ<EFBFBD><CAA7>.
|
||||
BlockOffset=((SectorNo+i)%(nand_dev.block_pagenum*(nand_dev.page_mainsize/SectorSize)))*SectorSize;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
PhyPageNo=PBNNo*nand_dev.block_pagenum+BlockOffset/nand_dev.page_mainsize; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>
|
||||
PageOffset=BlockOffset%nand_dev.page_mainsize; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
|
||||
temp=nand_dev.page_mainsize-PageOffset; //page<67><65>ʣ<EFBFBD><CAA3><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
temp/=SectorSize; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>sector<6F><72>
|
||||
wsecs=SectorCount-i; //<2F><>ʣ<EFBFBD><CAA3><EFBFBD>ٸ<EFBFBD>sectorҪд
|
||||
if(wsecs>=temp)wsecs=temp; //<2F><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>sector<6F><72>,<2C><>д<EFBFBD><D0B4>temp<6D><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
wlen=wsecs*SectorSize; //ÿ<><C3BF>дwsecs<63><73>sector
|
||||
//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD>ȫΪ0XFF
|
||||
flag=NAND_ReadPageComp(PhyPageNo,PageOffset,0XFFFFFFFF,wlen/4,&temp); //<2F><>һ<EFBFBD><D2BB>wlen/4<><34>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>0XFFFFFFFF<46>Ա<EFBFBD>
|
||||
if(flag)return 2; //<2F><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><F3A3ACBB><EFBFBD>
|
||||
if(temp==(wlen/4)) flag=NAND_WritePage(PhyPageNo,PageOffset,pBuffer,wlen); //ȫΪ0XFF,<2C><><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
else flag=1; //<2F><>ȫ<EFBFBD><C8AB>0XFF,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(flag==0&&(markdpbn!=PBNNo)) //ȫ<><C8AB>0XFF,<2C><>д<EFBFBD><D0B4><EFBFBD>ɹ<EFBFBD>,<2C>ұ<EFBFBD><D2B1><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뵱ǰ<EBB5B1><C7B0><EFBFBD><EFBFBD><EFBFBD>鲻ͬ
|
||||
{
|
||||
flag=FTL_UsedBlockMark(PBNNo); //<2F><><EFBFBD>Ǵ˿<C7B4><CBBF>Ѿ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
markdpbn=PBNNo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ǿ<EFBFBD>=<3D><>ǰ<EFBFBD><C7B0>,<2C><>ֹ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
if(flag)//<2F><>ȫΪ0XFF/<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
{
|
||||
temp=((u32)nand_dev.block_pagenum*nand_dev.page_mainsize-BlockOffset)/SectorSize;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>block<63><6B>ʣ<EFBFBD>¶<EFBFBD><C2B6>ٸ<EFBFBD>SECTOR<4F><52><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
|
||||
wsecs=SectorCount-i; //<2F><>ʣ<EFBFBD><CAA3><EFBFBD>ٸ<EFBFBD>sectorҪд
|
||||
if(wsecs>=temp)wsecs=temp; //<2F><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>sector<6F><72>,<2C><>д<EFBFBD><D0B4>temp<6D><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
wlen=wsecs*SectorSize; //ÿ<><C3BF>дwsecs<63><73>sector
|
||||
flag=FTL_CopyAndWriteToBlock(PhyPageNo,PageOffset,pBuffer,wlen);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>block,<2C><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(flag)return 3;//ʧ<><CAA7>
|
||||
}
|
||||
i+=wsecs-1;
|
||||
pBuffer+=wlen;//<2F><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ƫ<EFBFBD><C6AB>
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(֧<>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><>FATFS<46>ļ<EFBFBD>ϵͳʹ<CDB3><CAB9>
|
||||
//pBuffer:<3A><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
//SectorNo:<3A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//SectorSize:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
//SectorCount:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,ʧ<><CAA7>
|
||||
u8 FTL_ReadSectors(u8 *pBuffer,u32 SectorNo,u16 SectorSize,u32 SectorCount)
|
||||
{
|
||||
u8 flag=0;
|
||||
u16 rsecs; //<2F><><EFBFBD>ζ<EFBFBD>ȡҳ<C8A1><D2B3>
|
||||
u32 i=0;
|
||||
u32 LBNNo; //<2F><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 PBNNo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 PhyPageNo; //<2F><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>
|
||||
u32 PageOffset; //ҳ<><D2B3>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
|
||||
u32 BlockOffset;//<2F><><EFBFBD><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
|
||||
for(i=0;i<SectorCount;i++)
|
||||
{
|
||||
LBNNo=(SectorNo+i)/(nand_dev.block_pagenum*(nand_dev.page_mainsize/SectorSize));//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
PBNNo=FTL_LBNToPBN(LBNNo); //<2F><><EFBFBD><EFBFBD><DFBC><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(PBNNo>=nand_dev.block_totalnum)return 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD>NAND FLASH<53><48><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD>,<2C><>ʧ<EFBFBD><CAA7>.
|
||||
BlockOffset=((SectorNo+i)%(nand_dev.block_pagenum*(nand_dev.page_mainsize/SectorSize)))*SectorSize;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
PhyPageNo=PBNNo*nand_dev.block_pagenum+BlockOffset/nand_dev.page_mainsize; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>
|
||||
PageOffset=BlockOffset%nand_dev.page_mainsize; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
|
||||
rsecs=(nand_dev.page_mainsize-PageOffset)/SectorSize; //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ҳ
|
||||
if(rsecs>(SectorCount-i))rsecs=SectorCount-i; //<2F><><EFBFBD><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>SectorCount-i
|
||||
flag=NAND_ReadPage(PhyPageNo,PageOffset,pBuffer,rsecs*SectorSize); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
if(flag==NSTA_ECC1BITERR) //<2F><><EFBFBD><EFBFBD>1bit ecc<63><63><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
{
|
||||
flag=NAND_ReadPage(PhyPageNo,PageOffset,pBuffer,rsecs*SectorSize); //<2F>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD>,<2C>ٴ<EFBFBD>ȷ<EFBFBD><C8B7>
|
||||
if(flag==NSTA_ECC1BITERR)
|
||||
{
|
||||
FTL_CopyAndWriteToBlock(PhyPageNo,PageOffset,pBuffer,rsecs*SectorSize); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
flag=FTL_BlockCompare(PhyPageNo/nand_dev.block_pagenum,0XFFFFFFFF); //ȫ1<C8AB><31><EFBFBD><EFBFBD>,ȷ<><C8B7><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
if(flag==0)
|
||||
{
|
||||
flag=FTL_BlockCompare(PhyPageNo/nand_dev.block_pagenum,0X00); //ȫ0<C8AB><30><EFBFBD><EFBFBD>,ȷ<><C8B7><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
NAND_EraseBlock(PhyPageNo/nand_dev.block_pagenum); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
if(flag) //ȫ0/ȫ1<C8AB><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>϶<EFBFBD><CFB6>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD>.
|
||||
{
|
||||
FTL_BadBlockMark(PhyPageNo/nand_dev.block_pagenum); //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
FTL_CreateLUT(1); //<2F>ؽ<EFBFBD>LUT<55><54>
|
||||
}
|
||||
flag=0;
|
||||
}
|
||||
}
|
||||
if(flag==NSTA_ECC2BITERR)flag=0; //2bit ecc<63><63><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD><C7B3><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>µ<EFBFBD>)
|
||||
if(flag)return 2; //ʧ<><CAA7>
|
||||
pBuffer+=SectorSize*rsecs; //<2F><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ƫ<EFBFBD><C6AB>
|
||||
i+=rsecs-1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//<2F><><EFBFBD>´<EFBFBD><C2B4><EFBFBD>LUT<55><54>
|
||||
//mode:0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҲҪ<D2B2><D2AA><EFBFBD><EFBFBD>)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,ʧ<><CAA7>
|
||||
u8 FTL_CreateLUT(u8 mode)
|
||||
{
|
||||
u32 i;
|
||||
u8 buf[4];
|
||||
u32 LBNnum=0; //<2F><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(i=0;i<nand_dev.block_totalnum;i++) //<2F><>λLUT<55><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ<EFBFBD><CEAA>Чֵ<D0A7><D6B5>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>0XFFFF
|
||||
{
|
||||
nand_dev.lut[i]=0XFFFF;
|
||||
}
|
||||
nand_dev.good_blocknum=0;
|
||||
for(i=0;i<nand_dev.block_totalnum;i++)
|
||||
{
|
||||
NAND_ReadSpare(i*nand_dev.block_pagenum,0,buf,4); //<2F><>ȡ4<C8A1><34><EFBFBD>ֽ<EFBFBD>
|
||||
if(buf[0]==0XFF&&mode)NAND_ReadSpare(i*nand_dev.block_pagenum+1,0,buf,1);//<2F>ÿ<EFBFBD>,<2C><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>2<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(buf[0]==0XFF)//<2F>Ǻÿ<C7BA>
|
||||
{
|
||||
LBNnum=((u16)buf[3]<<8)+buf[2]; //<2F>õ<EFBFBD><C3B5><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(LBNnum<nand_dev.block_totalnum) //<2F><EFBFBD><DFBC><EFBFBD><EFBFBD>ſ϶<C5BF>С<EFBFBD><D0A1><EFBFBD>ܵĿ<DCB5><C4BF><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
nand_dev.lut[LBNnum]=i; //<2F><><EFBFBD><EFBFBD>LUT<55><54><EFBFBD><EFBFBD>дLBNnum<75><6D>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
nand_dev.good_blocknum++;
|
||||
}else printf("bad block index:%d\r\n",i);
|
||||
}
|
||||
//LUT<55><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(i=0;i<nand_dev.block_totalnum;i++)
|
||||
{
|
||||
if(nand_dev.lut[i]>=nand_dev.block_totalnum)
|
||||
{
|
||||
nand_dev.valid_blocknum=i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(nand_dev.valid_blocknum<100)return 2; //<2F><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>С<EFBFBD><D0A1>100,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><>Ҫ<EFBFBD><D2AA><EFBFBD>¸<EFBFBD>ʽ<EFBFBD><CABD>
|
||||
return 0; //LUT<55><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
//FTL<54><4C><EFBFBD><EFBFBD>Block<63><6B>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>ݶԱ<DDB6>
|
||||
//blockx:block<63><6B><EFBFBD><EFBFBD>
|
||||
//cmpval:Ҫ<><D2AA>֮<EFBFBD>Աȵ<D4B1>ֵ
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>,ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 1,<2C><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>,<2C>в<EFBFBD><D0B2><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 FTL_BlockCompare(u32 blockx,u32 cmpval)
|
||||
{
|
||||
u8 res;
|
||||
u16 i,j,k;
|
||||
for(i=0;i<3;i++)//<2F><><EFBFBD><EFBFBD>3<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>
|
||||
{
|
||||
for(j=0;j<nand_dev.block_pagenum;j++)
|
||||
{
|
||||
NAND_ReadPageComp(blockx*nand_dev.block_pagenum,0,cmpval,nand_dev.page_mainsize/4,&k);//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>page,<2C><><EFBFBD><EFBFBD>0XFFFFFFFF<46>Ա<EFBFBD>
|
||||
if(k!=(nand_dev.page_mainsize/4))break;
|
||||
}
|
||||
if(j==nand_dev.block_pagenum)return 0; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD>,ֱ<><D6B1><EFBFBD>˳<EFBFBD>
|
||||
res=NAND_EraseBlock(blockx);
|
||||
if(res)printf("error erase block:%d\r\n",i);
|
||||
else
|
||||
{
|
||||
if(cmpval!=0XFFFFFFFF)//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ȫ1,<2C><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
{
|
||||
for(k=0;k<nand_dev.block_pagenum;k++)
|
||||
{
|
||||
NAND_WritePageConst(blockx*nand_dev.block_pagenum+k,0,0,nand_dev.page_mainsize/4);//дPAGE
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
printf("bad block checked:%d\r\n",blockx);
|
||||
return 1;
|
||||
}
|
||||
//FTL<54><4C>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD>л<EFBFBD><D0BB><EFBFBD>,ʹ<><CAB9>:<3A><>-д-<2D><> <20><>ʽ
|
||||
//512M<32><4D>NAND ,<2C><>ҪԼ3<D4BC><33><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>RGB<47><42>,<2C><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>дNAND,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 FTL_SearchBadBlock(void)
|
||||
{
|
||||
u8 *blktbl;
|
||||
u8 res;
|
||||
u32 i,j;
|
||||
u32 goodblock=0;
|
||||
blktbl=mymalloc(SRAMIN,nand_dev.block_totalnum);//<2F><><EFBFBD><EFBFBD>block<63><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>,<2C><>Ӧ<EFBFBD><D3A6>:0,<2C>ÿ<EFBFBD>;1,<2C><><EFBFBD><EFBFBD>;
|
||||
NAND_EraseChip(); //ȫƬ<C8AB><C6AC><EFBFBD><EFBFBD>
|
||||
for(i=0;i<nand_dev.block_totalnum;i++) //<2F><>һ<EFBFBD>μ<D7B6><CEBC><EFBFBD>,<2C><><EFBFBD><EFBFBD>ȫ1
|
||||
{
|
||||
res=FTL_BlockCompare(i,0XFFFFFFFF); //ȫ1<C8AB><31><EFBFBD><EFBFBD>
|
||||
if(res)blktbl[i]=1; //<2F><><EFBFBD><EFBFBD>
|
||||
else
|
||||
{
|
||||
blktbl[i]=0; //<2F>ÿ<EFBFBD>
|
||||
for(j=0;j<nand_dev.block_pagenum;j++)//дblockΪȫ0,Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><D7BC>
|
||||
{
|
||||
NAND_WritePageConst(i*nand_dev.block_pagenum+j,0,0,nand_dev.page_mainsize/4);
|
||||
}
|
||||
}
|
||||
}
|
||||
for(i=0;i<nand_dev.block_totalnum;i++) //<2F>ڶ<EFBFBD><DAB6>μ<D7B6><CEBC><EFBFBD>,<2C><><EFBFBD><EFBFBD>ȫ0
|
||||
{
|
||||
if(blktbl[i]==0) //<2F>ڵ<EFBFBD>һ<EFBFBD><EFBFBD>,û<>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD>,<2C>ſ<EFBFBD><C5BF><EFBFBD><EFBFBD>Ǻÿ<C7BA>
|
||||
{
|
||||
res=FTL_BlockCompare(i,0); //ȫ0<C8AB><30><EFBFBD><EFBFBD>
|
||||
if(res)blktbl[i]=1; //<2F><><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD>
|
||||
else goodblock++;
|
||||
}
|
||||
}
|
||||
NAND_EraseChip(); //ȫƬ<C8AB><C6AC><EFBFBD><EFBFBD>
|
||||
for(i=0;i<nand_dev.block_totalnum;i++) //<2F><><EFBFBD><EFBFBD><EFBFBD>μ<D7B6><CEBC><EFBFBD>,<2C><><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD>
|
||||
{
|
||||
if(blktbl[i])FTL_BadBlockMark(i); //<2F>ǻ<EFBFBD><C7BB><EFBFBD>
|
||||
}
|
||||
return goodblock; //<2F><><EFBFBD>غÿ<D8BA><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//<2F><>ʽ<EFBFBD><CABD>NAND <20>ؽ<EFBFBD>LUT<55><54>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,ʧ<><CAA7>
|
||||
u8 FTL_Format(void)
|
||||
{
|
||||
u8 temp;
|
||||
u32 i,n;
|
||||
u32 goodblock=0;
|
||||
nand_dev.good_blocknum=0;
|
||||
#if FTL_USE_BAD_BLOCK_SEARCH==1 //ʹ<>ò<EFBFBD>-д-<2D><><EFBFBD>ķ<EFBFBD>ʽ,<2C><><EFBFBD><EFBFBD><E2BBB5>
|
||||
nand_dev.good_blocknum=FTL_SearchBadBlock();//<2F><>Ѱ<EFBFBD><D1B0><EFBFBD><EFBFBD>.<2E><>ʱ<EFBFBD>ܾ<EFBFBD>
|
||||
#else //ֱ<><D6B1>ʹ<EFBFBD><CAB9>NAND FLASH<53>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,Ĭ<><C4AC><EFBFBD>Ǻÿ<C7BA>)
|
||||
for(i=0;i<nand_dev.block_totalnum;i++)
|
||||
{
|
||||
temp=FTL_CheckBadBlock(i); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
if(temp==0) //<2F>ÿ<EFBFBD>
|
||||
{
|
||||
temp=NAND_EraseBlock(i);
|
||||
if(temp) //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>,<2C><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
{
|
||||
printf("Bad block:%d\r\n",i);
|
||||
FTL_BadBlockMark(i); //<2F><><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD>
|
||||
}else nand_dev.good_blocknum++; //<2F>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ
|
||||
}
|
||||
}
|
||||
#endif
|
||||
printf("good_blocknum:%d\r\n",nand_dev.good_blocknum);
|
||||
if(nand_dev.good_blocknum<100) return 1; //<2F><><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD>NAND Flash<73><68><EFBFBD><EFBFBD>
|
||||
goodblock=(nand_dev.good_blocknum*93)/100; //%93<39>ĺÿ<C4BA><C3BF><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD>
|
||||
n=0;
|
||||
for(i=0;i<nand_dev.block_totalnum;i++) //<2F>ںÿ<DABA><C3BF>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
{
|
||||
temp=FTL_CheckBadBlock(i); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
if(temp==0) //<2F>ÿ<EFBFBD>
|
||||
{
|
||||
NAND_WriteSpare(i*nand_dev.block_pagenum,2,(u8*)&n,2);//д<><D0B4><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
n++; //<2F><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD>1
|
||||
if(n==goodblock) break; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
if(FTL_CreateLUT(1))return 2; //<2F>ؽ<EFBFBD>LUT<55><54>ʧ<EFBFBD><CAA7>
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
#ifndef __FTL_H
|
||||
#define __FTL_H
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//NAND FLASH FTL<54><4C><EFBFBD>㷨<EFBFBD><E3B7A8><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/15
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.3
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
//V1.1 20160124
|
||||
//<2F><EFBFBD>FTL_CopyAndWriteToBlock<63><6B>FTL_WriteSectors<72><73><EFBFBD><EFBFBD>,<2C><><EFBFBD>߷<EFBFBD>0XFFʱ<46><CAB1>д<EFBFBD><D0B4><EFBFBD>ٶ<EFBFBD>.
|
||||
//V1.2 20160520
|
||||
//1,<2C><EFBFBD>FTL_ReadSectors,<2C><><EFBFBD><EFBFBD>ECC<43><43><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD>鴦<EFBFBD><E9B4A6>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
||||
//2,<2C><><EFBFBD><EFBFBD>FTL_BlockCompare<72><65>FTL_SearchBadBlock<63><6B><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD><EFBFBD>
|
||||
//3,<2C><EFBFBD>FTL_Format<61><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⷽʽ,<2C><><EFBFBD><EFBFBD>FTL_USE_BAD_BLOCK_SEARCH<43><48>
|
||||
//V1.3 20160530
|
||||
//<2F>ĵ<DEB8>1bit ECC<43><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ȡ2<C8A1>Σ<EFBFBD><CEA3><EFBFBD>ȷ<EFBFBD><C8B7>1bit <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1,<2C><><EFBFBD><EFBFBD>FTL_Format<61><74>ʱ<EFBFBD><CAB1>,<2C><>Ѱ<EFBFBD><D1B0><EFBFBD><EFBFBD>,<2C><>ʱ<EFBFBD><CAB1>(512M,3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),<2C>һᵼ<D2BB><E1B5BC>RGB<47><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define FTL_USE_BAD_BLOCK_SEARCH 0 //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
|
||||
u8 FTL_Init(void);
|
||||
void FTL_BadBlockMark(u32 blocknum);
|
||||
u8 FTL_CheckBadBlock(u32 blocknum);
|
||||
u8 FTL_UsedBlockMark(u32 blocknum);
|
||||
u32 FTL_FindUnusedBlock(u32 sblock,u8 flag);
|
||||
u32 FTL_FindSamePlaneUnusedBlock(u32 sblock);
|
||||
u8 FTL_CopyAndWriteToBlock(u32 Source_PageNum,u16 ColNum,u8 *pBuffer,u32 NumByteToWrite);
|
||||
u16 FTL_LBNToPBN(u32 LBNNum);
|
||||
u8 FTL_WriteSectors(u8 *pBuffer,u32 SectorNo,u16 SectorSize,u32 SectorCount);
|
||||
u8 FTL_ReadSectors(u8 *pBuffer,u32 SectorNo,u16 SectorSize,u32 SectorCount);
|
||||
u8 FTL_CreateLUT(u8 mode);
|
||||
u8 FTL_BlockCompare(u32 blockx,u32 cmpval);
|
||||
u32 FTL_SearchBadBlock(void);
|
||||
u8 FTL_Format(void);
|
||||
#endif
|
||||
|
||||
@@ -1,682 +0,0 @@
|
||||
#include "nand.h"
|
||||
#include "delay.h"
|
||||
#include "malloc.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//NAND FLASH <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/15
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.5
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
//V1.1 20160520
|
||||
//1,<2C><><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2>ECC֧<43><D6A7>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NAND_ECC_SECTOR_SIZE<5A><45>СΪ<D0A1><CEAA>λ<EFBFBD><CEBB><EFBFBD>ж<EFBFBD>дʱ<D0B4><CAB1><EFBFBD><EFBFBD>)
|
||||
//2,<2C><><EFBFBD><EFBFBD>NAND_Delay<61><79><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڵȴ<DAB5>tADL/tWHR
|
||||
//3,<2C><><EFBFBD><EFBFBD>NAND_WritePageConst<73><74><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD><EFBFBD>.
|
||||
//V1.2 20160525
|
||||
//1,ȥ<><C8A5>NAND_SEC_SIZE<5A>궨<EFBFBD>壬<EFBFBD><E5A3AC>NAND_ECC_SECTOR_SIZE<5A><45><EFBFBD><EFBFBD>
|
||||
//2,ȥ<><C8A5>nand_dev<65>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>secbufָ<66>룬<EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
//V1.3 20160907
|
||||
//1,<2C><><EFBFBD><EFBFBD>NAND_TADL_DELAY<41><59>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tADL<44><4C><EFBFBD>ӳ<EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//V1.4 20180321
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H27U4G8F2EоƬ<D0BE><C6AC>֧<EFBFBD><D6A7>
|
||||
//2,<2C><EFBFBD>MEMSET/MEMHOLD/MEMHIZ<49><5A><EFBFBD><EFBFBD>ʱ,<2C><>֧<EFBFBD><D6A7>H27U4G08F2E.
|
||||
//V1.5 20180531
|
||||
//1.<2E><><EFBFBD><EFBFBD>NAND_TWHR_DELAY/NAND_TRHW_DELAY/NAND_TPROG_DELAY/NAND_TBERS_DELAY<41>ĸ<EFBFBD><C4B8><EFBFBD>ʱ,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
||||
//2.<2E><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>ʱ<EFBFBD>䲻<EFBFBD><E4B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>ɳ<EFBFBD><C9B3><EFBFBD>
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
NAND_HandleTypeDef NAND_Handler; //NAND FLASH<53><48><EFBFBD><EFBFBD>
|
||||
nand_attriute nand_dev; //nand<6E><64>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC>NAND FLASH
|
||||
u8 NAND_Init(void)
|
||||
{
|
||||
FMC_NAND_PCC_TimingTypeDef ComSpaceTiming,AttSpaceTiming;
|
||||
|
||||
NAND_Handler.Instance=FMC_NAND_DEVICE;
|
||||
NAND_Handler.Init.NandBank=FMC_NAND_BANK3; //NAND<4E><44><EFBFBD><EFBFBD>BANK3<4B><33>
|
||||
NAND_Handler.Init.Waitfeature=FMC_NAND_PCC_WAIT_FEATURE_DISABLE; //<2F>رյȴ<D5B5><C8B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
NAND_Handler.Init.MemoryDataWidth=FMC_NAND_PCC_MEM_BUS_WIDTH_8; //8λ<38><CEBB><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>
|
||||
NAND_Handler.Init.EccComputation=FMC_NAND_ECC_DISABLE; //<2F><>ʹ<EFBFBD><CAB9>ECC
|
||||
NAND_Handler.Init.ECCPageSize=FMC_NAND_ECC_PAGE_SIZE_2048BYTE; //ECCҳ<43><D2B3>СΪ2k
|
||||
NAND_Handler.Init.TCLRSetupTime=0; //<2F><><EFBFBD><EFBFBD>TCLR(tCLR=CLE<4C><45>RE<52><45><EFBFBD><EFBFBD>ʱ)=(TCLR+TSET+2)*THCLK,THCLK=1/180M=5.5ns
|
||||
NAND_Handler.Init.TARSetupTime=1; //<2F><><EFBFBD><EFBFBD>TAR(tAR=ALE<4C><45>RE<52><45><EFBFBD><EFBFBD>ʱ)=(TAR+TSET+2)*THCLK,THCLK=1/180M=5.5n<EFBFBD><EFBFBD>
|
||||
|
||||
ComSpaceTiming.SetupTime=2; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
ComSpaceTiming.WaitSetupTime=3; //<2F>ȴ<EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
ComSpaceTiming.HoldSetupTime=2; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
ComSpaceTiming.HiZSetupTime=1; //<2F><><EFBFBD><EFBFBD>̬ʱ<CCAC><CAB1>
|
||||
|
||||
AttSpaceTiming.SetupTime=2; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
AttSpaceTiming.WaitSetupTime=3; //<2F>ȴ<EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
AttSpaceTiming.HoldSetupTime=2; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
AttSpaceTiming.HiZSetupTime=1; //<2F><><EFBFBD><EFBFBD>̬ʱ<CCAC><CAB1>
|
||||
|
||||
HAL_NAND_Init(&NAND_Handler,&ComSpaceTiming,&AttSpaceTiming);
|
||||
NAND_Reset(); //<2F><>λNAND
|
||||
delay_ms(100);
|
||||
nand_dev.id=NAND_ReadID(); //<2F><>ȡID
|
||||
NAND_ModeSet(4); //<2F><><EFBFBD><EFBFBD>ΪMODE4,<2C><><EFBFBD><EFBFBD>ģʽ
|
||||
if(nand_dev.id==MT29F16G08ABABA) //NANDΪMT29F16G08ABABA
|
||||
{
|
||||
nand_dev.page_totalsize=4320; //nandһ<64><D2BB>page<67><65><EFBFBD>ܴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>spare<72><65><EFBFBD><EFBFBD>
|
||||
nand_dev.page_mainsize=4096; //nandһ<64><D2BB>page<67><65><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
nand_dev.page_sparesize=224; //nandһ<64><D2BB>page<67><65>spare<72><65><EFBFBD><EFBFBD>С
|
||||
nand_dev.block_pagenum=128; //nandһ<64><D2BB>block<63><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>page<67><65>Ŀ
|
||||
nand_dev.plane_blocknum=2048; //nandһ<64><D2BB>plane<6E><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>block<63><6B>Ŀ
|
||||
nand_dev.block_totalnum=4096; //nand<6E><64><EFBFBD><EFBFBD>block<63><6B>Ŀ
|
||||
}
|
||||
else if(nand_dev.id==MT29F4G08ABADA)//NANDΪMT29F4G08ABADA
|
||||
{
|
||||
nand_dev.page_totalsize=2112; //nandһ<64><D2BB>page<67><65><EFBFBD>ܴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>spare<72><65><EFBFBD><EFBFBD>
|
||||
nand_dev.page_mainsize=2048; //nandһ<64><D2BB>page<67><65><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
nand_dev.page_sparesize=64; //nandһ<64><D2BB>page<67><65>spare<72><65><EFBFBD><EFBFBD>С
|
||||
nand_dev.block_pagenum=64; //nandһ<64><D2BB>block<63><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>page<67><65>Ŀ
|
||||
nand_dev.plane_blocknum=2048; //nandһ<64><D2BB>plane<6E><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>block<63><6B>Ŀ
|
||||
nand_dev.block_totalnum=4096; //nand<6E><64><EFBFBD><EFBFBD>block<63><6B>Ŀ
|
||||
}else return 1; //<2F><><EFBFBD><EFBFBD><F3A3ACB7><EFBFBD>
|
||||
return 0;
|
||||
}
|
||||
|
||||
//NAND FALSH<53>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>ʱ<EFBFBD><CAB1>ʹ<EFBFBD><CAB9>
|
||||
//<2F>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ᱻHAL_NAND_Init()<29><><EFBFBD><EFBFBD>
|
||||
void HAL_NAND_MspInit(NAND_HandleTypeDef *hnand)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_Initure;
|
||||
|
||||
__HAL_RCC_FMC_CLK_ENABLE(); //ʹ<><CAB9>FMCʱ<43><CAB1>
|
||||
__HAL_RCC_GPIOD_CLK_ENABLE(); //ʹ<><CAB9>GPIODʱ<44><CAB1>
|
||||
__HAL_RCC_GPIOE_CLK_ENABLE(); //ʹ<><CAB9>GPIOEʱ<45><CAB1>
|
||||
__HAL_RCC_GPIOG_CLK_ENABLE(); //ʹ<><CAB9>GPIOGʱ<47><CAB1>
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC>PD6 R/B<><42><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pin=GPIO_PIN_6;
|
||||
GPIO_Initure.Mode=GPIO_MODE_INPUT; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //<2F><><EFBFBD><EFBFBD>
|
||||
HAL_GPIO_Init(GPIOD,&GPIO_Initure);
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC>PG9 NCE3<45><33><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pin=GPIO_PIN_9;
|
||||
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_NOPULL; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Alternate=GPIO_AF12_FMC; //<2F><><EFBFBD><EFBFBD>ΪFMC
|
||||
HAL_GPIO_Init(GPIOG,&GPIO_Initure);
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC>PD0,1,4,5,11,12,14,15
|
||||
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5|\
|
||||
GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_14|GPIO_PIN_15;
|
||||
GPIO_Initure.Pull=GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOD,&GPIO_Initure);
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC>PE7,8,9,10
|
||||
GPIO_Initure.Pin=GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10;
|
||||
HAL_GPIO_Init(GPIOE,&GPIO_Initure);
|
||||
}
|
||||
|
||||
//<2F><>ȡNAND FLASH<53><48>ID
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>;
|
||||
// <20><><EFBFBD><EFBFBD>,ʧ<><CAA7>
|
||||
u8 NAND_ModeSet(u8 mode)
|
||||
{
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_FEATURE;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=0X01; //<2F><>ַΪ0X01,<2C><><EFBFBD><EFBFBD>mode
|
||||
*(vu8*)NAND_ADDRESS=mode; //P1<50><31><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>mode
|
||||
*(vu8*)NAND_ADDRESS=0;
|
||||
*(vu8*)NAND_ADDRESS=0;
|
||||
*(vu8*)NAND_ADDRESS=0;
|
||||
if(NAND_WaitForReady()==NSTA_READY)return 0;//<2F>ɹ<EFBFBD>
|
||||
else return 1; //ʧ<><CAA7>
|
||||
}
|
||||
|
||||
//<2F><>ȡNAND FLASH<53><48>ID
|
||||
//<2F><>ͬ<EFBFBD><CDAC>NAND<4E><44><EFBFBD>в<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>NAND FALSH<53><48><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:NAND FLASH<53><48>IDֵ
|
||||
u32 NAND_ReadID(void)
|
||||
{
|
||||
u8 deviceid[5];
|
||||
u32 id;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_READID; //<2F><><EFBFBD>Ͷ<EFBFBD>ȡID<49><44><EFBFBD><EFBFBD>
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=0X00;
|
||||
//IDһ<44><D2BB><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD>ֽ<EFBFBD>
|
||||
deviceid[0]=*(vu8*)NAND_ADDRESS;
|
||||
deviceid[1]=*(vu8*)NAND_ADDRESS;
|
||||
deviceid[2]=*(vu8*)NAND_ADDRESS;
|
||||
deviceid[3]=*(vu8*)NAND_ADDRESS;
|
||||
deviceid[4]=*(vu8*)NAND_ADDRESS;
|
||||
//þ<><C3BE><EFBFBD><EFBFBD>NAND FLASH<53><48>IDһ<44><D2BB>5<EFBFBD><35><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻȡ4<C8A1><34><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>32λ<32><CEBB>IDֵ
|
||||
//<2F><><EFBFBD><EFBFBD>NAND FLASH<53><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲᣬֻҪ<D6BB><D2AA>þ<EFBFBD><C3BE><EFBFBD><EFBFBD>NAND FLASH<53><48><EFBFBD><EFBFBD>ôһ<C3B4><D2BB><EFBFBD>ֽ<EFBFBD>ID<49>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD>0X2C
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǾͿ<C7BE><CDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0X2C<32><43>ֻȡ<D6BB><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڵ<D6BD>IDֵ<44><D6B5>
|
||||
id=((u32)deviceid[1])<<24|((u32)deviceid[2])<<16|((u32)deviceid[3])<<8|deviceid[4];
|
||||
return id;
|
||||
}
|
||||
//<2F><>NAND״̬
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:NAND״ֵ̬
|
||||
//bit0:0,<2C>ɹ<EFBFBD>;1,<2C><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>/READ)
|
||||
//bit6:0,Busy;1,Ready
|
||||
u8 NAND_ReadStatus(void)
|
||||
{
|
||||
vu8 data=0;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_READSTA;//<2F><><EFBFBD>Ͷ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
|
||||
NAND_Delay(NAND_TWHR_DELAY); //<2F>ȴ<EFBFBD>tWHR,<2C>ٶ<EFBFBD>ȡ״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
data=*(vu8*)NAND_ADDRESS; //<2F><>ȡ״ֵ̬
|
||||
return data;
|
||||
}
|
||||
//<2F>ȴ<EFBFBD>NAND<44><D7BC><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:NSTA_TIMEOUT <20>ȴ<EFBFBD><C8B4><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
// NSTA_READY <20>Ѿ<EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD>
|
||||
u8 NAND_WaitForReady(void)
|
||||
{
|
||||
u8 status=0;
|
||||
vu32 time=0;
|
||||
while(1) //<2F>ȴ<EFBFBD>ready
|
||||
{
|
||||
status=NAND_ReadStatus(); //<2F><>ȡ״ֵ̬
|
||||
if(status&NSTA_READY)break;
|
||||
time++;
|
||||
if(time>=0X1FFFFFFF)return NSTA_TIMEOUT;//<2F><>ʱ
|
||||
}
|
||||
return NSTA_READY;//<><D7BC><EFBFBD><EFBFBD>
|
||||
}
|
||||
//<2F><>λNAND
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>;
|
||||
// <20><><EFBFBD><EFBFBD>,ʧ<><CAA7>
|
||||
u8 NAND_Reset(void)
|
||||
{
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_RESET; //<2F><>λNAND
|
||||
if(NAND_WaitForReady()==NSTA_READY)return 0;//<2F><>λ<EFBFBD>ɹ<EFBFBD>
|
||||
else return 1; //<2F><>λʧ<CEBB><CAA7>
|
||||
}
|
||||
//<2F>ȴ<EFBFBD>RB<52>ź<EFBFBD>Ϊij<CEAA><C4B3><EFBFBD><EFBFBD>ƽ
|
||||
//rb:0,<2C>ȴ<EFBFBD>RB==0
|
||||
// 1,<2C>ȴ<EFBFBD>RB==1
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// 1,<2C><>ʱ
|
||||
u8 NAND_WaitRB(vu8 rb)
|
||||
{
|
||||
vu32 time=0;
|
||||
while(time<0X1FFFFFF)
|
||||
{
|
||||
time++;
|
||||
if(NAND_RB==rb)return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
//NAND<4E><44>ʱ
|
||||
//һ<><D2BB>i++<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ4ns
|
||||
void NAND_Delay(vu32 i)
|
||||
{
|
||||
while(i>0)i--;
|
||||
}
|
||||
//<2F><>ȡNAND Flash<73><68>ָ<EFBFBD><D6B8>ҳָ<D2B3><D6B8><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>(main<69><6E><EFBFBD><EFBFBD>spare<72><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ô˺<C3B4><CBBA><EFBFBD>)
|
||||
//PageNum:Ҫ<><D2AA>ȡ<EFBFBD><C8A1>ҳ<EFBFBD><D2B3>ַ,<2C><>Χ:0~(block_pagenum*block_totalnum-1)
|
||||
//ColNum:Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD>п<EFBFBD>ʼ<EFBFBD><CABC>ַ(Ҳ<><D2B2><EFBFBD><EFBFBD>ҳ<EFBFBD>ڵ<EFBFBD>ַ),<2C><>Χ:0~(page_totalsize-1)
|
||||
//*pBuffer:ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
//NumByteToRead:<3A><>ȡ<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD>ܿ<EFBFBD>ҳ<EFBFBD><D2B3>)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 NAND_ReadPage(u32 PageNum,u16 ColNum,u8 *pBuffer,u16 NumByteToRead)
|
||||
{
|
||||
vu16 i=0;
|
||||
u8 res=0;
|
||||
u8 eccnum=0; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ECC<43><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿNAND_ECC_SECTOR_SIZE<5A>ֽڼ<D6BD><DABC><EFBFBD>һ<EFBFBD><D2BB>ecc
|
||||
u8 eccstart=0; //<2F><>һ<EFBFBD><D2BB>ECCֵ<43><D6B5><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ<EFBFBD><D6B7>Χ
|
||||
u8 errsta=0;
|
||||
u8 *p;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_AREA_A;
|
||||
//<2F><><EFBFBD>͵<EFBFBD>ַ
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)ColNum;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(ColNum>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)PageNum;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>16);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_AREA_TRUE1;
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ǵȴ<C7B5>R/B<><42><EFBFBD>ű<EFBFBD>Ϊ<EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>õģ<C3B5><C4A3>ȴ<EFBFBD>NAND<4E><44><EFBFBD><EFBFBD>R/B<><42><EFBFBD>š<EFBFBD><C5A1><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
//<2F><>STM32<33><32>NWAIT<49><54><EFBFBD><EFBFBD>(NAND<4E><44>R/B<><42><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ͨIO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ȡNWAIT<49><54><EFBFBD>ŵĵ<C5B5>ƽ<EFBFBD><C6BD><EFBFBD>ж<EFBFBD>NAND<4E>Ƿ<EFBFBD><EFBFBD><D7BC>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȺܿ<C8BA><DCBF><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>п<EFBFBD><D0BF><EFBFBD>NAND<4E><44>û<EFBFBD><C3BB><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>R/B<><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾNAND<4E><44>æ
|
||||
//<2F><>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǾͶ<C7BE>ȡ<EFBFBD><C8A1>R/B<><42><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ʵ<EFBFBD><CAB5>ȷʵ<C8B7>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD>!<21><><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD>뻻<EFBFBD><EBBBBB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>,ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=NAND_WaitRB(0); //<2F>ȴ<EFBFBD>RB=0
|
||||
if(res)return NSTA_TIMEOUT; //<2F><>ʱ<EFBFBD>˳<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>2<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>NAND<4E>Ƿ<EFBFBD><EFBFBD><D7BC><EFBFBD>õ<EFBFBD>
|
||||
res=NAND_WaitRB(1); //<2F>ȴ<EFBFBD>RB=1
|
||||
if(res)return NSTA_TIMEOUT; //<2F><>ʱ<EFBFBD>˳<EFBFBD>
|
||||
if(NumByteToRead%NAND_ECC_SECTOR_SIZE)//<2F><><EFBFBD><EFBFBD>NAND_ECC_SECTOR_SIZE<5A><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ECCУ<43><D0A3>
|
||||
{
|
||||
//<2F><>ȡNAND FLASH<53>е<EFBFBD>ֵ
|
||||
for(i=0;i<NumByteToRead;i++)
|
||||
{
|
||||
*(vu8*)pBuffer++ = *(vu8*)NAND_ADDRESS;
|
||||
}
|
||||
}else
|
||||
{
|
||||
eccnum=NumByteToRead/NAND_ECC_SECTOR_SIZE; //<2F>õ<EFBFBD>ecc<63><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
eccstart=ColNum/NAND_ECC_SECTOR_SIZE;
|
||||
p=pBuffer;
|
||||
for(res=0;res<eccnum;res++)
|
||||
{
|
||||
FMC_Bank2_3->PCR3|=1<<6; //ʹ<><CAB9>ECCУ<43><D0A3>
|
||||
for(i=0;i<NAND_ECC_SECTOR_SIZE;i++) //<2F><>ȡNAND_ECC_SECTOR_SIZE<5A><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
*(vu8*)pBuffer++ = *(vu8*)NAND_ADDRESS;
|
||||
}
|
||||
while(!(FMC_Bank2_3->SR3&(1<<6))); //<2F>ȴ<EFBFBD>FIFO<46><4F>
|
||||
nand_dev.ecc_hdbuf[res+eccstart]=FMC_Bank2_3->ECCR3;//<2F><>ȡӲ<C8A1><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ECCֵ
|
||||
FMC_Bank2_3->PCR3&=~(1<<6); //<2F><>ֹECCУ<43><D0A3>
|
||||
}
|
||||
i=nand_dev.page_mainsize+0X10+eccstart*4; //<2F><>spare<72><65><EFBFBD><EFBFBD>0X10λ<30>ÿ<EFBFBD>ʼ<EFBFBD><CABC>ȡ֮ǰ<D6AE>洢<EFBFBD><E6B4A2>eccֵ
|
||||
NAND_Delay(NAND_TRHW_DELAY);//<2F>ȴ<EFBFBD>tRHW
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=0X05; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
//<2F><><EFBFBD>͵<EFBFBD>ַ
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)i;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(i>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=0XE0; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
NAND_Delay(NAND_TWHR_DELAY);//<2F>ȴ<EFBFBD>tWHR
|
||||
pBuffer=(u8*)&nand_dev.ecc_rdbuf[eccstart];
|
||||
for(i=0;i<4*eccnum;i++) //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ECCֵ
|
||||
{
|
||||
*(vu8*)pBuffer++= *(vu8*)NAND_ADDRESS;
|
||||
}
|
||||
for(i=0;i<eccnum;i++) //<2F><><EFBFBD><EFBFBD>ECC
|
||||
{
|
||||
if(nand_dev.ecc_rdbuf[i+eccstart]!=nand_dev.ecc_hdbuf[i+eccstart])//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ҪУ<D2AA><D0A3>
|
||||
{
|
||||
printf("err hd,rd:0x%x,0x%x\r\n",nand_dev.ecc_hdbuf[i+eccstart],nand_dev.ecc_rdbuf[i+eccstart]);
|
||||
printf("eccnum,eccstart:%d,%d\r\n",eccnum,eccstart);
|
||||
printf("PageNum,ColNum:%d,%d\r\n",PageNum,ColNum);
|
||||
res=NAND_ECC_Correction(p+NAND_ECC_SECTOR_SIZE*i,nand_dev.ecc_rdbuf[i+eccstart],nand_dev.ecc_hdbuf[i+eccstart]);//ECCУ<43><D0A3>
|
||||
if(res)errsta=NSTA_ECC2BITERR; //<2F><><EFBFBD><EFBFBD>2BIT<49><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ECC<43><43><EFBFBD><EFBFBD>
|
||||
else errsta=NSTA_ECC1BITERR; //<2F><><EFBFBD><EFBFBD>1BIT ECC<43><43><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
}
|
||||
if(NAND_WaitForReady()!=NSTA_READY)errsta=NSTA_ERROR; //ʧ<><CAA7>
|
||||
return errsta; //<2F>ɹ<EFBFBD>
|
||||
}
|
||||
//<2F><>ȡNAND Flash<73><68>ָ<EFBFBD><D6B8>ҳָ<D2B3><D6B8><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>(main<69><6E><EFBFBD><EFBFBD>spare<72><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ô˺<C3B4><CBBA><EFBFBD>),<2C><><EFBFBD>Ա<EFBFBD>(FTL<54><4C><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ҫ)
|
||||
//PageNum:Ҫ<><D2AA>ȡ<EFBFBD><C8A1>ҳ<EFBFBD><D2B3>ַ,<2C><>Χ:0~(block_pagenum*block_totalnum-1)
|
||||
//ColNum:Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD>п<EFBFBD>ʼ<EFBFBD><CABC>ַ(Ҳ<><D2B2><EFBFBD><EFBFBD>ҳ<EFBFBD>ڵ<EFBFBD>ַ),<2C><>Χ:0~(page_totalsize-1)
|
||||
//CmpVal:Ҫ<>Աȵ<D4B1>ֵ,<2C><>u32Ϊ<32><CEAA>λ
|
||||
//NumByteToRead:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>(<28><>4<EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ,<2C><><EFBFBD>ܿ<EFBFBD>ҳ<EFBFBD><D2B3>)
|
||||
//NumByteEqual:<3A>ӳ<EFBFBD>ʼλ<CABC>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>CmpValֵ<6C><D6B5>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 NAND_ReadPageComp(u32 PageNum,u16 ColNum,u32 CmpVal,u16 NumByteToRead,u16 *NumByteEqual)
|
||||
{
|
||||
u16 i=0;
|
||||
u8 res=0;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_AREA_A;
|
||||
//<2F><><EFBFBD>͵<EFBFBD>ַ
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)ColNum;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(ColNum>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)PageNum;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>16);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_AREA_TRUE1;
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ǵȴ<C7B5>R/B<><42><EFBFBD>ű<EFBFBD>Ϊ<EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>õģ<C3B5><C4A3>ȴ<EFBFBD>NAND<4E><44><EFBFBD><EFBFBD>R/B<><42><EFBFBD>š<EFBFBD><C5A1><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
//<2F><>STM32<33><32>NWAIT<49><54><EFBFBD><EFBFBD>(NAND<4E><44>R/B<><42><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ͨIO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ȡNWAIT<49><54><EFBFBD>ŵĵ<C5B5>ƽ<EFBFBD><C6BD><EFBFBD>ж<EFBFBD>NAND<4E>Ƿ<EFBFBD><EFBFBD><D7BC>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȺܿ<C8BA><DCBF><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>п<EFBFBD><D0BF><EFBFBD>NAND<4E><44>û<EFBFBD><C3BB><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>R/B<><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾNAND<4E><44>æ
|
||||
//<2F><>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǾͶ<C7BE>ȡ<EFBFBD><C8A1>R/B<><42><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ʵ<EFBFBD><CAB5>ȷʵ<C8B7>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD>!<21><><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD>뻻<EFBFBD><EBBBBB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>,ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=NAND_WaitRB(0); //<2F>ȴ<EFBFBD>RB=0
|
||||
if(res)return NSTA_TIMEOUT; //<2F><>ʱ<EFBFBD>˳<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>2<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>NAND<4E>Ƿ<EFBFBD><EFBFBD><D7BC><EFBFBD>õ<EFBFBD>
|
||||
res=NAND_WaitRB(1); //<2F>ȴ<EFBFBD>RB=1
|
||||
if(res)return NSTA_TIMEOUT; //<2F><>ʱ<EFBFBD>˳<EFBFBD>
|
||||
for(i=0;i<NumByteToRead;i++)//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>,ÿ<>ζ<EFBFBD>4<EFBFBD>ֽ<EFBFBD>
|
||||
{
|
||||
if(*(vu32*)NAND_ADDRESS!=CmpVal)break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>һ<EFBFBD><D2BB>ֵ,<2C><>CmpVal<61><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>˳<EFBFBD>.
|
||||
}
|
||||
*NumByteEqual=i; //<2F><>CmpValֵ<6C><D6B5>ͬ<EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
if(NAND_WaitForReady()!=NSTA_READY)return NSTA_ERROR;//ʧ<><CAA7>
|
||||
return 0; //<2F>ɹ<EFBFBD>
|
||||
}
|
||||
//<2F><>NANDһҳ<D2BB><D2B3>д<EFBFBD><D0B4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD>(main<69><6E><EFBFBD><EFBFBD>spare<72><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ô˺<C3B4><CBBA><EFBFBD>)
|
||||
//PageNum:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ַ,<2C><>Χ:0~(block_pagenum*block_totalnum-1)
|
||||
//ColNum:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD>ʼ<EFBFBD><CABC>ַ(Ҳ<><D2B2><EFBFBD><EFBFBD>ҳ<EFBFBD>ڵ<EFBFBD>ַ),<2C><>Χ:0~(page_totalsize-1)
|
||||
//pBbuffer:ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
//NumByteToWrite:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD><EFBFBD><EFBFBD>ҳʣ<D2B3><CAA3><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 NAND_WritePage(u32 PageNum,u16 ColNum,u8 *pBuffer,u16 NumByteToWrite)
|
||||
{
|
||||
vu16 i=0;
|
||||
u8 res=0;
|
||||
u8 eccnum=0; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ECC<43><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿNAND_ECC_SECTOR_SIZE<5A>ֽڼ<D6BD><DABC><EFBFBD>һ<EFBFBD><D2BB>ecc
|
||||
u8 eccstart=0; //<2F><>һ<EFBFBD><D2BB>ECCֵ<43><D6B5><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ<EFBFBD><D6B7>Χ
|
||||
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_WRITE0;
|
||||
//<2F><><EFBFBD>͵<EFBFBD>ַ
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)ColNum;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(ColNum>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)PageNum;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>16);
|
||||
NAND_Delay(NAND_TADL_DELAY);//<2F>ȴ<EFBFBD>tADL
|
||||
if(NumByteToWrite%NAND_ECC_SECTOR_SIZE)//<2F><><EFBFBD><EFBFBD>NAND_ECC_SECTOR_SIZE<5A><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ECCУ<43><D0A3>
|
||||
{
|
||||
for(i=0;i<NumByteToWrite;i++) //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
*(vu8*)NAND_ADDRESS=*(vu8*)pBuffer++;
|
||||
}
|
||||
}else
|
||||
{
|
||||
eccnum=NumByteToWrite/NAND_ECC_SECTOR_SIZE; //<2F>õ<EFBFBD>ecc<63><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
eccstart=ColNum/NAND_ECC_SECTOR_SIZE;
|
||||
for(res=0;res<eccnum;res++)
|
||||
{
|
||||
FMC_Bank2_3->PCR3|=1<<6; //ʹ<><CAB9>ECCУ<43><D0A3>
|
||||
for(i=0;i<NAND_ECC_SECTOR_SIZE;i++) //д<><D0B4>NAND_ECC_SECTOR_SIZE<5A><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
*(vu8*)NAND_ADDRESS=*(vu8*)pBuffer++;
|
||||
}
|
||||
while(!(FMC_Bank2_3->SR3&(1<<6))); //<2F>ȴ<EFBFBD>FIFO<46><4F>
|
||||
nand_dev.ecc_hdbuf[res+eccstart]=FMC_Bank2_3->ECCR3; //<2F><>ȡӲ<C8A1><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ECCֵ
|
||||
FMC_Bank2_3->PCR3&=~(1<<6); //<2F><>ֹECCУ<43><D0A3>
|
||||
}
|
||||
i=nand_dev.page_mainsize+0X10+eccstart*4; //<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ECC<43><43>spare<72><65><EFBFBD><EFBFBD>ַ
|
||||
NAND_Delay(NAND_TADL_DELAY);//<2F>ȴ<EFBFBD>tADL
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=0X85; //<2F><><EFBFBD><EFBFBD>дָ<D0B4><D6B8>
|
||||
//<2F><><EFBFBD>͵<EFBFBD>ַ
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)i;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(i>>8);
|
||||
NAND_Delay(NAND_TADL_DELAY);//<2F>ȴ<EFBFBD>tADL
|
||||
pBuffer=(u8*)&nand_dev.ecc_hdbuf[eccstart];
|
||||
for(i=0;i<eccnum;i++) //д<><D0B4>ECC
|
||||
{
|
||||
for(res=0;res<4;res++)
|
||||
{
|
||||
*(vu8*)NAND_ADDRESS=*(vu8*)pBuffer++;
|
||||
}
|
||||
}
|
||||
}
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_WRITE_TURE1;
|
||||
delay_us(NAND_TPROG_DELAY); //<2F>ȴ<EFBFBD>tPROG
|
||||
if(NAND_WaitForReady()!=NSTA_READY)return NSTA_ERROR;//ʧ<><CAA7>
|
||||
return 0;//<2F>ɹ<EFBFBD>
|
||||
}
|
||||
//<2F><>NANDһҳ<D2BB>е<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼ,д<><D0B4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ȵĺ㶨<C4BA><E3B6A8><EFBFBD><EFBFBD>
|
||||
//PageNum:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ַ,<2C><>Χ:0~(block_pagenum*block_totalnum-1)
|
||||
//ColNum:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD>ʼ<EFBFBD><CABC>ַ(Ҳ<><D2B2><EFBFBD><EFBFBD>ҳ<EFBFBD>ڵ<EFBFBD>ַ),<2C><>Χ:0~(page_totalsize-1)
|
||||
//cval:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//NumByteToWrite:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>4<EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 NAND_WritePageConst(u32 PageNum,u16 ColNum,u32 cval,u16 NumByteToWrite)
|
||||
{
|
||||
u16 i=0;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_WRITE0;
|
||||
//<2F><><EFBFBD>͵<EFBFBD>ַ
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)ColNum;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(ColNum>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)PageNum;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>16);
|
||||
NAND_Delay(NAND_TADL_DELAY);//<2F>ȴ<EFBFBD>tADL
|
||||
for(i=0;i<NumByteToWrite;i++) //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ÿ<><C3BF>д4<D0B4>ֽ<EFBFBD>
|
||||
{
|
||||
*(vu32*)NAND_ADDRESS=cval;
|
||||
}
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_WRITE_TURE1;
|
||||
delay_us(NAND_TPROG_DELAY); //<2F>ȴ<EFBFBD>tPROG
|
||||
if(NAND_WaitForReady()!=NSTA_READY)return NSTA_ERROR;//ʧ<><CAA7>
|
||||
return 0;//<2F>ɹ<EFBFBD>
|
||||
}
|
||||
//<2F><>һҳ<D2BB><D2B3><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һҳ,<2C><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//ע<><D7A2>:Դҳ<D4B4><D2B3>Ŀ<EFBFBD><C4BF>ҳҪ<D2B3><D2AA>ͬһ<CDAC><D2BB>Plane<6E>ڣ<EFBFBD>
|
||||
//Source_PageNo:Դҳ<D4B4><D2B3>ַ,<2C><>Χ:0~(block_pagenum*block_totalnum-1)
|
||||
//Dest_PageNo:Ŀ<><C4BF>ҳ<EFBFBD><D2B3>ַ,<2C><>Χ:0~(block_pagenum*block_totalnum-1)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 NAND_CopyPageWithoutWrite(u32 Source_PageNum,u32 Dest_PageNum)
|
||||
{
|
||||
u8 res=0;
|
||||
u16 source_block=0,dest_block=0;
|
||||
//<2F>ж<EFBFBD>Դҳ<D4B4><D2B3>Ŀ<EFBFBD><C4BF>ҳ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͬһ<CDAC><D2BB>plane<6E><65>
|
||||
source_block=Source_PageNum/nand_dev.block_pagenum;
|
||||
dest_block=Dest_PageNum/nand_dev.block_pagenum;
|
||||
if((source_block%2)!=(dest_block%2))return NSTA_ERROR; //<2F><><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB>plane<6E><65>
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_MOVEDATA_CMD0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0X00
|
||||
//<2F><><EFBFBD><EFBFBD>Դҳ<D4B4><D2B3>ַ
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)0;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)0;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)Source_PageNum;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(Source_PageNum>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(Source_PageNum>>16);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_MOVEDATA_CMD1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0X35
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ǵȴ<C7B5>R/B<><42><EFBFBD>ű<EFBFBD>Ϊ<EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>õģ<C3B5><C4A3>ȴ<EFBFBD>NAND<4E><44><EFBFBD><EFBFBD>R/B<><42><EFBFBD>š<EFBFBD><C5A1><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
//<2F><>STM32<33><32>NWAIT<49><54><EFBFBD><EFBFBD>(NAND<4E><44>R/B<><42><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ͨIO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ȡNWAIT<49><54><EFBFBD>ŵĵ<C5B5>ƽ<EFBFBD><C6BD><EFBFBD>ж<EFBFBD>NAND<4E>Ƿ<EFBFBD><EFBFBD><D7BC>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȺܿ<C8BA><DCBF><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>п<EFBFBD><D0BF><EFBFBD>NAND<4E><44>û<EFBFBD><C3BB><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>R/B<><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾNAND<4E><44>æ
|
||||
//<2F><>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǾͶ<C7BE>ȡ<EFBFBD><C8A1>R/B<><42><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ʵ<EFBFBD><CAB5>ȷʵ<C8B7>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD>!<21><><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD>뻻<EFBFBD><EBBBBB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>,ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=NAND_WaitRB(0); //<2F>ȴ<EFBFBD>RB=0
|
||||
if(res)return NSTA_TIMEOUT; //<2F><>ʱ<EFBFBD>˳<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>2<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>NAND<4E>Ƿ<EFBFBD><EFBFBD><D7BC><EFBFBD>õ<EFBFBD>
|
||||
res=NAND_WaitRB(1); //<2F>ȴ<EFBFBD>RB=1
|
||||
if(res)return NSTA_TIMEOUT; //<2F><>ʱ<EFBFBD>˳<EFBFBD>
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_MOVEDATA_CMD2; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0X85
|
||||
//<2F><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ҳ<EFBFBD><D2B3>ַ
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)0;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)0;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)Dest_PageNum;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(Dest_PageNum>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(Dest_PageNum>>16);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_MOVEDATA_CMD3; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0X10
|
||||
delay_us(NAND_TPROG_DELAY); //<2F>ȴ<EFBFBD>tPROG
|
||||
if(NAND_WaitForReady()!=NSTA_READY)return NSTA_ERROR; //NANDδ<CEB4><D7BC><EFBFBD><EFBFBD>
|
||||
return 0;//<2F>ɹ<EFBFBD>
|
||||
}
|
||||
|
||||
//<2F><>һҳ<D2BB><D2B3><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һҳ,<2C><><EFBFBD>ҿ<EFBFBD><D2BF><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//ע<><D7A2>:Դҳ<D4B4><D2B3>Ŀ<EFBFBD><C4BF>ҳҪ<D2B3><D2AA>ͬһ<CDAC><D2BB>Plane<6E>ڣ<EFBFBD>
|
||||
//Source_PageNo:Դҳ<D4B4><D2B3>ַ,<2C><>Χ:0~(block_pagenum*block_totalnum-1)
|
||||
//Dest_PageNo:Ŀ<><C4BF>ҳ<EFBFBD><D2B3>ַ,<2C><>Χ:0~(block_pagenum*block_totalnum-1)
|
||||
//ColNo:ҳ<><D2B3><EFBFBD>е<EFBFBD>ַ,<2C><>Χ:0~(page_totalsize-1)
|
||||
//pBuffer:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//NumByteToWrite:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 NAND_CopyPageWithWrite(u32 Source_PageNum,u32 Dest_PageNum,u16 ColNum,u8 *pBuffer,u16 NumByteToWrite)
|
||||
{
|
||||
u8 res=0;
|
||||
vu16 i=0;
|
||||
u16 source_block=0,dest_block=0;
|
||||
u8 eccnum=0; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ECC<43><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿNAND_ECC_SECTOR_SIZE<5A>ֽڼ<D6BD><DABC><EFBFBD>һ<EFBFBD><D2BB>ecc
|
||||
u8 eccstart=0; //<2F><>һ<EFBFBD><D2BB>ECCֵ<43><D6B5><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ<EFBFBD><D6B7>Χ
|
||||
//<2F>ж<EFBFBD>Դҳ<D4B4><D2B3>Ŀ<EFBFBD><C4BF>ҳ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͬһ<CDAC><D2BB>plane<6E><65>
|
||||
source_block=Source_PageNum/nand_dev.block_pagenum;
|
||||
dest_block=Dest_PageNum/nand_dev.block_pagenum;
|
||||
if((source_block%2)!=(dest_block%2))return NSTA_ERROR;//<2F><><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB>plane<6E><65>
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_MOVEDATA_CMD0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0X00
|
||||
//<2F><><EFBFBD><EFBFBD>Դҳ<D4B4><D2B3>ַ
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)0;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)0;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)Source_PageNum;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(Source_PageNum>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(Source_PageNum>>16);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_MOVEDATA_CMD1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0X35
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ǵȴ<C7B5>R/B<><42><EFBFBD>ű<EFBFBD>Ϊ<EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>õģ<C3B5><C4A3>ȴ<EFBFBD>NAND<4E><44><EFBFBD><EFBFBD>R/B<><42><EFBFBD>š<EFBFBD><C5A1><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
//<2F><>STM32<33><32>NWAIT<49><54><EFBFBD><EFBFBD>(NAND<4E><44>R/B<><42><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ͨIO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ȡNWAIT<49><54><EFBFBD>ŵĵ<C5B5>ƽ<EFBFBD><C6BD><EFBFBD>ж<EFBFBD>NAND<4E>Ƿ<EFBFBD><EFBFBD><D7BC>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȺܿ<C8BA><DCBF><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>п<EFBFBD><D0BF><EFBFBD>NAND<4E><44>û<EFBFBD><C3BB><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>R/B<><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾNAND<4E><44>æ
|
||||
//<2F><>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǾͶ<C7BE>ȡ<EFBFBD><C8A1>R/B<><42><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ʵ<EFBFBD><CAB5>ȷʵ<C8B7>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD>!<21><><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD>뻻<EFBFBD><EBBBBB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>,ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
res=NAND_WaitRB(0); //<2F>ȴ<EFBFBD>RB=0
|
||||
if(res)return NSTA_TIMEOUT; //<2F><>ʱ<EFBFBD>˳<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>2<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>NAND<4E>Ƿ<EFBFBD><EFBFBD><D7BC><EFBFBD>õ<EFBFBD>
|
||||
res=NAND_WaitRB(1); //<2F>ȴ<EFBFBD>RB=1
|
||||
if(res)return NSTA_TIMEOUT; //<2F><>ʱ<EFBFBD>˳<EFBFBD>
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_MOVEDATA_CMD2; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0X85
|
||||
//<2F><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ҳ<EFBFBD><D2B3>ַ
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)ColNum;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(ColNum>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)Dest_PageNum;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(Dest_PageNum>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(Dest_PageNum>>16);
|
||||
//<2F><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD>е<EFBFBD>ַ
|
||||
NAND_Delay(NAND_TADL_DELAY);//<2F>ȴ<EFBFBD>tADL
|
||||
if(NumByteToWrite%NAND_ECC_SECTOR_SIZE)//<2F><><EFBFBD><EFBFBD>NAND_ECC_SECTOR_SIZE<5A><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ECCУ<43><D0A3>
|
||||
{
|
||||
for(i=0;i<NumByteToWrite;i++) //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
*(vu8*)NAND_ADDRESS=*(vu8*)pBuffer++;
|
||||
}
|
||||
}else
|
||||
{
|
||||
eccnum=NumByteToWrite/NAND_ECC_SECTOR_SIZE; //<2F>õ<EFBFBD>ecc<63><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
eccstart=ColNum/NAND_ECC_SECTOR_SIZE;
|
||||
for(res=0;res<eccnum;res++)
|
||||
{
|
||||
FMC_Bank2_3->PCR3|=1<<6; //ʹ<><CAB9>ECCУ<43><D0A3>
|
||||
for(i=0;i<NAND_ECC_SECTOR_SIZE;i++) //д<><D0B4>NAND_ECC_SECTOR_SIZE<5A><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
*(vu8*)NAND_ADDRESS=*(vu8*)pBuffer++;
|
||||
}
|
||||
while(!(FMC_Bank2_3->SR3&(1<<6))); //<2F>ȴ<EFBFBD>FIFO<46><4F>
|
||||
nand_dev.ecc_hdbuf[res+eccstart]=FMC_Bank2_3->ECCR3; //<2F><>ȡӲ<C8A1><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ECCֵ
|
||||
FMC_Bank2_3->PCR3&=~(1<<6); //<2F><>ֹECCУ<43><D0A3>
|
||||
}
|
||||
i=nand_dev.page_mainsize+0X10+eccstart*4; //<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ECC<43><43>spare<72><65><EFBFBD><EFBFBD>ַ
|
||||
NAND_Delay(NAND_TADL_DELAY);//<2F>ȴ<EFBFBD>tADL
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=0X85; //<2F><><EFBFBD><EFBFBD>дָ<D0B4><D6B8>
|
||||
//<2F><><EFBFBD>͵<EFBFBD>ַ
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)i;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(i>>8);
|
||||
NAND_Delay(NAND_TADL_DELAY);//<2F>ȴ<EFBFBD>tADL
|
||||
pBuffer=(u8*)&nand_dev.ecc_hdbuf[eccstart];
|
||||
for(i=0;i<eccnum;i++) //д<><D0B4>ECC
|
||||
{
|
||||
for(res=0;res<4;res++)
|
||||
{
|
||||
*(vu8*)NAND_ADDRESS=*(vu8*)pBuffer++;
|
||||
}
|
||||
}
|
||||
}
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_MOVEDATA_CMD3; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0X10
|
||||
delay_us(NAND_TPROG_DELAY); //<2F>ȴ<EFBFBD>tPROG
|
||||
if(NAND_WaitForReady()!=NSTA_READY)return NSTA_ERROR; //ʧ<><CAA7>
|
||||
return 0; //<2F>ɹ<EFBFBD>
|
||||
}
|
||||
//<2F><>ȡspare<72><65><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
//PageNum:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ַ,<2C><>Χ:0~(block_pagenum*block_totalnum-1)
|
||||
//ColNum:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD>spare<72><65><EFBFBD><EFBFBD>ַ(spare<72><65><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>ַ),<2C><>Χ:0~(page_sparesize-1)
|
||||
//pBuffer:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
//NumByteToRead:Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>page_sparesize)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 NAND_ReadSpare(u32 PageNum,u16 ColNum,u8 *pBuffer,u16 NumByteToRead)
|
||||
{
|
||||
u8 temp=0;
|
||||
u8 remainbyte=0;
|
||||
remainbyte=nand_dev.page_sparesize-ColNum;
|
||||
if(NumByteToRead>remainbyte) NumByteToRead=remainbyte; //ȷ<><C8B7>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>spareʣ<65><CAA3><EFBFBD>Ĵ<EFBFBD>С
|
||||
temp=NAND_ReadPage(PageNum,ColNum+nand_dev.page_mainsize,pBuffer,NumByteToRead);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
return temp;
|
||||
}
|
||||
//<2F><>spare<72><65><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
//PageNum:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ַ,<2C><>Χ:0~(block_pagenum*block_totalnum-1)
|
||||
//ColNum:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD>spare<72><65><EFBFBD><EFBFBD>ַ(spare<72><65><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>ַ),<2C><>Χ:0~(page_sparesize-1)
|
||||
//pBuffer:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
//NumByteToWrite:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>page_sparesize)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,ʧ<><CAA7>
|
||||
u8 NAND_WriteSpare(u32 PageNum,u16 ColNum,u8 *pBuffer,u16 NumByteToWrite)
|
||||
{
|
||||
u8 temp=0;
|
||||
u8 remainbyte=0;
|
||||
remainbyte=nand_dev.page_sparesize-ColNum;
|
||||
if(NumByteToWrite>remainbyte) NumByteToWrite=remainbyte; //ȷ<><C8B7>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>spareʣ<65><CAA3><EFBFBD>Ĵ<EFBFBD>С
|
||||
temp=NAND_WritePage(PageNum,ColNum+nand_dev.page_mainsize,pBuffer,NumByteToWrite);//<2F><>ȡ
|
||||
return temp;
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
//BlockNum:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BLOCK<43><4B><EFBFBD><EFBFBD>,<2C><>Χ:0-(block_totalnum-1)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
u8 NAND_EraseBlock(u32 BlockNum)
|
||||
{
|
||||
if(nand_dev.id==MT29F16G08ABABA)BlockNum<<=7; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַת<D6B7><D7AA>Ϊҳ<CEAA><D2B3>ַ
|
||||
else if(nand_dev.id==MT29F4G08ABADA)BlockNum<<=6;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_ERASE0;
|
||||
//<2F><><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD>ַ
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)BlockNum;
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(BlockNum>>8);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(BlockNum>>16);
|
||||
*(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_ERASE1;
|
||||
delay_ms(NAND_TBERS_DELAY); //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
||||
if(NAND_WaitForReady()!=NSTA_READY)return NSTA_ERROR;//ʧ<><CAA7>
|
||||
return 0; //<2F>ɹ<EFBFBD>
|
||||
}
|
||||
//ȫƬ<C8AB><C6AC><EFBFBD><EFBFBD>NAND FLASH
|
||||
void NAND_EraseChip(void)
|
||||
{
|
||||
u8 status;
|
||||
u16 i=0;
|
||||
for(i=0;i<nand_dev.block_totalnum;i++) //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĿ<D0B5>
|
||||
{
|
||||
status=NAND_EraseBlock(i);
|
||||
if(status)printf("Erase %d block fail!!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ%d\r\n",i,status);//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
}
|
||||
}
|
||||
|
||||
//<2F><>ȡECC<43><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ/ż<><C5BC>λ
|
||||
//oe:0,ż<><C5BC>λ
|
||||
// 1,<2C><><EFBFBD><EFBFBD>λ
|
||||
//eccval:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>eccֵ
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>eccֵ(<28><><EFBFBD><EFBFBD>16λ)
|
||||
u16 NAND_ECC_Get_OE(u8 oe,u32 eccval)
|
||||
{
|
||||
u8 i;
|
||||
u16 ecctemp=0;
|
||||
for(i=0;i<24;i++)
|
||||
{
|
||||
if((i%2)==oe)
|
||||
{
|
||||
if((eccval>>i)&0X01)ecctemp+=1<<(i>>1);
|
||||
}
|
||||
}
|
||||
return ecctemp;
|
||||
}
|
||||
//ECCУ<43><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//eccrd:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>,ԭ<><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ECCֵ
|
||||
//ecccl:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ,Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ECCֻ
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>,ECC<43><43><EFBFBD><EFBFBD>(<28>д<EFBFBD><D0B4><EFBFBD>2<EFBFBD><32>bit<69>Ĵ<EFBFBD><C4B4><EFBFBD>,<2C><EFBFBD><DEB7>ָ<EFBFBD>)
|
||||
u8 NAND_ECC_Correction(u8* data_buf,u32 eccrd,u32 ecccl)
|
||||
{
|
||||
u16 eccrdo,eccrde,eccclo,ecccle;
|
||||
u16 eccchk=0;
|
||||
u16 errorpos=0;
|
||||
u32 bytepos=0;
|
||||
eccrdo=NAND_ECC_Get_OE(1,eccrd); //<2F><>ȡeccrd<72><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
||||
eccrde=NAND_ECC_Get_OE(0,eccrd); //<2F><>ȡeccrd<72><64>ż<EFBFBD><C5BC>λ
|
||||
eccclo=NAND_ECC_Get_OE(1,ecccl); //<2F><>ȡecccl<63><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
||||
ecccle=NAND_ECC_Get_OE(0,ecccl); //<2F><>ȡecccl<63><6C>ż<EFBFBD><C5BC>λ
|
||||
eccchk=eccrdo^eccrde^eccclo^ecccle;
|
||||
if(eccchk==0XFFF) //ȫ1,˵<><CBB5>ֻ<EFBFBD><D6BB>1bit ECC<43><43><EFBFBD><EFBFBD>
|
||||
{
|
||||
errorpos=eccrdo^eccclo;
|
||||
printf("errorpos:%d\r\n",errorpos);
|
||||
bytepos=errorpos/8;
|
||||
data_buf[bytepos]^=1<<(errorpos%8);
|
||||
}else //<2F><><EFBFBD><EFBFBD>ȫ1,˵<><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2bit ECC<43><43><EFBFBD><EFBFBD>,<2C><EFBFBD><DEB7><EFBFBD>
|
||||
{
|
||||
printf("2bit ecc error or more\r\n");
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,145 +0,0 @@
|
||||
#ifndef _NAND_H
|
||||
#define _NAND_H
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//NAND FLASH <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/15
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.5
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
//V1.1 20160520
|
||||
//1,<2C><><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2>ECC֧<43><D6A7>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NAND_ECC_SECTOR_SIZE<5A><45>СΪ<D0A1><CEAA>λ<EFBFBD><CEBB><EFBFBD>ж<EFBFBD>дʱ<D0B4><CAB1><EFBFBD><EFBFBD>)
|
||||
//2,<2C><><EFBFBD><EFBFBD>NAND_Delay<61><79><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڵȴ<DAB5>tADL/tWHR
|
||||
//3,<2C><><EFBFBD><EFBFBD>NAND_WritePageConst<73><74><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD><EFBFBD>.
|
||||
//V1.2 20160525
|
||||
//1,ȥ<><C8A5>NAND_SEC_SIZE<5A>궨<EFBFBD>壬<EFBFBD><E5A3AC>NAND_ECC_SECTOR_SIZE<5A><45><EFBFBD><EFBFBD>
|
||||
//2,ȥ<><C8A5>nand_dev<65>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>secbufָ<66>룬<EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
//V1.3 20160907
|
||||
//1,<2C><><EFBFBD><EFBFBD>NAND_TADL_DELAY<41><59>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tADL<44><4C><EFBFBD>ӳ<EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//V1.4 20180321
|
||||
//1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H27U4G8F2EоƬ<D0BE><C6AC>֧<EFBFBD><D6A7>
|
||||
//2,<2C><EFBFBD>MEMSET/MEMHOLD/MEMHIZ<49><5A><EFBFBD><EFBFBD>ʱ,<2C><>֧<EFBFBD><D6A7>H27U4G08F2E.
|
||||
//V1.5 20180531
|
||||
//1.<2E><><EFBFBD><EFBFBD>NAND_TWHR_DELAY/NAND_TRHW_DELAY/NAND_TPROG_DELAY/NAND_TBERS_DELAY<41>ĸ<EFBFBD><C4B8><EFBFBD>ʱ,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
||||
//2.<2E><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>ʱ<EFBFBD>䲻<EFBFBD><E4B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>ɳ<EFBFBD><C9B3><EFBFBD>
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
#define NAND_MAX_PAGE_SIZE 4096 //<2F><><EFBFBD><EFBFBD>NAND FLASH<53><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PAGE<47><45>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPARE<52><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>4096<39>ֽ<EFBFBD>
|
||||
#define NAND_ECC_SECTOR_SIZE 512 //ִ<><D6B4>ECC<43><43><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>Ԫ<EFBFBD><D4AA>С<EFBFBD><D0A1>Ĭ<EFBFBD><C4AC>512<31>ֽ<EFBFBD>
|
||||
|
||||
|
||||
//NAND FLASH<53><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
#define NAND_TADL_DELAY 30 //tADL<44>ȴ<EFBFBD><C8B4>ӳ<EFBFBD>,<2C><><EFBFBD><EFBFBD>70ns
|
||||
#define NAND_TWHR_DELAY 25 //tWHR<48>ȴ<EFBFBD><C8B4>ӳ<EFBFBD>,<2C><><EFBFBD><EFBFBD>60ns
|
||||
#define NAND_TRHW_DELAY 35 //tRHW<48>ȴ<EFBFBD><C8B4>ӳ<EFBFBD>,<2C><><EFBFBD><EFBFBD>100ns
|
||||
#define NAND_TPROG_DELAY 200 //tPROG<4F>ȴ<EFBFBD><C8B4>ӳ<EFBFBD>,<2C><><EFBFBD><EFBFBD>ֵ200us,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ700us
|
||||
#define NAND_TBERS_DELAY 4 //tBERS<52>ȴ<EFBFBD><C8B4>ӳ<EFBFBD>,<2C><><EFBFBD><EFBFBD>ֵ3.5ms,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ10ms
|
||||
|
||||
|
||||
//NAND<4E><44><EFBFBD>Խṹ<D4BD><E1B9B9>
|
||||
typedef struct
|
||||
{
|
||||
u16 page_totalsize; //ÿҳ<C3BF>ܴ<EFBFBD>С<EFBFBD><D0A1>main<69><6E><EFBFBD><EFBFBD>spare<72><65><EFBFBD>ܺ<EFBFBD>
|
||||
u16 page_mainsize; //ÿҳ<C3BF><D2B3>main<69><6E><EFBFBD><EFBFBD>С
|
||||
u16 page_sparesize; //ÿҳ<C3BF><D2B3>spare<72><65><EFBFBD><EFBFBD>С
|
||||
u8 block_pagenum; //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>
|
||||
u16 plane_blocknum; //ÿ<><C3BF>plane<6E><65><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>
|
||||
u16 block_totalnum; //<2F>ܵĿ<DCB5><C4BF><EFBFBD><EFBFBD><EFBFBD>
|
||||
u16 good_blocknum; //<2F>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>
|
||||
u16 valid_blocknum; //<2F><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD>ļ<EFBFBD>ϵͳʹ<CDB3>õĺÿ<C4BA><C3BF><EFBFBD><EFBFBD><EFBFBD>)
|
||||
u32 id; //NAND FLASH ID
|
||||
u16 *lut; //LUT<55><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
|
||||
u32 ecc_hard; //Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ECCֵ
|
||||
u32 ecc_hdbuf[NAND_MAX_PAGE_SIZE/NAND_ECC_SECTOR_SIZE];//ECCӲ<43><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 ecc_rdbuf[NAND_MAX_PAGE_SIZE/NAND_ECC_SECTOR_SIZE];//ECC<43><43>ȡ<EFBFBD><C8A1>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}nand_attriute;
|
||||
|
||||
extern nand_attriute nand_dev; //nand<6E><64>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
|
||||
#define NAND_RB PDin(6) //NAND Flash<73><68><EFBFBD><EFBFBD>/æ<><C3A6><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
|
||||
#define NAND_ADDRESS 0X80000000 //nand flash<73>ķ<EFBFBD><C4B7>ʵ<EFBFBD>ַ,<2C><>NCE3,<2C><>ַΪ:0X8000 0000
|
||||
#define NAND_CMD 1<<16 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define NAND_ADDR 1<<17 //<2F><><EFBFBD>͵<EFBFBD>ַ
|
||||
|
||||
//NAND FLASH<53><48><EFBFBD><EFBFBD>
|
||||
#define NAND_READID 0X90 //<2F><>IDָ<44><D6B8>
|
||||
#define NAND_FEATURE 0XEF //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
#define NAND_RESET 0XFF //<2F><>λNAND
|
||||
#define NAND_READSTA 0X70 //<2F><>״̬
|
||||
#define NAND_AREA_A 0X00
|
||||
#define NAND_AREA_TRUE1 0X30
|
||||
#define NAND_WRITE0 0X80
|
||||
#define NAND_WRITE_TURE1 0X10
|
||||
#define NAND_ERASE0 0X60
|
||||
#define NAND_ERASE1 0XD0
|
||||
#define NAND_MOVEDATA_CMD0 0X00
|
||||
#define NAND_MOVEDATA_CMD1 0X35
|
||||
#define NAND_MOVEDATA_CMD2 0X85
|
||||
#define NAND_MOVEDATA_CMD3 0X10
|
||||
|
||||
//NAND FLASH״̬
|
||||
#define NSTA_READY 0X40 //nand<6E>Ѿ<EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD>
|
||||
#define NSTA_ERROR 0X01 //nand<6E><64><EFBFBD><EFBFBD>
|
||||
#define NSTA_TIMEOUT 0X02 //<2F><>ʱ
|
||||
#define NSTA_ECC1BITERR 0X03 //ECC 1bit<69><74><EFBFBD><EFBFBD>
|
||||
#define NSTA_ECC2BITERR 0X04 //ECC 2bit<69><74><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>
|
||||
|
||||
|
||||
//NAND FLASH<53>ͺźͶ<C5BA>Ӧ<EFBFBD><D3A6>ID<49><44>
|
||||
#define MT29F4G08ABADA 0XDC909556 //MT29F4G08ABADA
|
||||
#define MT29F16G08ABABA 0X48002689 //MT29F16G08ABABA
|
||||
|
||||
|
||||
|
||||
u8 NAND_Init(void);
|
||||
u8 NAND_ModeSet(u8 mode);
|
||||
u32 NAND_ReadID(void);
|
||||
u8 NAND_ReadStatus(void);
|
||||
u8 NAND_WaitForReady(void);
|
||||
u8 NAND_Reset(void);
|
||||
u8 NAND_WaitRB(vu8 rb);
|
||||
void NAND_Delay(vu32 i);
|
||||
u8 NAND_ReadPage(u32 PageNum,u16 ColNum,u8 *pBuffer,u16 NumByteToRead);
|
||||
u8 NAND_ReadPageComp(u32 PageNum,u16 ColNum,u32 CmpVal,u16 NumByteToRead,u16 *NumByteEqual);
|
||||
u8 NAND_WritePage(u32 PageNum,u16 ColNum,u8 *pBuffer,u16 NumByteToWrite);
|
||||
u8 NAND_WritePageConst(u32 PageNum,u16 ColNum,u32 cval,u16 NumByteToWrite);
|
||||
u8 NAND_CopyPageWithoutWrite(u32 Source_PageNum,u32 Dest_PageNum);
|
||||
u8 NAND_CopyPageWithWrite(u32 Source_PageNum,u32 Dest_PageNum,u16 ColNum,u8 *pBuffer,u16 NumByteToWrite);
|
||||
u8 NAND_ReadSpare(u32 PageNum,u16 ColNum,u8 *pBuffer,u16 NumByteToRead);
|
||||
u8 NAND_WriteSpare(u32 PageNum,u16 ColNum,u8 *pBuffer,u16 NumByteToRead);
|
||||
u8 NAND_EraseBlock(u32 BlockNum);
|
||||
void NAND_EraseChip(void);
|
||||
|
||||
u16 NAND_ECC_Get_OE(u8 oe,u32 eccval);
|
||||
u8 NAND_ECC_Correction(u8* data_buf,u32 eccrd,u32 ecccl);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,203 +0,0 @@
|
||||
#include "nandtester.h"
|
||||
#include "nand.h"
|
||||
#include "ftl.h"
|
||||
#include "string.h"
|
||||
#include "usart.h"
|
||||
#include "malloc.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//NAND FLASH USMART<52><54><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/15
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
//<2F><>NANDijһҳд<D2B3><D0B4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//pagenum:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ַ
|
||||
//colnum:Ҫд<D2AA><D0B4><EFBFBD>Ŀ<EFBFBD>ʼ<EFBFBD>е<EFBFBD>ַ(ҳ<>ڵ<EFBFBD>ַ)
|
||||
//writebytes:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><D0A1>MT29F16G<36><47><EFBFBD><EFBFBD>Ϊ4320<32><30>MT29F4G<34><47><EFBFBD><EFBFBD>Ϊ2112
|
||||
u8 test_writepage(u32 pagenum,u16 colnum,u16 writebytes)
|
||||
{
|
||||
u8 *pbuf;
|
||||
u8 sta=0;
|
||||
u16 i=0;
|
||||
pbuf=mymalloc(SRAMIN,5000);
|
||||
for(i=0;i<writebytes;i++)//<><D7BC>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
{
|
||||
pbuf[i]=i;
|
||||
}
|
||||
sta=NAND_WritePage(pagenum,colnum,pbuf,writebytes); //<2F><>nandд<64><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
myfree(SRAMIN,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||
return sta;
|
||||
}
|
||||
|
||||
//<2F><>ȡNANDijһҳָ<D2B3><D6B8><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//pagenum:Ҫ<><D2AA>ȡ<EFBFBD><C8A1>ҳ<EFBFBD><D2B3>ַ
|
||||
//colnum:Ҫ<><D2AA>ȡ<EFBFBD>Ŀ<EFBFBD>ʼ<EFBFBD>е<EFBFBD>ַ(ҳ<>ڵ<EFBFBD>ַ)
|
||||
//readbytes:Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><D0A1>MT29F16G<36><47><EFBFBD><EFBFBD>Ϊ4320<32><30>MT29F4G<34><47><EFBFBD><EFBFBD>Ϊ2112
|
||||
u8 test_readpage(u32 pagenum,u16 colnum,u16 readbytes)
|
||||
{
|
||||
u8 *pbuf;
|
||||
u8 sta=0;
|
||||
u16 i=0;
|
||||
pbuf=mymalloc(SRAMIN,5000);
|
||||
sta=NAND_ReadPage(pagenum,colnum,pbuf,readbytes); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
if(sta==0)//<2F><>ȡ<EFBFBD>ɹ<EFBFBD>
|
||||
{
|
||||
printf("read page data is:\r\n");
|
||||
for(i=0;i<readbytes;i++)
|
||||
{
|
||||
printf("%x ",pbuf[i]); //<2F><><EFBFBD>ڴ<EFBFBD>ӡ<EFBFBD><D3A1>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
printf("\r\nend\r\n");
|
||||
}
|
||||
myfree(SRAMIN,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||
return sta;
|
||||
}
|
||||
|
||||
//<2F><>һҳ<D2BB><D2B3><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һҳ,<2C><>д<EFBFBD><D0B4>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//ע<><D7A2>:Դҳ<D4B4><D2B3>Ŀ<EFBFBD><C4BF>ҳҪ<D2B3><D2AA>ͬһ<CDAC><D2BB>Plane<6E>ڣ<EFBFBD>(ͬΪ<CDAC><CEAA><EFBFBD><EFBFBD>/ͬΪż<CEAA><C5BC>)
|
||||
//spnum:Դҳ<D4B4><D2B3>ַ
|
||||
//epnum:Ŀ<><C4BF>ҳ<EFBFBD><D2B3>ַ
|
||||
//colnum:Ҫд<D2AA><D0B4><EFBFBD>Ŀ<EFBFBD>ʼ<EFBFBD>е<EFBFBD>ַ(ҳ<>ڵ<EFBFBD>ַ)
|
||||
//writebytes:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>ҳ<EFBFBD><D2B3>С
|
||||
u8 test_copypageandwrite(u32 spnum,u32 dpnum,u16 colnum,u16 writebytes)
|
||||
{
|
||||
u8 *pbuf;
|
||||
u8 sta=0;
|
||||
u16 i=0;
|
||||
pbuf=mymalloc(SRAMIN,5000);
|
||||
for(i=0;i<writebytes;i++)//<><D7BC>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>0X80<38><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
{
|
||||
pbuf[i]=i+0X80;
|
||||
}
|
||||
sta=NAND_CopyPageWithWrite(spnum,dpnum,colnum,pbuf,writebytes); //<2F><>nandд<64><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
myfree(SRAMIN,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||
return sta;
|
||||
}
|
||||
|
||||
//<2F><>ȡNANDijһҳSpare<72><65>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//pagenum:Ҫ<><D2AA>ȡ<EFBFBD><C8A1>ҳ<EFBFBD><D2B3>ַ
|
||||
//colnum:Ҫ<><D2AA>ȡ<EFBFBD><C8A1>spare<72><65><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
//readbytes:Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><D0A1>MT29F16G<36><47><EFBFBD><EFBFBD>Ϊ4320<32><30>MT29F4G<34><47><EFBFBD><EFBFBD>Ϊ2112
|
||||
u8 test_readspare(u32 pagenum,u16 colnum,u16 readbytes)
|
||||
{
|
||||
u8 *pbuf;
|
||||
u8 sta=0;
|
||||
u16 i=0;
|
||||
pbuf=mymalloc(SRAMIN,512);
|
||||
sta=NAND_ReadSpare(pagenum,colnum,pbuf,readbytes); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
if(sta==0)//<2F><>ȡ<EFBFBD>ɹ<EFBFBD>
|
||||
{
|
||||
printf("read spare data is:\r\n");
|
||||
for(i=0;i<readbytes;i++)
|
||||
{
|
||||
printf("%x ",pbuf[i]); //<2F><><EFBFBD>ڴ<EFBFBD>ӡ<EFBFBD><D3A1>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
printf("\r\nend\r\n");
|
||||
}
|
||||
myfree(SRAMIN,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||
return sta;
|
||||
}
|
||||
|
||||
//<2F><>ָ<EFBFBD><D6B8>λ<EFBFBD>ÿ<EFBFBD>ʼ,<2C><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>NAND,ÿ<><C3BF>BLOCK<43>ĵ<EFBFBD>һ<EFBFBD><D2BB>page<67><65>ǰ5<C7B0><35><EFBFBD>ֽ<EFBFBD>
|
||||
//sblock:ָ<><D6B8><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>block<63><6B><EFBFBD><EFBFBD>
|
||||
void test_readallblockinfo(u32 sblock)
|
||||
{
|
||||
u8 j=0;
|
||||
u32 i=0;
|
||||
u8 sta;
|
||||
u8 buffer[5];
|
||||
for(i=sblock;i<nand_dev.block_totalnum;i++)
|
||||
{
|
||||
printf("block %d info:",i);
|
||||
sta=NAND_ReadSpare(i*nand_dev.block_pagenum,0,buffer,5);//<2F><>ȡÿ<C8A1><C3BF>block,<2C><>һ<EFBFBD><D2BB>page<67><65>ǰ5<C7B0><35><EFBFBD>ֽ<EFBFBD>
|
||||
if(sta)printf("failed\r\n");
|
||||
for(j=0;j<5;j++)
|
||||
{
|
||||
printf("%x ",buffer[j]);
|
||||
}
|
||||
printf("\r\n");
|
||||
}
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//FTL<54><4C><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
|
||||
|
||||
//<2F><>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ,д<><D0B4>seccnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//secx:<3A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//secsize:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
//seccnt:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 test_ftlwritesectors(u32 secx,u16 secsize,u16 seccnt)
|
||||
{
|
||||
u8 *pbuf;
|
||||
u8 sta=0;
|
||||
u32 i=0;
|
||||
pbuf=mymalloc(SRAMIN,secsize*seccnt);
|
||||
for(i=0;i<secsize*seccnt;i++) //<><D7BC>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
{
|
||||
pbuf[i]=i;
|
||||
}
|
||||
sta=FTL_WriteSectors(pbuf,secx,secsize,seccnt); //<2F><>nandд<64><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
myfree(SRAMIN,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||
return sta;
|
||||
}
|
||||
|
||||
|
||||
//<2F><>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ,<2C><><EFBFBD><EFBFBD>seccnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//secx:<3A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//secsize:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
||||
//seccnt:Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 test_ftlreadsectors(u32 secx,u16 secsize,u16 seccnt)
|
||||
{
|
||||
u8 *pbuf;
|
||||
u8 sta=0;
|
||||
u32 i=0;
|
||||
pbuf=mymalloc(SRAMIN,secsize*seccnt);
|
||||
sta=FTL_ReadSectors(pbuf,secx,secsize,seccnt); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
if(sta==0)
|
||||
{
|
||||
printf("read sec %d data is:\r\n",secx);
|
||||
for(i=0;i<secsize*seccnt;i++) //<><D7BC>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
{
|
||||
printf("%x ",pbuf[i]); //<2F><><EFBFBD>ڴ<EFBFBD>ӡ<EFBFBD><D3A1>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
printf("\r\nend\r\n");
|
||||
}
|
||||
myfree(SRAMIN,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||
return sta;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
#ifndef __NANDTESTER_H
|
||||
#define __NANDTESTER_H
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//NAND FLASH USMART<52><54><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/15
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
u8 test_writepage(u32 pagenum,u16 colnum,u16 writebytes);
|
||||
u8 test_readpage(u32 pagenum,u16 colnum,u16 readbytes);
|
||||
u8 test_copypageandwrite(u32 spnum,u32 dpnum,u16 colnum,u16 writebytes);
|
||||
u8 test_readspare(u32 pagenum,u16 colnum,u16 readbytes);
|
||||
void test_readallblockinfo(u32 sblock);
|
||||
u8 test_ftlwritesectors(u32 secx,u16 secsize,u16 seccnt);
|
||||
u8 test_ftlreadsectors(u32 secx,u16 secsize,u16 seccnt);
|
||||
|
||||
#endif
|
||||
398
HARDWARE/SDIO/sdio.c
Normal file
398
HARDWARE/SDIO/sdio.c
Normal file
@@ -0,0 +1,398 @@
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// SD<53><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><>: <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// <20><>ǰ<EFBFBD>汾: V1.0
|
||||
// <20><>ʷ<EFBFBD>汾:
|
||||
// - V1.0: (2018-08-04) SD<53><44><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>Ͷ<EFBFBD>д
|
||||
// <20><><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>: <20><><EFBFBD><EFBFBD>STM32F429+CycloneIV<49><56><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>塢LZE_ST_LINK2
|
||||
// ˵ <20><>:
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
#include "sdio.h"
|
||||
#include "string.h"
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
SD_HandleTypeDef SDCARD_Handler; // SD<53><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
HAL_SD_CardInfoTypedef SDCardInfo; // SD<53><44><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
DMA_HandleTypeDef SDTxDMAHandler,SDRxDMAHandler; // SD<53><44>DMA<4D><41><EFBFBD>ͺͽ<CDBA><CDBD>վ<EFBFBD><D5BE><EFBFBD>
|
||||
|
||||
// SD_ReadDisk/SD_WriteDisk<73><6B><EFBFBD><EFBFBD>ר<EFBFBD><D7A8>buf,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>4<EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,
|
||||
// <20><>Ҫ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>4<EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD><EFBFBD><EFBFBD>.
|
||||
__align(4) u8 SDIO_DATA_BUFFER[512];
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_Init(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SD<53><44><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: 0 <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_Init(void)
|
||||
{
|
||||
u8 SD_Error;
|
||||
|
||||
// <20><>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1>ʱ<EFBFBD>Ӳ<EFBFBD><D3B2>ܴ<EFBFBD><DCB4><EFBFBD>400KHZ
|
||||
SDCARD_Handler.Instance=SDIO;
|
||||
SDCARD_Handler.Init.ClockEdge=SDIO_CLOCK_EDGE_RISING; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDCARD_Handler.Init.ClockBypass=SDIO_CLOCK_BYPASS_DISABLE; // <20><>ʹ<EFBFBD><CAB9>bypassģʽ<C4A3><CABD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>HCLK<4C><4B><EFBFBD>з<EFBFBD>Ƶ<EFBFBD>õ<EFBFBD>SDIO_CK
|
||||
SDCARD_Handler.Init.ClockPowerSave=SDIO_CLOCK_POWER_SAVE_DISABLE; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ر<EFBFBD>ʱ<EFBFBD>ӵ<EFBFBD>Դ
|
||||
SDCARD_Handler.Init.BusWide=SDIO_BUS_WIDE_1B; // 1λ<31><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDCARD_Handler.Init.HardwareFlowControl=SDIO_HARDWARE_FLOW_CONTROL_DISABLE; // <20>ر<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDCARD_Handler.Init.ClockDiv=SDIO_TRANSFER_CLK_DIV; // SD<53><44><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>25MHZ
|
||||
|
||||
SD_Error=HAL_SD_Init(&SDCARD_Handler,&SDCardInfo);
|
||||
if(SD_Error!=SD_OK)
|
||||
return 1;
|
||||
|
||||
SD_Error=HAL_SD_WideBusOperation_Config(&SDCARD_Handler,SDIO_BUS_WIDE_4B); // ʹ<>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
if(SD_Error!=SD_OK)
|
||||
return 2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void HAL_SD_MspInit(SD_HandleTypeDef *hsd)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SDMMC<4D>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʹ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>DMA<4D><41><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: SD_HandleTypeDef *hsd<73><64>SD<53><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ᱻHAL_SD_Init()<29><><EFBFBD><EFBFBD>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void HAL_SD_MspInit(SD_HandleTypeDef *hsd)
|
||||
{
|
||||
DMA_HandleTypeDef TxDMAHandler,RxDMAHandler;
|
||||
GPIO_InitTypeDef GPIO_Initure;
|
||||
|
||||
__HAL_RCC_SDIO_CLK_ENABLE(); // ʹ<><CAB9>SDIOʱ<4F><CAB1>
|
||||
__HAL_RCC_DMA2_CLK_ENABLE(); // ʹ<><CAB9>DMA2ʱ<32><CAB1>
|
||||
__HAL_RCC_GPIOC_CLK_ENABLE(); // ʹ<><CAB9>GPIOCʱ<43><CAB1>
|
||||
__HAL_RCC_GPIOD_CLK_ENABLE(); // ʹ<><CAB9>GPIODʱ<44><CAB1>
|
||||
|
||||
// PC8->SDIO_D0, PC9->SDIO_D1, PC10->SDIO_D2, PC11->SDIO_D3, PC12->SDIO_CK
|
||||
GPIO_Initure.Pin=GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
|
||||
GPIO_Initure.Mode=GPIO_MODE_AF_PP; // <20><><EFBFBD>츴<EFBFBD><ECB8B4>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; // <20><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; // <20><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Alternate=GPIO_AF12_SDIO; // <20><><EFBFBD><EFBFBD>ΪSDIO
|
||||
HAL_GPIO_Init(GPIOC,&GPIO_Initure); // <20><>ʼ<EFBFBD><CABC>
|
||||
|
||||
GPIO_Initure.Pin=GPIO_PIN_2; // PD2->SDIO_CMD
|
||||
HAL_GPIO_Init(GPIOD,&GPIO_Initure); // <20><>ʼ<EFBFBD><CABC>
|
||||
|
||||
#if (SD_DMA_MODE==1) // ʹ<><CAB9>DMAģʽ
|
||||
HAL_NVIC_SetPriority(SDMMC1_IRQn,2,0); // <20><><EFBFBD><EFBFBD>SDMMC1<43>жϣ<D0B6><CFA3><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>0
|
||||
HAL_NVIC_EnableIRQ(SDMMC1_IRQn); // ʹ<><CAB9>SDMMC1<43>ж<EFBFBD>
|
||||
|
||||
// <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>DMA
|
||||
SDRxDMAHandler.Instance=DMA2_Stream3;
|
||||
SDRxDMAHandler.Init.Channel=DMA_CHANNEL_4;
|
||||
SDRxDMAHandler.Init.Direction=DMA_PERIPH_TO_MEMORY;
|
||||
SDRxDMAHandler.Init.PeriphInc=DMA_PINC_DISABLE;
|
||||
SDRxDMAHandler.Init.MemInc=DMA_MINC_ENABLE;
|
||||
SDRxDMAHandler.Init.PeriphDataAlignment=DMA_PDATAALIGN_WORD;
|
||||
SDRxDMAHandler.Init.MemDataAlignment=DMA_MDATAALIGN_WORD;
|
||||
SDRxDMAHandler.Init.Mode=DMA_PFCTRL;
|
||||
SDRxDMAHandler.Init.Priority=DMA_PRIORITY_VERY_HIGH;
|
||||
SDRxDMAHandler.Init.FIFOMode=DMA_FIFOMODE_ENABLE;
|
||||
SDRxDMAHandler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;
|
||||
SDRxDMAHandler.Init.MemBurst=DMA_MBURST_INC4;
|
||||
SDRxDMAHandler.Init.PeriphBurst=DMA_PBURST_INC4;
|
||||
|
||||
__HAL_LINKDMA(hsd, hdmarx, SDRxDMAHandler); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA<4D><41>SD<53><44><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
HAL_DMA_DeInit(&SDRxDMAHandler);
|
||||
HAL_DMA_Init(&SDRxDMAHandler); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA
|
||||
|
||||
// <20><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>DMA
|
||||
SDTxDMAHandler.Instance=DMA2_Stream6;
|
||||
SDTxDMAHandler.Init.Channel=DMA_CHANNEL_4;
|
||||
SDTxDMAHandler.Init.Direction=DMA_MEMORY_TO_PERIPH;
|
||||
SDTxDMAHandler.Init.PeriphInc=DMA_PINC_DISABLE;
|
||||
SDTxDMAHandler.Init.MemInc=DMA_MINC_ENABLE;
|
||||
SDTxDMAHandler.Init.PeriphDataAlignment=DMA_PDATAALIGN_WORD;
|
||||
SDTxDMAHandler.Init.MemDataAlignment=DMA_MDATAALIGN_WORD;
|
||||
SDTxDMAHandler.Init.Mode=DMA_PFCTRL;
|
||||
SDTxDMAHandler.Init.Priority=DMA_PRIORITY_VERY_HIGH;
|
||||
SDTxDMAHandler.Init.FIFOMode=DMA_FIFOMODE_ENABLE;
|
||||
SDTxDMAHandler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;
|
||||
SDTxDMAHandler.Init.MemBurst=DMA_MBURST_INC4;
|
||||
SDTxDMAHandler.Init.PeriphBurst=DMA_PBURST_INC4;
|
||||
|
||||
__HAL_LINKDMA(hsd, hdmatx, SDTxDMAHandler);// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA<4D><41>SD<53><44><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
HAL_DMA_DeInit(&SDTxDMAHandler);
|
||||
HAL_DMA_Init(&SDTxDMAHandler); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA
|
||||
|
||||
|
||||
HAL_NVIC_SetPriority(DMA2_Stream3_IRQn, 3, 0); // <20><><EFBFBD><EFBFBD>DMA<4D>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
||||
HAL_NVIC_EnableIRQ(DMA2_Stream3_IRQn);
|
||||
HAL_NVIC_SetPriority(DMA2_Stream6_IRQn, 3, 0); // <20><><EFBFBD><EFBFBD>DMA<4D>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
||||
HAL_NVIC_EnableIRQ(DMA2_Stream6_IRQn);
|
||||
#endif
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_GetCardInfo(HAL_SD_CardInfoTypedef *cardinfo)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: HAL_SD_CardInfoTypedef *cardinfo<66><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>洢<EFBFBD><E6B4A2>
|
||||
// <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD>״̬
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_GetCardInfo(HAL_SD_CardInfoTypedef *cardinfo)
|
||||
{
|
||||
u8 sta;
|
||||
sta=HAL_SD_Get_CardInfo(&SDCARD_Handler,cardinfo);
|
||||
return sta;
|
||||
}
|
||||
|
||||
#if (SD_DMA_MODE==1) // DMAģʽ
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_ReadBlocks_DMA(uint32_t *buf,uint64_t sector,uint32_t blocksize,uint32_t cnt)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ͨ<><CDA8>DMA<4D><41>ȡSD<53><44>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: uint32_t *buf<75><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// uint64_t sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// uint32_t blocksize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(һ<>㶼<EFBFBD><E3B6BC>512<31>ֽ<EFBFBD>)
|
||||
// uint32_t cnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD>״̬;0,<2C><><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_ReadBlocks_DMA(uint32_t *buf,uint64_t sector,uint32_t blocksize,uint32_t cnt)
|
||||
{
|
||||
u8 err=0;
|
||||
err=HAL_SD_ReadBlocks_DMA(&SDCARD_Handler,buf,sector,blocksize,cnt); // ͨ<><CDA8>DMA<4D><41>ȡSD<53><44>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(err==0)// <20><>ȡ<EFBFBD>ɹ<EFBFBD>
|
||||
err=HAL_SD_CheckReadOperation(&SDCARD_Handler,(uint32_t)SD_TIMEOUT);// <20>ȴ<EFBFBD><C8B4><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
return err;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_ReadBlocks_DMA(uint32_t *buf,uint64_t sector,uint32_t blocksize,uint32_t cnt)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: дSD<53><44>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: uint32_t *buf<75><66>д<EFBFBD><D0B4><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// uint64_t sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// uint32_t blocksize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(һ<>㶼<EFBFBD><E3B6BC>512<31>ֽ<EFBFBD>)
|
||||
// uint32_t cnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD>״̬;0,<2C><><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_WriteBlocks_DMA(uint32_t *buf,uint64_t sector,uint32_t blocksize,uint32_t cnt)
|
||||
{
|
||||
u8 err=0;
|
||||
err=HAL_SD_WriteBlocks_DMA(&SDCARD_Handler,buf,sector,blocksize,cnt); // ͨ<><CDA8>DMAдSD<53><44>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(err==0)// д<>ɹ<EFBFBD>
|
||||
err=HAL_SD_CheckWriteOperation(&SDCARD_Handler,(uint32_t)SD_TIMEOUT); // <20>ȴ<EFBFBD><C8B4><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>/
|
||||
return err;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_ReadDisk(u8* buf,u32 sector,u32 cnt)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>SD<53><44>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8* buf<75><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// u32 sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// uu32 cnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD>״̬;0,<2C><><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_ReadDisk(u8* buf,u32 sector,u32 cnt)
|
||||
{
|
||||
u8 sta=SD_OK;
|
||||
long long lsector=sector;
|
||||
u8 n;
|
||||
if(SDCardInfo.CardType!=STD_CAPACITY_SD_CARD_V1_1)
|
||||
lsector<<=9;
|
||||
if((u32)buf%4!=0)
|
||||
{
|
||||
for(n=0;n<cnt;n++)
|
||||
{
|
||||
sta=SD_ReadBlocks_DMA((uint32_t*)SDIO_DATA_BUFFER,lsector+512*n,512,1);
|
||||
memcpy(buf,SDIO_DATA_BUFFER,512);
|
||||
buf+=512;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sta=SD_ReadBlocks_DMA((uint32_t*)buf,lsector, 512,cnt);
|
||||
}
|
||||
return sta;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_WriteDisk(u8 *buf,u32 sector,u32 cnt)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: дSD<53><44>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8* buf<75><66>д<EFBFBD><D0B4><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// u32 sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// uu32 cnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><><EFBFBD><EFBFBD>״̬;0,<2C><><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_WriteDisk(u8 *buf,u32 sector,u32 cnt)
|
||||
{
|
||||
u8 sta=SD_OK;
|
||||
long long lsector=sector;
|
||||
u8 n;
|
||||
if(SDCardInfo.CardType!=STD_CAPACITY_SD_CARD_V1_1)
|
||||
lsector<<=9;
|
||||
if((u32)buf%4!=0)
|
||||
{
|
||||
for(n=0;n<cnt;n++)
|
||||
{
|
||||
memcpy(SDIO_DATA_BUFFER,buf,512);
|
||||
sta=SD_WriteBlocks_DMA((uint32_t*)SDIO_DATA_BUFFER,lsector+512*n,512,1);// <20><><EFBFBD><EFBFBD>sector<6F><72>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
buf+=512;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sta=SD_WriteBlocks_DMA((uint32_t*)buf,lsector,512,cnt);// <20><><EFBFBD><EFBFBD>sector<6F><72>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
}
|
||||
return sta;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void SDMMC1_IRQHandler(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SDMMC1<43>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void SDMMC1_IRQHandler(void)
|
||||
{
|
||||
HAL_SD_IRQHandler(&SDCARD_Handler);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void DMA2_Stream6_IRQHandler(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: DMA2<41><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>6<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void DMA2_Stream6_IRQHandler(void)
|
||||
{
|
||||
HAL_DMA_IRQHandler(SDCARD_Handler.hdmatx);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void DMA2_Stream3_IRQHandler(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: DMA2<41><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void DMA2_Stream3_IRQHandler(void)
|
||||
{
|
||||
HAL_DMA_IRQHandler(SDCARD_Handler.hdmarx);
|
||||
}
|
||||
#else // <20><>ѵģʽ
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_ReadDisk(u8* buf,u32 sector,u32 cnt)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>SD<53><44>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8* buf<75><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// u32 sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// u32 cnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: 0,<2C><><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_ReadDisk(u8* buf,u32 sector,u32 cnt)
|
||||
{
|
||||
u8 sta=SD_OK;
|
||||
long long lsector=sector;
|
||||
u8 n;
|
||||
lsector<<=9;
|
||||
__disable_irq();// <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>ж<EFBFBD>(POLLINGģʽ,<2C>Ͻ<EFBFBD><CFBD>жϴ<D0B6><CFB4><EFBFBD>SDIO<49><4F>д<EFBFBD><D0B4><EFBFBD><EFBFBD>!!!)
|
||||
if((u32)buf%4!=0)
|
||||
{
|
||||
for(n=0;n<cnt;n++)
|
||||
{
|
||||
sta=HAL_SD_ReadBlocks(&SDCARD_Handler,(uint32_t*)SDIO_DATA_BUFFER,lsector+512*n,512,1);// <20><><EFBFBD><EFBFBD>sector<6F>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
memcpy(buf,SDIO_DATA_BUFFER,512);
|
||||
buf+=512;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sta=HAL_SD_ReadBlocks(&SDCARD_Handler,(uint32_t*)buf,lsector,512,cnt);// <20><><EFBFBD><EFBFBD>sector<6F>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
__enable_irq();// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
return sta;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SD_WriteDisk(u8 *buf,u32 sector,u32 cnt)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: дSD<53><44>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8* buf<75><66>д<EFBFBD><D0B4><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// u32 sector<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// u32 cnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: 0,<2C><><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SD_WriteDisk(u8 *buf,u32 sector,u32 cnt)
|
||||
{
|
||||
u8 sta=SD_OK;
|
||||
long long lsector=sector;
|
||||
u8 n;
|
||||
lsector<<=9;
|
||||
__disable_irq();// <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>ж<EFBFBD>(POLLINGģʽ,<2C>Ͻ<EFBFBD><CFBD>жϴ<D0B6><CFB4><EFBFBD>SDIO<49><4F>д<EFBFBD><D0B4><EFBFBD><EFBFBD>!!!)
|
||||
if((u32)buf%4!=0)
|
||||
{
|
||||
for(n=0;n<cnt;n++)
|
||||
{
|
||||
memcpy(SDIO_DATA_BUFFER,buf,512);
|
||||
sta=HAL_SD_WriteBlocks(&SDCARD_Handler,(uint32_t*)SDIO_DATA_BUFFER,lsector+512*n,512,1);// <20><><EFBFBD><EFBFBD>sector<6F><72>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
buf+=512;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sta=HAL_SD_WriteBlocks(&SDCARD_Handler,(uint32_t*)buf,lsector,512,cnt);// <20><><EFBFBD><EFBFBD>sector<6F><72>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
}
|
||||
__enable_irq();// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
return sta;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
49
HARDWARE/SDIO/sdio.h
Normal file
49
HARDWARE/SDIO/sdio.h
Normal file
@@ -0,0 +1,49 @@
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// SD<53><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
|
||||
// <20><> <20><>: <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// <20><>ǰ<EFBFBD>汾: V1.0
|
||||
// <20><>ʷ<EFBFBD>汾:
|
||||
// - V1.0: (2018-08-04) SD<53><44><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>Ͷ<EFBFBD>д
|
||||
// <20><><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>: <20><><EFBFBD><EFBFBD>STM32F429+CycloneIV<49><56><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>塢LZE_ST_LINK2
|
||||
// ˵ <20><>:
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
#ifndef _SDIO_H
|
||||
#define _SDIO_H
|
||||
#include "stm32f429_winner.h"
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// <20>궨<EFBFBD><EAB6A8>
|
||||
//-----------------------------------------------------------------
|
||||
#define SD_TIMEOUT ((uint32_t)100000000) // <20><>ʱʱ<CAB1><CAB1>
|
||||
#define SD_DMA_MODE 0 // 1<><31>DMAģʽ<C4A3><CABD>0<EFBFBD><30><EFBFBD><EFBFBD>ѯģʽ
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
extern SD_HandleTypeDef SDCARD_Handler; // SD<53><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
extern HAL_SD_CardInfoTypedef SDCardInfo; // SD<53><44><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
extern u8 SD_Init(void);
|
||||
extern u8 SD_GetCardInfo(HAL_SD_CardInfoTypedef *cardinfo);
|
||||
extern u8 SD_ReadDisk(u8* buf,u32 sector,u32 cnt);
|
||||
extern u8 SD_WriteDisk(u8 *buf,u32 sector,u32 cnt);
|
||||
extern u8 SD_ReadBlocks_DMA(uint32_t *buf,uint64_t sector,uint32_t blocksize,uint32_t cnt);
|
||||
extern u8 SD_WriteBlocks_DMA(uint32_t *buf,uint64_t sector,uint32_t blocksize,uint32_t cnt);
|
||||
|
||||
#endif
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
@@ -1,116 +1,177 @@
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// SDRAM<41><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><>: <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// <20><>ǰ<EFBFBD>汾: V1.0
|
||||
// <20><>ʷ<EFBFBD>汾:
|
||||
// - V1.0: (2018-08-04)SDRAM<41><4D>ʼ<EFBFBD><CABC>
|
||||
// <20><><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>: <20><><EFBFBD><EFBFBD>STM32F429+Cyclone IV<49><56><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>塢LZE_ST_LINK2
|
||||
// ˵ <20><>:
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
#include "sdram.h"
|
||||
#include "delay.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32F429<32><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//SDRAM<41><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/6
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
SDRAM_HandleTypeDef SDRAM_Handler; //SDRAM<41><4D><EFBFBD><EFBFBD>
|
||||
|
||||
//SDRAM<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
// void SDRAM_Init(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SDRAM<41><4D>ʼ<EFBFBD><CABC>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void SDRAM_Init(void)
|
||||
{
|
||||
|
||||
FMC_SDRAM_TimingTypeDef SDRAM_Timing;
|
||||
|
||||
SDRAM_Handler.Instance=FMC_SDRAM_DEVICE; //SDRAM<EFBFBD><EFBFBD>BANK5,6
|
||||
SDRAM_Handler.Init.SDBank=FMC_SDRAM_BANK1; //SDRAM<41><4D><EFBFBD><EFBFBD>BANK5<EFBFBD><EFBFBD>
|
||||
SDRAM_Handler.Init.ColumnBitsNumber=FMC_SDRAM_COLUMN_BITS_NUM_9; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Handler.Init.RowBitsNumber=FMC_SDRAM_ROW_BITS_NUM_13; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Handler.Init.MemoryDataWidth=FMC_SDRAM_MEM_BUS_WIDTH_16; //<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>Ϊ16λ
|
||||
SDRAM_Handler.Init.InternalBankNumber=FMC_SDRAM_INTERN_BANKS_NUM_4; //һ<><D2BB>4<EFBFBD><34>BANK
|
||||
SDRAM_Handler.Init.CASLatency=FMC_SDRAM_CAS_LATENCY_3; //CASΪ3
|
||||
SDRAM_Handler.Init.WriteProtection=FMC_SDRAM_WRITE_PROTECTION_DISABLE;//ʧ<><CAA7>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
SDRAM_Handler.Init.SDClockPeriod=FMC_SDRAM_CLOCK_PERIOD_2; //SDRAMʱ<4D><CAB1>ΪHCLK/2=180M/2=90M=11.1ns
|
||||
SDRAM_Handler.Init.ReadBurst=FMC_SDRAM_RBURST_ENABLE; //ʹ<EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD>
|
||||
SDRAM_Handler.Init.ReadPipeDelay=FMC_SDRAM_RPIPE_DELAY_1; //<2F><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ʱ
|
||||
|
||||
SDRAM_Timing.LoadToActiveDelay=2; //<2F><><EFBFBD><EFBFBD>ģʽ<C4A3>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ϊ2<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Timing.ExitSelfRefreshDelay=8; //<2F>˳<EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ϊ8<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Timing.SelfRefreshTime=6; //<2F><>ˢ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ϊ6<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Timing.RowCycleDelay=6; //<2F><>ѭ<EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ϊ6<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Timing.WriteRecoveryTime=2; //<2F>ָ<EFBFBD><EFBFBD>ӳ<EFBFBD>Ϊ2<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Timing.RPDelay=2; //<EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ϊ2<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Timing.RCDDelay=2; //<2F>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ӳ<EFBFBD>Ϊ2<CEAA><32>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
HAL_SDRAM_Init(&SDRAM_Handler,&SDRAM_Timing);
|
||||
|
||||
SDRAM_Initialization_Sequence(&SDRAM_Handler);//<2F><><EFBFBD><EFBFBD>SDRAM<41><4D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
FMC_SDRAM_TimingTypeDef SDRAM_Timing;
|
||||
|
||||
SDRAM_Handler.Instance=FMC_SDRAM_DEVICE; // SDRAM<41>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
SDRAM_Handler.Init.SDBank=FMC_SDRAM_BANK1; // <20><>һ<EFBFBD><D2BB>SDRAM BANK
|
||||
SDRAM_Handler.Init.ColumnBitsNumber=FMC_SDRAM_COLUMN_BITS_NUM_10; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Handler.Init.RowBitsNumber=FMC_SDRAM_ROW_BITS_NUM_13; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Handler.Init.MemoryDataWidth=FMC_SDRAM_MEM_BUS_WIDTH_16; // <EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD>Ϊ16λ
|
||||
SDRAM_Handler.Init.InternalBankNumber=FMC_SDRAM_INTERN_BANKS_NUM_4; // һ<><D2BB>4<EFBFBD><34>BANK
|
||||
SDRAM_Handler.Init.CASLatency=FMC_SDRAM_CAS_LATENCY_3; // CASΪ3
|
||||
SDRAM_Handler.Init.WriteProtection=FMC_SDRAM_WRITE_PROTECTION_DISABLE;// ʧ<><CAA7>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
SDRAM_Handler.Init.SDClockPeriod=FMC_SDRAM_CLOCK_PERIOD_2; // SDRAMʱ<4D><CAB1>ΪHCLK/2=180M/2=90M=11.1ns
|
||||
SDRAM_Handler.Init.ReadBurst=FMC_SDRAM_RBURST_ENABLE; // ʹ<><CAB9>ͻ<EFBFBD><CDBB>
|
||||
SDRAM_Handler.Init.ReadPipeDelay=FMC_SDRAM_RPIPE_DELAY_1; // <20><>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
|
||||
|
||||
SDRAM_Timing.LoadToActiveDelay=2; // <20><><EFBFBD><EFBFBD>ģʽ<C4A3>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ϊ2<CEAA><32>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Timing.ExitSelfRefreshDelay=8; // <20>˳<EFBFBD><CBB3><EFBFBD>ˢ<EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ϊ8<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Timing.SelfRefreshTime=6; // <EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ϊ6<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Timing.RowCycleDelay=6; // <EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ϊ6<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Timing.WriteRecoveryTime=2; // <20>ָ<EFBFBD><EFBFBD>ӳ<EFBFBD>Ϊ2<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Timing.RPDelay=2; // <20><>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ϊ2<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Timing.RCDDelay=2; // <20>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ϊ2<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
HAL_SDRAM_Init(&SDRAM_Handler,&SDRAM_Timing);
|
||||
|
||||
SDRAM_Initialization_Sequence(&SDRAM_Handler);// <20><><EFBFBD><EFBFBD>SDRAM<41><4D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// ˢ<><CBA2>Ƶ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>(<28><>SDCLKƵ<4B>ʼ<EFBFBD><CABC><EFBFBD>),<2C><><EFBFBD>㷽<EFBFBD><E3B7BD>:
|
||||
// COUNT=SDRAMˢ<4D><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>-20=SDRAMˢ<4D><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(us)*SDCLKƵ<4B><C6B5>(Mhz)/<2F><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>SDRAMˢ<4D><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ64ms,SDCLK=180/2=90Mhz,<2C><><EFBFBD><EFBFBD>Ϊ8192(2^13).
|
||||
// <20><><EFBFBD><EFBFBD>,COUNT=64*1000*90/8192-20=683
|
||||
HAL_SDRAM_ProgramRefreshRate(&SDRAM_Handler,683);// <20><><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>Ƶ<EFBFBD><C6B5>
|
||||
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD>SDRAM<41><4D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>SDRAM<41><4D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: SDRAM_HandleTypeDef *hsdram<61><6D>SDRAM<41><4D><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram)
|
||||
{
|
||||
u32 temp=0;
|
||||
//SDRAM<41><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>SDRAM
|
||||
SDRAM_Send_Cmd(0,FMC_SDRAM_CMD_CLK_ENABLE,1,0); //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
delay_us(500); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ200us
|
||||
SDRAM_Send_Cmd(0,FMC_SDRAM_CMD_PALL,1,0); //<2F><><EFBFBD><EFBFBD><EFBFBD>д洢<D0B4><E6B4A2>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>
|
||||
SDRAM_Send_Cmd(0,FMC_SDRAM_CMD_AUTOREFRESH_MODE,8,0);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD>´<EFBFBD><C2B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ģʽ<C4A3>Ĵ<EFBFBD><C4B4><EFBFBD>,SDRAM<41><4D>bit0~bit2Ϊָ<CEAA><D6B8>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>ʵij<CAB5><C4B3>ȣ<EFBFBD>
|
||||
//bit3Ϊָ<CEAA><D6B8>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>ͣ<EFBFBD>bit4~bit6ΪCASֵ<53><D6B5>bit7<74><37>bit8Ϊ<38><CEAA><EFBFBD><EFBFBD>ģʽ
|
||||
//bit9Ϊָ<CEAA><D6B8><EFBFBD><EFBFBD>дͻ<D0B4><CDBB>ģʽ<C4A3><CABD>bit10<31><30>bit11λ<31><CEBB><EFBFBD><EFBFBD>λ
|
||||
temp=(u32)SDRAM_MODEREG_BURST_LENGTH_1 | //<2F><><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:1(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1/2/4/8)
|
||||
SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL | //<2F><><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>)
|
||||
SDRAM_MODEREG_CAS_LATENCY_3 | //<2F><><EFBFBD><EFBFBD>CASֵ:3(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2/3)
|
||||
SDRAM_MODEREG_OPERATING_MODE_STANDARD | //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ģʽ:0,<2C><>ģʽ
|
||||
SDRAM_MODEREG_WRITEBURST_MODE_SINGLE; //<2F><><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB>дģʽ:1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Send_Cmd(0,FMC_SDRAM_CMD_LOAD_MODE,1,temp); //<2F><><EFBFBD><EFBFBD>SDRAM<41><4D>ģʽ<C4A3>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
|
||||
//ˢ<><CBA2>Ƶ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>(<28><>SDCLKƵ<4B>ʼ<EFBFBD><CABC><EFBFBD>),<2C><><EFBFBD>㷽<EFBFBD><E3B7BD>:
|
||||
//COUNT=SDRAMˢ<4D><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>-20=SDRAMˢ<4D><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(us)*SDCLKƵ<4B><C6B5>(Mhz)/<2F><><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>SDRAMˢ<4D><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ64ms,SDCLK=180/2=90Mhz,<2C><><EFBFBD><EFBFBD>Ϊ8192(2^13).
|
||||
//<2F><><EFBFBD><EFBFBD>,COUNT=64*1000*90/8192-20=683
|
||||
HAL_SDRAM_ProgramRefreshRate(&SDRAM_Handler,683);
|
||||
|
||||
u32 temp=0;
|
||||
// SDRAM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>SDRAM
|
||||
SDRAM_Send_Cmd(0,FMC_SDRAM_CMD_CLK_ENABLE,1,0); // ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
|
||||
delay_us(500); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ200us
|
||||
SDRAM_Send_Cmd(0,FMC_SDRAM_CMD_PALL,1,0); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д洢<EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Send_Cmd(0,FMC_SDRAM_CMD_AUTOREFRESH_MODE,8,0);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD>´<EFBFBD><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>,SDRAM<41><4D>bit0~bit2Ϊָ<CEAA><D6B8>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>ʵij<CAB5><C4B3>ȣ<EFBFBD>
|
||||
// bit3Ϊָ<EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>bit4~bit6ΪCASֵ<53><D6B5>bit7<74><37>bit8Ϊ<38><CEAA><EFBFBD><EFBFBD>ģʽ
|
||||
// bit9Ϊָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>дͻ<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>bit10<EFBFBD><EFBFBD>bit11λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
||||
temp=(u32)SDRAM_MODEREG_BURST_LENGTH_1 | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:1(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1/2/4/8)
|
||||
SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>)
|
||||
SDRAM_MODEREG_CAS_LATENCY_3 | // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>CASֵ:3(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2/3)
|
||||
SDRAM_MODEREG_OPERATING_MODE_STANDARD | // <EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>ģʽ:0,<2C><>ģʽ
|
||||
SDRAM_MODEREG_WRITEBURST_MODE_SINGLE; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD>дģʽ:1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SDRAM_Send_Cmd(0,FMC_SDRAM_CMD_LOAD_MODE,1,temp); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>SDRAM<EFBFBD><EFBFBD>ģʽ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
//SDRAM<41>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>ʱ<EFBFBD><CAB1>ʹ<EFBFBD><CAB9>
|
||||
//<2F>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ᱻHAL_SDRAM_Init()<29><><EFBFBD><EFBFBD>
|
||||
//hsdram:SDRAM<41><4D><EFBFBD><EFBFBD>
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SDRAM<41>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>ʱ<EFBFBD><CAB1>ʹ<EFBFBD><CAB9>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: SDRAM_HandleTypeDef *hsdram<61><6D>SDRAM<41><4D><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ᱻHAL_SDRAM_Init()<29><><EFBFBD><EFBFBD>
|
||||
// SDS_D0 -> PD14 SDS_A0 -> PF0
|
||||
// SDS_D1 -> PD15 SDS_A1 -> PF1
|
||||
// SDS_D2 -> PD0 SDS_A2 -> PF2
|
||||
// SDS_D3 -> PD1 SDS_A3 -> PF3
|
||||
// SDS_D4 -> PE7 SDS_A4 -> PF4
|
||||
// SDS_D5 -> PE8 SDS_A5 -> PF5
|
||||
// SDS_D6 -> PE9 SDS_A6 -> PF12
|
||||
// SDS_D7 -> PE10 SDS_A7 -> PF13
|
||||
// SDS_D8 -> PE11 SDS_A8 -> PF14
|
||||
// SDS_D9 -> PE12 SDS_A9 -> PF15
|
||||
// SDS_D10 -> PE13 SDS_A10 -> PG0
|
||||
// SDS_D11 -> PE14 SDS_A11 -> PG1
|
||||
// SDS_D12 -> PE15 SDS_A12 -> PG2
|
||||
// SDS_D13 -> PD8
|
||||
// SDS_D14 -> PD9
|
||||
// SDS_D15 -> PD10
|
||||
//
|
||||
// SDS_SDNWE -> PH5 SDS_BA0 -> PG4
|
||||
// SDS_SDNCAS -> PG15 SDS_BA1 -> PG5
|
||||
// SDS_SDNRAS -> PF11 SDS_NBL0 -> PE0
|
||||
// SDS_SDNE0 -> PH3 SDS_NBL1 -> PE1
|
||||
// SDS_SDCKE0 -> PH2 SDS_SDCLK -> PG8
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void HAL_SDRAM_MspInit(SDRAM_HandleTypeDef *hsdram)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_Initure;
|
||||
|
||||
__HAL_RCC_FMC_CLK_ENABLE(); //ʹ<><CAB9>FMCʱ<43><CAB1>
|
||||
__HAL_RCC_GPIOC_CLK_ENABLE(); //ʹ<><CAB9>GPIOCʱ<EFBFBD><EFBFBD>
|
||||
__HAL_RCC_GPIOD_CLK_ENABLE(); //ʹ<><CAB9>GPIODʱ<EFBFBD><EFBFBD>
|
||||
__HAL_RCC_GPIOE_CLK_ENABLE(); //ʹ<><CAB9>GPIOEʱ<EFBFBD><EFBFBD>
|
||||
__HAL_RCC_GPIOF_CLK_ENABLE(); //ʹ<><CAB9>GPIOFʱ<EFBFBD><EFBFBD>
|
||||
__HAL_RCC_GPIOG_CLK_ENABLE(); //ʹ<><CAB9>GPIOGʱ<EFBFBD><EFBFBD>
|
||||
__HAL_RCC_FMC_CLK_ENABLE(); // ʹ<EFBFBD><EFBFBD>FMCʱ<EFBFBD><EFBFBD>
|
||||
__HAL_RCC_GPIOD_CLK_ENABLE(); // ʹ<EFBFBD><EFBFBD>GPIODʱ<EFBFBD><EFBFBD>
|
||||
__HAL_RCC_GPIOE_CLK_ENABLE(); // ʹ<EFBFBD><EFBFBD>GPIOEʱ<EFBFBD><EFBFBD>
|
||||
__HAL_RCC_GPIOF_CLK_ENABLE(); // ʹ<EFBFBD><EFBFBD>GPIOFʱ<EFBFBD><EFBFBD>
|
||||
__HAL_RCC_GPIOG_CLK_ENABLE(); // ʹ<EFBFBD><EFBFBD>GPIOGʱ<EFBFBD><EFBFBD>
|
||||
__HAL_RCC_GPIOH_CLK_ENABLE(); // ʹ<EFBFBD><EFBFBD>GPIOHʱ<EFBFBD><EFBFBD>
|
||||
|
||||
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3;
|
||||
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //<2F><><EFBFBD>츴<EFBFBD><ECB8B4>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Alternate=GPIO_AF12_FMC; //<2F><><EFBFBD><EFBFBD>ΪFMC
|
||||
HAL_GPIO_Init(GPIOC,&GPIO_Initure); //<2F><>ʼ<EFBFBD><CABC>PC0,2,3
|
||||
GPIO_Initure.Pin=GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_5;
|
||||
GPIO_Initure.Mode=GPIO_MODE_AF_PP; // <EFBFBD><EFBFBD><EFBFBD>츴<EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Alternate=GPIO_AF12_FMC; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪFMC
|
||||
HAL_GPIO_Init(GPIOH,&GPIO_Initure); // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>PH2,3,5
|
||||
|
||||
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_14|GPIO_PIN_15;
|
||||
HAL_GPIO_Init(GPIOD,&GPIO_Initure); //<2F><>ʼ<EFBFBD><CABC>PD0,1,8,9,10,14,15
|
||||
HAL_GPIO_Init(GPIOD,&GPIO_Initure); // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>PD0,1,8,9,10,14,15
|
||||
|
||||
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10| GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
|
||||
HAL_GPIO_Init(GPIOE,&GPIO_Initure); //<2F><>ʼ<EFBFBD><CABC>PE0,1,7,8,9,10,11,12,13,14,15
|
||||
HAL_GPIO_Init(GPIOE,&GPIO_Initure); // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>PE0,1,7,8,9,10,11,12,13,14,15
|
||||
|
||||
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
|
||||
HAL_GPIO_Init(GPIOF,&GPIO_Initure); //<2F><>ʼ<EFBFBD><CABC>PF0,1,2,3,4,5,11,12,13,14,15
|
||||
HAL_GPIO_Init(GPIOF,&GPIO_Initure); // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>PF0,1,2,3,4,5,11,12,13,14,15
|
||||
|
||||
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_8|GPIO_PIN_15;
|
||||
HAL_GPIO_Init(GPIOG,&GPIO_Initure); //<2F><>ʼ<EFBFBD><CABC>PG0,1,2,4,5,8,15
|
||||
HAL_GPIO_Init(GPIOG,&GPIO_Initure); // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>PG0,1,2,4,5,8,15
|
||||
}
|
||||
|
||||
//<EFBFBD><EFBFBD>SDRAM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//bankx:0,<2C><>BANK5<4B><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SDRAM<41><4D><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// 1,<2C><>BANK6<4B><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SDRAM<41><4D><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
//cmd:ָ<><D6B8>(0,<2C><><EFBFBD><EFBFBD>ģʽ/1,ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>/2,Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д洢<D0B4><E6B4A2>/3,<2C>Զ<EFBFBD>ˢ<EFBFBD><CBA2>/4,<2C><><EFBFBD><EFBFBD>ģʽ<C4A3>Ĵ<EFBFBD><C4B4><EFBFBD>/5,<2C><>ˢ<EFBFBD><CBA2>/6,<2C><><EFBFBD><EFBFBD>)
|
||||
//refresh:<3A><>ˢ<EFBFBD>´<EFBFBD><EFBFBD><EFBFBD>
|
||||
//regval:ģʽ<C4A3>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>;1,ʧ<EFBFBD><EFBFBD>.
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SDRAM_Send_Cmd(u8 bankx,u8 cmd,u8 refresh,u16 regval)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>SDRAM<41><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8 bankx<6B><78>0,<2C><>BANK5<4B><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SDRAM<41><4D><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> 1,<2C><>BANK6<4B><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SDRAM<41><4D><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
||||
// u8 cmd<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>(0,<2C><><EFBFBD><EFBFBD>ģʽ/1,ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>/2,Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д洢<D0B4><E6B4A2>/3,<2C>Զ<EFBFBD>ˢ<EFBFBD><CBA2>/4,<2C><><EFBFBD><EFBFBD>ģʽ<C4A3>Ĵ<EFBFBD><C4B4><EFBFBD>/5,<2C><>ˢ<EFBFBD><CBA2>/6,<2C><><EFBFBD><EFBFBD>)
|
||||
// u8 refresh<73><68><EFBFBD><EFBFBD>ˢ<EFBFBD>´<EFBFBD><C2B4><EFBFBD>
|
||||
// u16 regval<61><6C>ģʽ<C4A3>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>: 0,<2C><><EFBFBD><EFBFBD>;1,ʧ<><CAA7>.
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 SDRAM_Send_Cmd(u8 bankx,u8 cmd,u8 refresh,u16 regval)
|
||||
{
|
||||
u32 target_bank=0;
|
||||
@@ -118,21 +179,29 @@ u8 SDRAM_Send_Cmd(u8 bankx,u8 cmd,u8 refresh,u16 regval)
|
||||
|
||||
if(bankx==0) target_bank=FMC_SDRAM_CMD_TARGET_BANK1;
|
||||
else if(bankx==1) target_bank=FMC_SDRAM_CMD_TARGET_BANK2;
|
||||
Command.CommandMode=cmd; //<2F><><EFBFBD><EFBFBD>
|
||||
Command.CommandTarget=target_bank; //Ŀ<><C4BF>SDRAM<41>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD>
|
||||
Command.AutoRefreshNumber=refresh; //<2F><>ˢ<EFBFBD>´<EFBFBD><C2B4><EFBFBD>
|
||||
Command.ModeRegisterDefinition=regval; //Ҫд<D2AA><D0B4>ģʽ<C4A3>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
if(HAL_SDRAM_SendCommand(&SDRAM_Handler,&Command,0X1000)==HAL_OK) //<2F><>SDRAM<41><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Command.CommandMode=cmd; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Command.CommandTarget=target_bank; // Ŀ<EFBFBD><EFBFBD>SDRAM<EFBFBD>洢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Command.AutoRefreshNumber=refresh; // <EFBFBD><EFBFBD>ˢ<EFBFBD>´<EFBFBD><EFBFBD><EFBFBD>
|
||||
Command.ModeRegisterDefinition=regval; // Ҫд<EFBFBD><EFBFBD>ģʽ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
if(HAL_SDRAM_SendCommand(&SDRAM_Handler,&Command,0X1000)==HAL_OK) // <EFBFBD><EFBFBD>SDRAM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else return 1;
|
||||
}
|
||||
|
||||
//<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ(WriteAddr+Bank5_SDRAM_ADDR)<29><>ʼ,<2C><><EFBFBD><EFBFBD>д<EFBFBD><D0B4>n<EFBFBD><6E><EFBFBD>ֽ<EFBFBD>.
|
||||
//pBuffer:<3A>ֽ<EFBFBD>ָ<EFBFBD><D6B8>
|
||||
//WriteAddr:Ҫд<D2AA><D0B4><EFBFBD>ĵ<EFBFBD>ַ
|
||||
//n:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
// void FMC_SDRAM_WriteBuffer(u8 *pBuffer,u32 WriteAddr,u32 n)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ(WriteAddr+Bank5_SDRAM_ADDR)<29><>ʼ,<2C><><EFBFBD><EFBFBD>д<EFBFBD><D0B4>n<EFBFBD><6E><EFBFBD>ֽ<EFBFBD>.
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8 *pBuffer<65><72><EFBFBD>ֽ<EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// u32 WriteAddr<64><72>Ҫд<D2AA><D0B4><EFBFBD>ĵ<EFBFBD>ַ
|
||||
// u32 n<><6E>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>: 0,<2C><><EFBFBD><EFBFBD>;1,ʧ<><CAA7>.
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void FMC_SDRAM_WriteBuffer(u8 *pBuffer,u32 WriteAddr,u32 n)
|
||||
{
|
||||
for(;n!=0;n--)
|
||||
@@ -143,10 +212,18 @@ void FMC_SDRAM_WriteBuffer(u8 *pBuffer,u32 WriteAddr,u32 n)
|
||||
}
|
||||
}
|
||||
|
||||
//<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ((WriteAddr+Bank5_SDRAM_ADDR))<29><>ʼ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD><6E><EFBFBD>ֽ<EFBFBD>.
|
||||
//pBuffer:<3A>ֽ<EFBFBD>ָ<EFBFBD><D6B8>
|
||||
//ReadAddr:Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
//n:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
// void FMC_SDRAM_ReadBuffer(u8 *pBuffer,u32 ReadAddr,u32 n)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ(ReadAddr+Bank5_SDRAM_ADDR)<29><>ʼ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD><6E><EFBFBD>ֽ<EFBFBD>.
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8 *pBuffer<65><72><EFBFBD>ֽ<EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// u32 ReadAddr<64><72>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
// u32 n<><6E>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>: 0,<2C><><EFBFBD><EFBFBD>;1,ʧ<><CAA7>.
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void FMC_SDRAM_ReadBuffer(u8 *pBuffer,u32 ReadAddr,u32 n)
|
||||
{
|
||||
for(;n!=0;n--)
|
||||
@@ -155,3 +232,7 @@ void FMC_SDRAM_ReadBuffer(u8 *pBuffer,u32 ReadAddr,u32 n)
|
||||
ReadAddr++;
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
@@ -1,22 +1,30 @@
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// SDRAM<41><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
|
||||
// <20><> <20><>: <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// <20><>ǰ<EFBFBD>汾: V1.0
|
||||
// <20><>ʷ<EFBFBD>汾:
|
||||
// - V1.0: (2018-08-04)SDRAM<41><4D>ʼ<EFBFBD><CABC>
|
||||
// <20><><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>: <20><><EFBFBD><EFBFBD>STM32F429+Cyclone IV<49><56><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>塢LZE_ST_LINK2
|
||||
// ˵ <20><>:
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
#ifndef _SDRAM_H
|
||||
#define _SDRAM_H
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>ѧϰʹ<EFBFBD>ã<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>;
|
||||
//ALIENTEK STM32F429<32><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//SDRAM<41><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/6
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
extern SDRAM_HandleTypeDef SDRAM_Handler;//SDRAM<41><4D><EFBFBD><EFBFBD>
|
||||
#define Bank5_SDRAM_ADDR ((u32)(0XC0000000)) //SDRAM<41><4D>ʼ<EFBFBD><CABC>ַ
|
||||
#include "stm32f429_winner.h"
|
||||
//-----------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
extern SDRAM_HandleTypeDef SDRAM_Handler;// SDRAM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
// <20>궨<EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
#define Bank5_SDRAM_ADDR ((u32)(0XC0000000)) // SDRAM<41><4D>ʼ<EFBFBD><CABC>ַ
|
||||
|
||||
//SDRAM<41><4D><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
// SDRAM<EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>
|
||||
#define SDRAM_MODEREG_BURST_LENGTH_1 ((u16)0x0000)
|
||||
#define SDRAM_MODEREG_BURST_LENGTH_2 ((u16)0x0001)
|
||||
#define SDRAM_MODEREG_BURST_LENGTH_4 ((u16)0x0002)
|
||||
@@ -29,10 +37,16 @@ extern SDRAM_HandleTypeDef SDRAM_Handler;//SDRAM
|
||||
#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((u16)0x0000)
|
||||
#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE ((u16)0x0200)
|
||||
|
||||
void SDRAM_Init(void);
|
||||
void SDRAM_MPU_Config(void);
|
||||
u8 SDRAM_Send_Cmd(u8 bankx,u8 cmd,u8 refresh,u16 regval);
|
||||
void FMC_SDRAM_WriteBuffer(u8 *pBuffer,u32 WriteAddr,u32 n);
|
||||
void FMC_SDRAM_ReadBuffer(u8 *pBuffer,u32 ReadAddr,u32 n);
|
||||
void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram);
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
extern void SDRAM_Init(void);
|
||||
extern void SDRAM_MPU_Config(void);
|
||||
extern u8 SDRAM_Send_Cmd(u8 bankx,u8 cmd,u8 refresh,u16 regval);
|
||||
extern void FMC_SDRAM_WriteBuffer(u8 *pBuffer,u32 WriteAddr,u32 n);
|
||||
extern void FMC_SDRAM_ReadBuffer(u8 *pBuffer,u32 ReadAddr,u32 n);
|
||||
extern void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram);
|
||||
#endif
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
@@ -1,81 +1,164 @@
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><>: <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// <20><>ǰ<EFBFBD>汾: V1.0
|
||||
// <20><>ʷ<EFBFBD>汾:
|
||||
// - V1.0: (2018-08-04)LED IO <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>: <20><><EFBFBD><EFBFBD>STM32F429+CycloneIV<49><56><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>塢LZE_ST_LINK2
|
||||
// ˵ <20><>:
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
#include "spi.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32F429<32><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/16/16
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
SPI_HandleTypeDef SPI5_Handler; //SPI<50><49><EFBFBD><EFBFBD>
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPIģ<EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룬<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
//SPI<EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>SPI5<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><EFBFBD>
|
||||
void SPI5_Init(void)
|
||||
SPI_HandleTypeDef SPI_Handler; // SPI<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi);
|
||||
//-----------------------------------------------------------------
|
||||
// void SPI_Init(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void SPI_Init(void)
|
||||
{
|
||||
SPI5_Handler.Instance=SPI5; //SP5
|
||||
SPI5_Handler.Init.Mode=SPI_MODE_MASTER; //<2F><><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ģʽ
|
||||
SPI5_Handler.Init.Direction=SPI_DIRECTION_2LINES; //<2F><><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ:SPI<50><49><EFBFBD><EFBFBD>Ϊ˫<CEAA><CBAB>ģʽ
|
||||
SPI5_Handler.Init.DataSize=SPI_DATASIZE_8BIT; //<2F><><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С:SPI<50><49><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>8λ֡<EFBFBD>ṹ
|
||||
SPI5_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH; //<2F><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>ʱ<EFBFBD>ӵĿ<D3B5><C4BF><EFBFBD>״̬Ϊ<CCAC>ߵ<EFBFBD>ƽ
|
||||
SPI5_Handler.Init.CLKPhase=SPI_PHASE_2EDGE; //<2F><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>ʱ<EFBFBD>ӵĵڶ<C4B5><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI5_Handler.Init.NSS=SPI_NSS_SOFT; //NSS<53>ź<EFBFBD><C5BA><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>NSS<53>ܽţ<DCBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>SSIλ<49><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A>ڲ<EFBFBD>NSS<53>ź<EFBFBD><C5BA><EFBFBD>SSIλ<49><CEBB><EFBFBD><EFBFBD>
|
||||
SPI5_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256;//<2F><><EFBFBD>岨<EFBFBD><E5B2A8><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>Ƶ<EFBFBD><C6B5>ֵ:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>ƵֵΪ256
|
||||
SPI5_Handler.Init.FirstBit=SPI_FIRSTBIT_MSB; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>MSBλ<42><CEBB><EFBFBD><EFBFBD>LSBλ<42><CEBB>ʼ:<3A><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>MSBλ<42><CEBB>ʼ
|
||||
SPI5_Handler.Init.TIMode=SPI_TIMODE_DISABLE; //<2F>ر<EFBFBD>TIģʽ
|
||||
SPI5_Handler.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;//<2F>ر<EFBFBD>Ӳ<EFBFBD><D3B2>CRCУ<43><D0A3>
|
||||
SPI5_Handler.Init.CRCPolynomial=7; //CRCֵ<43><D6B5><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>ʽ
|
||||
HAL_SPI_Init(&SPI5_Handler);
|
||||
|
||||
__HAL_SPI_ENABLE(&SPI5_Handler); //ʹ<><CAB9>SPI5
|
||||
SPI5_ReadWriteByte(0Xff); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI_Handler.Instance=SPIx; // SP4
|
||||
SPI_Handler.Init.Mode=SPI_MODE_MASTER; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>ģʽ
|
||||
SPI_Handler.Init.Direction=SPI_DIRECTION_2LINES; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ:SPI<50><49><EFBFBD><EFBFBD>Ϊ˫<CEAA><CBAB>ģʽ
|
||||
SPI_Handler.Init.DataSize=SPI_DATASIZE_8BIT; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С:SPI<50><49><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>16λ֡<EFBFBD>ṹ
|
||||
SPI_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD>ʱ<EFBFBD>ӵĿ<EFBFBD><EFBFBD><EFBFBD>״̬Ϊ<EFBFBD>ߵ<EFBFBD>ƽ
|
||||
SPI_Handler.Init.CLKPhase=SPI_PHASE_2EDGE; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD>ʱ<EFBFBD>ӵĵڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI_Handler.Init.NSS=SPI_NSS_SOFT; // NSS<EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>NSS<EFBFBD>ܽţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>SSIλ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A>ڲ<EFBFBD>NSS<53>ź<EFBFBD><C5BA><EFBFBD>SSIλ<49><CEBB><EFBFBD><EFBFBD>
|
||||
SPI_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_4;//<2F><><EFBFBD>岨<EFBFBD><E5B2A8><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>Ƶ<EFBFBD><C6B5>ֵ:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>ƵֵΪ2,<2C><><EFBFBD><EFBFBD>Ϊ45Mʱ<4D><CAB1>,<2C><><EFBFBD><EFBFBD>ģʽ
|
||||
SPI_Handler.Init.FirstBit=SPI_FIRSTBIT_MSB; // ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MSBλ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>LSBλ<EFBFBD><EFBFBD>ʼ:<3A><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>MSBλ<42><CEBB>ʼ
|
||||
SPI_Handler.Init.TIMode=SPI_TIMODE_DISABLE; // <EFBFBD>ر<EFBFBD>TIģʽ
|
||||
SPI_Handler.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;// <EFBFBD>ر<EFBFBD>Ӳ<EFBFBD><EFBFBD>CRCУ<EFBFBD><EFBFBD>
|
||||
SPI_Handler.Init.CRCPolynomial=7; // CRCֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD>ʽ
|
||||
|
||||
if (HAL_SPI_Init(&SPI_Handler) != HAL_OK) //<2F><>ʼ<EFBFBD><CABC>
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
__HAL_SPI_ENABLE(&SPI_Handler); // ʹ<><CAB9>SPI4
|
||||
|
||||
}
|
||||
|
||||
//SPI5<EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ʹ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᱻHAL_SPI_Init()<29><><EFBFBD><EFBFBD>
|
||||
//hspi:SPI<50><49><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
// void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SPI<50>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʹ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: SPI_HandleTypeDef *hspi<70><69>SPI<50><49><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ᱻHAL_SPI_Init()<29><><EFBFBD><EFBFBD>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_Initure;
|
||||
|
||||
__HAL_RCC_GPIOF_CLK_ENABLE(); //ʹ<><CAB9>GPIOFʱ<EFBFBD><EFBFBD>
|
||||
__HAL_RCC_SPI5_CLK_ENABLE(); //ʹ<><CAB9>SPI5ʱ<EFBFBD><EFBFBD>
|
||||
|
||||
//PF7,8,9
|
||||
GPIO_Initure.Pin=GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
|
||||
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_FAST; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Alternate=GPIO_AF5_SPI5; //<2F><><EFBFBD><EFBFBD>ΪSPI5
|
||||
HAL_GPIO_Init(GPIOF,&GPIO_Initure);
|
||||
GPIO_InitTypeDef GPIO_Initure;
|
||||
|
||||
SPI_MISO_GPIO_CLK_ENABLE(); // ʹ<EFBFBD><EFBFBD>SPI_MISO<EFBFBD><EFBFBD>GPIOʱ<EFBFBD><EFBFBD>
|
||||
SPI_MOSI_GPIO_CLK_ENABLE(); // ʹ<EFBFBD><EFBFBD>SPI_MOSI<EFBFBD><EFBFBD>GPIOʱ<EFBFBD><EFBFBD>
|
||||
SPI_CLK_GPIO_CLK_ENABLE(); // ʹ<><CAB9>SPI_CLK<4C><4B>GPIOʱ<4F><CAB1>
|
||||
SPI_CS_GPIO_CLK_ENABLE(); // ʹ<><CAB9>SPI_CS<43><53>GPIOʱ<4F><CAB1>
|
||||
__HAL_RCC_GPIOD_CLK_ENABLE(); // ʹ<><CAB9>PD11
|
||||
|
||||
SPI_CLK_ENABLE(); // ʹ<><CAB9>SPI4ʱ<EFBFBD><EFBFBD>
|
||||
|
||||
GPIO_Initure.Pin = SPI_CS_PIN; //PE4 -> SPI4_CS
|
||||
GPIO_Initure.Mode = GPIO_MODE_OUTPUT_PP; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull = GPIO_NOPULL; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed = GPIO_SPEED_FREQ_HIGH; //<2F><><EFBFBD><EFBFBD>ģʽ
|
||||
HAL_GPIO_Init(SPI_CS_GPIO_PORT, &GPIO_Initure);
|
||||
|
||||
GPIO_Initure.Pin = GPIO_PIN_11; //PD11 -> SPIʹ<49><CAB9><EFBFBD>źţ<C5BA><C5A3><EFBFBD>fpga<67>˵<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Mode = GPIO_MODE_OUTPUT_PP; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull = GPIO_PULLUP; //<2F><><EFBFBD><EFBFBD>ģʽ
|
||||
GPIO_Initure.Speed = GPIO_SPEED_FREQ_HIGH; //<2F><><EFBFBD><EFBFBD>ģʽ
|
||||
HAL_GPIO_Init(GPIOD, &GPIO_Initure);
|
||||
|
||||
GPIO_Initure.Pin=SPI_MISO_PIN; // PE5 -> SPI4_MISO
|
||||
GPIO_Initure.Mode=GPIO_MODE_AF_PP; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; // <20><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; // <20><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Alternate=SPI_MISO_AF; // <20><><EFBFBD><EFBFBD>ΪSPI4
|
||||
HAL_GPIO_Init(SPI_MISO_GPIO_PORT,&GPIO_Initure);
|
||||
|
||||
GPIO_Initure.Pin=SPI_MOSI_PIN; // PE6 -> SPI4_MOSI
|
||||
GPIO_Initure.Mode=GPIO_MODE_AF_PP; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; // <20><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; // <20><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Alternate=SPI_MOSI_AF; // <20><><EFBFBD><EFBFBD>ΪSPI4
|
||||
HAL_GPIO_Init(SPI_MOSI_GPIO_PORT,&GPIO_Initure);
|
||||
|
||||
GPIO_Initure.Pin=SPI_CLK_PIN; // PE2 -> SPI4_SCK
|
||||
GPIO_Initure.Mode=GPIO_MODE_AF_PP; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; // <20><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; // <20><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Alternate=SPI_CLK_AF; // <20><><EFBFBD><EFBFBD>ΪSPI4
|
||||
HAL_GPIO_Init(SPI_CLK_GPIO_PORT,&GPIO_Initure);
|
||||
|
||||
//<2F><>ʼ<EFBFBD>ߵ<EFBFBD>ƽ
|
||||
HAL_GPIO_WritePin(SPI_CS_GPIO_PORT, SPI_CS_PIN, GPIO_PIN_SET);
|
||||
|
||||
}
|
||||
|
||||
//SPI<EFBFBD>ٶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD>
|
||||
//SPI<EFBFBD>ٶ<EFBFBD>=fAPB1/<2F><>Ƶϵ<C6B5><CFB5>
|
||||
//@ref SPI_BaudRate_Prescaler:SPI_BAUDRATEPRESCALER_2~SPI_BAUDRATEPRESCALER_2 256
|
||||
//fAPB1ʱ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ϊ45Mhz<EFBFBD><EFBFBD>
|
||||
void SPI5_SetSpeed(u8 SPI_BaudRatePrescaler)
|
||||
//-----------------------------------------------------------------
|
||||
// void SPI1_SetSpeed(u8 SPI_BaudRatePrescaler)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SPI<50>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8 SPI_BaudRatePrescaler<65><72>SPI_BAUDRATEPRESCALER_2~SPI_BAUDRATEPRESCALER_2 256
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SPI<50>ٶ<EFBFBD>=fAPB1/<2F><>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD>fAPB1ʱ<31><CAB1>һ<EFBFBD><D2BB>Ϊ45Mhz
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void SPI1_SetSpeed(u8 SPI_BaudRatePrescaler)
|
||||
{
|
||||
assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));//<2F>ж<EFBFBD><D0B6><EFBFBD>Ч<EFBFBD><D0A7>
|
||||
__HAL_SPI_DISABLE(&SPI5_Handler); //<2F>ر<EFBFBD>SPI
|
||||
SPI5_Handler.Instance->CR1&=0XFFC7; //λ3-5<><35><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI5_Handler.Instance->CR1|=SPI_BaudRatePrescaler;//<2F><><EFBFBD><EFBFBD>SPI<50>ٶ<EFBFBD>
|
||||
__HAL_SPI_ENABLE(&SPI5_Handler); //ʹ<><CAB9>SPI
|
||||
|
||||
assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler)); // <EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>
|
||||
__HAL_SPI_DISABLE(&SPI_Handler); // <EFBFBD>ر<EFBFBD>SPI
|
||||
SPI_Handler.Instance->CR1&=0XFFC7; // λ3-5<><35><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI_Handler.Instance->CR1|=SPI_BaudRatePrescaler; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<EFBFBD>ٶ<EFBFBD>
|
||||
__HAL_SPI_ENABLE(&SPI_Handler); // ʹ<EFBFBD><EFBFBD>SPI
|
||||
}
|
||||
|
||||
//SPI5 <20><>дһ<D0B4><D2BB><EFBFBD>ֽ<EFBFBD>
|
||||
//TxData:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||||
u8 SPI5_ReadWriteByte(u8 TxData)
|
||||
//-----------------------------------------------------------------
|
||||
// u8 SPI1_ReadWriteByte(u8 TxData)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: SPI1<49><31>дһ<D0B4><D2BB><EFBFBD>ֽ<EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8 TxData<74><61> Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||||
// <20><> <20><> ֵ: u8 Rxdata<74><61><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
uint16_t SPI1_ReadWriteByte(uint16_t TxData)
|
||||
{
|
||||
u8 Rxdata;
|
||||
HAL_SPI_TransmitReceive(&SPI5_Handler,&TxData,&Rxdata,1, 1000);
|
||||
return Rxdata; //<2F><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 rx_data[2];
|
||||
u8 tx_data[2];
|
||||
u16 Rxdata;
|
||||
|
||||
tx_data[0] = (TxData >> 8) & 0xFF;
|
||||
tx_data[1] = TxData & 0xFF;
|
||||
|
||||
HAL_SPI_TransmitReceive(&SPI_Handler,tx_data,rx_data,2, 1000);
|
||||
|
||||
Rxdata = (rx_data[0] << 8) | rx_data[1];
|
||||
|
||||
return Rxdata; // <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
@@ -1,22 +1,67 @@
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
|
||||
// <20><> <20><>: <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// <20><>ǰ<EFBFBD>汾: V1.0
|
||||
// <20><>ʷ<EFBFBD>汾:
|
||||
// - V1.0: (2018-08-04)LED IO <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>: <20><><EFBFBD><EFBFBD>STM32F429+CycloneIV<49><56><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>塢LZE_ST_LINK2
|
||||
// ˵ <20><>:
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
#ifndef __SPI_H
|
||||
#define __SPI_H
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>ѧϰʹ<EFBFBD>ã<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>;
|
||||
//ALIENTEK STM32F429<32><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//SPI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/16/16
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
#include "stm32f429_winner.h"
|
||||
#include "main.h"
|
||||
//-----------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
extern SPI_HandleTypeDef SPI_Handler; // SPI<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
extern SPI_HandleTypeDef SPI5_Handler; //SPI<50><49><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
// SPI<50><49><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
#define SPIx SPI4
|
||||
#define SPI_CLK_ENABLE() __HAL_RCC_SPI4_CLK_ENABLE()
|
||||
|
||||
#define SPI_CS_PIN GPIO_PIN_4
|
||||
#define SPI_CS_GPIO_PORT GPIOE
|
||||
#define SPI_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE()
|
||||
#define SPI_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE()
|
||||
|
||||
#define SPI_MISO_PIN GPIO_PIN_5
|
||||
#define SPI_MISO_GPIO_PORT GPIOE
|
||||
#define SPI_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE()
|
||||
#define SPI_MISO_GPIO_CLK_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE()
|
||||
#define SPI_MISO_AF GPIO_AF5_SPI4
|
||||
|
||||
#define SPI_MOSI_PIN GPIO_PIN_6
|
||||
#define SPI_MOSI_GPIO_PORT GPIOE
|
||||
#define SPI_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE()
|
||||
#define SPI_MOSI_GPIO_CLK_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE()
|
||||
#define SPI_MOSI_AF GPIO_AF5_SPI4
|
||||
|
||||
#define SPI_CLK_PIN GPIO_PIN_2
|
||||
#define SPI_CLK_GPIO_PORT GPIOE
|
||||
#define SPI_CLK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE()
|
||||
#define SPI_CLK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE()
|
||||
#define SPI_CLK_AF GPIO_AF5_SPI4
|
||||
|
||||
#define SPI_FPGA_CS_LOW() HAL_GPIO_WritePin(SPI_CS_GPIO_PORT, SPI_CS_PIN, GPIO_PIN_RESET);
|
||||
#define SPI_FPGA_CS_HIGH() HAL_GPIO_WritePin(SPI_CS_GPIO_PORT, SPI_CS_PIN, GPIO_PIN_SET);
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
extern void SPI_Init(void);
|
||||
extern void SPI1_SetSpeed(u8 SPI_BaudRatePrescaler);
|
||||
extern u16 SPI1_ReadWriteByte(u16 TxData);
|
||||
|
||||
void SPI5_Init(void);
|
||||
void SPI5_SetSpeed(u8 SPI_BaudRatePrescaler);
|
||||
u8 SPI5_ReadWriteByte(u8 TxData);
|
||||
#endif
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
|
||||
68
HARDWARE/TIMER/timer.c
Normal file
68
HARDWARE/TIMER/timer.c
Normal file
@@ -0,0 +1,68 @@
|
||||
#include "timer.h"
|
||||
#include "led.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32F429<32><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/6
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
extern vu16 USART3_RX_STA;
|
||||
|
||||
TIM_HandleTypeDef TIM4_Handler; //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//ͨ<>ö<EFBFBD>ʱ<EFBFBD><CAB1>4<EFBFBD>жϳ<D0B6>ʼ<EFBFBD><CABC>
|
||||
//arr<72><72><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>װֵ<D7B0><D6B5>
|
||||
//psc<73><63>ʱ<EFBFBD><CAB1>Ԥ<EFBFBD><D4A4>Ƶ<EFBFBD><C6B5>
|
||||
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>㷽<EFBFBD><E3B7BD>:Tout=((arr+1)*(psc+1))/Ft us.
|
||||
//Ft=<3D><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>,<2C><>λ:Mhz
|
||||
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5>Ƕ<EFBFBD>ʱ<EFBFBD><CAB1>4!(<28><>ʱ<EFBFBD><CAB1>4<EFBFBD><34><EFBFBD><EFBFBD>APB1<42>ϣ<EFBFBD>ʱ<EFBFBD><CAB1>ΪHCLK/2)
|
||||
void TIM4_Init(u16 arr,u16 psc)
|
||||
{
|
||||
TIM4_Handler.Instance=TIM4; //ͨ<>ö<EFBFBD>ʱ<EFBFBD><CAB1>4
|
||||
TIM4_Handler.Init.Prescaler=psc; //<2F><>Ƶϵ<C6B5><CFB5>
|
||||
TIM4_Handler.Init.CounterMode=TIM_COUNTERMODE_UP; //<2F><><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
TIM4_Handler.Init.Period=arr; //<2F>Զ<EFBFBD>װ<EFBFBD><D7B0>ֵ
|
||||
TIM4_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//ʱ<>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
|
||||
HAL_TIM_Base_Init(&TIM4_Handler);
|
||||
|
||||
HAL_TIM_Base_Start_IT(&TIM4_Handler); //ʹ<>ܶ<EFBFBD>ʱ<EFBFBD><CAB1>4<EFBFBD>Ͷ<EFBFBD>ʱ<EFBFBD><CAB1>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>TIM_IT_UPDATE
|
||||
}
|
||||
|
||||
|
||||
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
||||
//<2F>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ᱻHAL_TIM_Base_Init()<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
|
||||
{
|
||||
if(htim->Instance==TIM4)
|
||||
{
|
||||
__HAL_RCC_TIM4_CLK_ENABLE(); //ʹ<><CAB9>TIM4ʱ<34><CAB1>
|
||||
HAL_NVIC_SetPriority(TIM4_IRQn,0,2); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>2
|
||||
HAL_NVIC_EnableIRQ(TIM4_IRQn); //<2F><><EFBFBD><EFBFBD>ITM4<4D>ж<EFBFBD>
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//<2F><>ʱ<EFBFBD><CAB1>4<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void TIM4_IRQHandler(void)
|
||||
{
|
||||
HAL_TIM_IRQHandler(&TIM4_Handler);
|
||||
}
|
||||
|
||||
|
||||
//<2F>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
||||
{
|
||||
if(htim==(&TIM4_Handler))
|
||||
{
|
||||
USART3_RX_STA|=1<<15; //<2F><><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
__HAL_TIM_CLEAR_IT(&TIM4_Handler, TIM_IT_UPDATE); // <20><><EFBFBD><EFBFBD>TIM4<4D>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>жϱ<D0B6>־
|
||||
HAL_TIM_Base_Stop(&TIM4_Handler); //<2F>ر<EFBFBD>TIM4
|
||||
}
|
||||
}
|
||||
20
HARDWARE/TIMER/timer.h
Normal file
20
HARDWARE/TIMER/timer.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#ifndef _TIMER_H
|
||||
#define _TIMER_H
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32F429<32><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/6
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
extern TIM_HandleTypeDef TIM4_Handler; //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
void TIM4_Init(u16 arr,u16 psc);
|
||||
#endif
|
||||
|
||||
@@ -1,242 +1,325 @@
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// W25QXX<58><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><>: <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// <20><>ǰ<EFBFBD>汾: V1.0
|
||||
// <20><>ʷ<EFBFBD>汾:
|
||||
// - V1.0: (2018-08-04)W25QXX<58><58>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>: <20><><EFBFBD><EFBFBD>STM32F429+CycloneIV<49><56><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>塢LZE_ST_LINK2
|
||||
// ˵ <20><>:
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
#include "w25qxx.h"
|
||||
#include "spi.h"
|
||||
#include "delay.h"
|
||||
#include "usart.h"
|
||||
#include "stm32f4xx_hal_gpio.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32F429<32><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//W25QXX<58><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/16
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
u16 W25QXX_TYPE=W25Q256; //Ĭ<><C4AC><EFBFBD><EFBFBD>W25Q256
|
||||
|
||||
//4KbytesΪһ<EFBFBD><EFBFBD>Sector
|
||||
//16<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1<EFBFBD><EFBFBD>Block
|
||||
//W25Q256
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ32M<EFBFBD>ֽ<EFBFBD>,<2C><><EFBFBD><EFBFBD>512<31><32>Block,8192<39><32>Sector
|
||||
|
||||
//<2F><>ʼ<EFBFBD><EFBFBD>SPI FLASH<53><48>IO<EFBFBD><EFBFBD>
|
||||
u16 W25QXX_TYPE=W25Q128; // Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>W25Q128
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void W25QXX_Init(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ʼ<EFBFBD><CABC>SPI FLASH<53><48>IO<49><4F>
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void W25QXX_Init(void)
|
||||
{
|
||||
u8 temp;
|
||||
GPIO_InitTypeDef GPIO_Initure;
|
||||
u8 temp;
|
||||
GPIO_InitTypeDef GPIO_Initure;
|
||||
__HAL_RCC_GPIOG_CLK_ENABLE(); // ʹ<><CAB9>GPIOGʱ<47><CAB1>
|
||||
|
||||
GPIO_Initure.Pin=GPIO_PIN_3; // PG3 -> FLASH_CS
|
||||
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; // <20><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_FAST; // <20><><EFBFBD><EFBFBD>
|
||||
HAL_GPIO_Init(GPIOG,&GPIO_Initure); // <20><>ʼ<EFBFBD><CABC>
|
||||
|
||||
__HAL_RCC_GPIOF_CLK_ENABLE(); //ʹ<><CAB9>GPIOFʱ<46><CAB1>
|
||||
|
||||
//PF6
|
||||
GPIO_Initure.Pin=GPIO_PIN_6; //PF6
|
||||
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Pull=GPIO_PULLUP; //<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_Initure.Speed=GPIO_SPEED_FAST; //<2F><><EFBFBD><EFBFBD>
|
||||
HAL_GPIO_Init(GPIOF,&GPIO_Initure); //<2F><>ʼ<EFBFBD><CABC>
|
||||
|
||||
W25QXX_CS=1; //SPI FLASH<53><48>ѡ<EFBFBD><D1A1>
|
||||
SPI5_Init(); //<2F><>ʼ<EFBFBD><CABC>SPI
|
||||
SPI5_SetSpeed(SPI_BAUDRATEPRESCALER_2); //<2F><><EFBFBD><EFBFBD>Ϊ45Mʱ<4D><CAB1>,<2C><><EFBFBD><EFBFBD>ģʽ
|
||||
W25QXX_TYPE=W25QXX_ReadID(); //<2F><>ȡFLASH ID.
|
||||
if(W25QXX_TYPE==W25Q256) //SPI FLASHΪW25Q256
|
||||
{
|
||||
temp=W25QXX_ReadSR(3); //<2F><>ȡ״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>3<EFBFBD><33><EFBFBD>жϵ<D0B6>ַģʽ
|
||||
if((temp&0X01)==0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ֽڵ<D6BD>ַģʽ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ֽڵ<D6BD>ַģʽ
|
||||
W25QXX_CS=1; // ȡ<><C8A1>Ƭѡ
|
||||
SPI_Init(); // <20><>ʼ<EFBFBD><CABC>SPI
|
||||
W25QXX_TYPE=W25QXX_ReadID(); // <20><>ȡFLASH ID.
|
||||
if(W25QXX_TYPE==W25Q256) // <20><>SPI FLASHΪW25Q256
|
||||
{
|
||||
temp=W25QXX_ReadSR(3); // <20><>ȡ״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>3<EFBFBD><33><EFBFBD>жϵ<D0B6>ַģʽ
|
||||
if((temp&0X01)==0) // <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ֽڵ<EFBFBD>ַģʽ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ֽڵ<D6BD>ַģʽ
|
||||
{
|
||||
W25QXX_CS=0; //ѡ<><D1A1>
|
||||
SPI5_ReadWriteByte(W25X_Enable4ByteAddr);//<2F><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>4<EFBFBD>ֽڵ<D6BD>ַģʽָ<CABD><D6B8>
|
||||
W25QXX_CS=1; //ȡ<><C8A1>Ƭѡ
|
||||
W25QXX_CS=0; // ѡ<EFBFBD><EFBFBD>
|
||||
SPI1_ReadWriteByte(W25X_Enable4ByteAddr);// <EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ֽڵ<EFBFBD>ַģʽָ<EFBFBD><EFBFBD>
|
||||
W25QXX_CS=1; // ȡ<EFBFBD><EFBFBD>Ƭѡ
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//<EFBFBD><EFBFBD>ȡW25QXX<EFBFBD><EFBFBD>״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W25QXXһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><EFBFBD>״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>
|
||||
//BIT7 6 5 4 3 2 1 0
|
||||
//SPR RV TB BP2 BP1 BP0 WEL BUSY
|
||||
//SPR:Ĭ<><C4AC>0,״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ,<2C><><EFBFBD><EFBFBD>WPʹ<EFBFBD><EFBFBD>
|
||||
//TB,BP2,BP1,BP0:FLASH<53><48><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//WEL:дʹ<D0B4><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//BUSY:æ<><C3A6><EFBFBD><EFBFBD>λ(1,æ;0,<2C><><EFBFBD><EFBFBD>)
|
||||
//Ĭ<EFBFBD><EFBFBD>:0x00
|
||||
//״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>
|
||||
//BIT7 6 5 4 3 2 1 0
|
||||
//SUS CMP LB3 LB2 LB1 (R) QE SRP1
|
||||
//״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><EFBFBD>
|
||||
//BIT7 6 5 4 3 2 1 0
|
||||
//HOLD/RST DRV1 DRV0 (R) (R) WPS ADP ADS
|
||||
//regno:״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD>:1~3
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>ֵ
|
||||
//-----------------------------------------------------------------
|
||||
// u8 W25QXX_ReadSR(u8 regno)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ȡW25QXX<58><58>״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>W25QXXһ<58><D2BB><EFBFBD><EFBFBD>3<EFBFBD><33>״̬<D7B4>Ĵ<EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8 regno<6E><6F>״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>Χ:1~3
|
||||
// <20><> <20><> ֵ: u8 byte<74><65>״̬<D7B4>Ĵ<EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>1<EFBFBD><31>
|
||||
// BIT7 6 5 4 3 2 1 0
|
||||
// SPR RV TB BP2 BP1 BP0 WEL BUSY
|
||||
// SPR:Ĭ<><C4AC>0,״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ,<2C><><EFBFBD><EFBFBD>WPʹ<50><CAB9>
|
||||
// TB,BP2,BP1,BP0:FLASH<53><48><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// WEL:дʹ<D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// BUSY:æ<><C3A6><EFBFBD><EFBFBD>λ(1,æ;0,<2C><><EFBFBD><EFBFBD>)
|
||||
// Ĭ<><C4AC>:0x00
|
||||
// ״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>
|
||||
// BIT7 6 5 4 3 2 1 0
|
||||
// SUS CMP LB3 LB2 LB1 (R) QE SRP1
|
||||
// ״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>3<EFBFBD><33>
|
||||
// BIT7 6 5 4 3 2 1 0
|
||||
// HOLD/RST DRV1 DRV0 (R) (R) WPS ADP ADS
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u8 W25QXX_ReadSR(u8 regno)
|
||||
{
|
||||
u8 byte=0,command=0;
|
||||
switch(regno)
|
||||
{
|
||||
case 1:
|
||||
command=W25X_ReadStatusReg1; //<2F><>״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>1ָ<31><D6B8>
|
||||
break;
|
||||
case 2:
|
||||
command=W25X_ReadStatusReg2; //<2F><>״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>2ָ<32><D6B8>
|
||||
break;
|
||||
case 3:
|
||||
command=W25X_ReadStatusReg3; //<2F><>״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>3ָ<33><D6B8>
|
||||
break;
|
||||
default:
|
||||
command=W25X_ReadStatusReg1;
|
||||
break;
|
||||
}
|
||||
W25QXX_CS=0; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI5_ReadWriteByte(command); //<2F><><EFBFBD>Ͷ<EFBFBD>ȡ״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
byte=SPI5_ReadWriteByte(0Xff); //<2F><>ȡһ<C8A1><D2BB><EFBFBD>ֽ<EFBFBD>
|
||||
W25QXX_CS=1; //ȡ<><C8A1>Ƭѡ
|
||||
switch(regno)
|
||||
{
|
||||
case 1:
|
||||
command=W25X_ReadStatusReg1; // <EFBFBD><EFBFBD>״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>1ָ<EFBFBD><EFBFBD>
|
||||
break;
|
||||
case 2:
|
||||
command=W25X_ReadStatusReg2; // <EFBFBD><EFBFBD>״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>2ָ<EFBFBD><EFBFBD>
|
||||
break;
|
||||
case 3:
|
||||
command=W25X_ReadStatusReg3; // <EFBFBD><EFBFBD>״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>3ָ<EFBFBD><EFBFBD>
|
||||
break;
|
||||
default:
|
||||
command=W25X_ReadStatusReg1;
|
||||
break;
|
||||
}
|
||||
W25QXX_CS=0; // ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI1_ReadWriteByte(command); // <EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD>ȡ״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
byte=SPI1_ReadWriteByte(0Xff); // <EFBFBD><EFBFBD>ȡһ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||||
W25QXX_CS=1; // ȡ<EFBFBD><EFBFBD>Ƭѡ
|
||||
return byte;
|
||||
}
|
||||
//дW25QXX״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void W25QXX_Write_SR(u8 regno,u8 sr)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: дW25QXX״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8 regno<6E><6F>״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>Χ:1~3
|
||||
// u8 sr<73><72>д<EFBFBD><D0B4>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void W25QXX_Write_SR(u8 regno,u8 sr)
|
||||
{
|
||||
u8 command=0;
|
||||
switch(regno)
|
||||
{
|
||||
case 1:
|
||||
command=W25X_WriteStatusReg1; //д״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>1ָ<31><D6B8>
|
||||
break;
|
||||
case 2:
|
||||
command=W25X_WriteStatusReg2; //д״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>2ָ<32><D6B8>
|
||||
break;
|
||||
case 3:
|
||||
command=W25X_WriteStatusReg3; //д״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>3ָ<33><D6B8>
|
||||
break;
|
||||
default:
|
||||
command=W25X_WriteStatusReg1;
|
||||
break;
|
||||
}
|
||||
W25QXX_CS=0; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI5_ReadWriteByte(command); //<2F><><EFBFBD><EFBFBD>дȡ״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI5_ReadWriteByte(sr); //д<><D0B4>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>
|
||||
W25QXX_CS=1; //ȡ<><C8A1>Ƭѡ
|
||||
u8 command=0;
|
||||
switch(regno)
|
||||
{
|
||||
case 1:
|
||||
command=W25X_WriteStatusReg1; // д״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>1ָ<EFBFBD><EFBFBD>
|
||||
break;
|
||||
case 2:
|
||||
command=W25X_WriteStatusReg2; // д״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>2ָ<EFBFBD><EFBFBD>
|
||||
break;
|
||||
case 3:
|
||||
command=W25X_WriteStatusReg3; // д״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>3ָ<EFBFBD><EFBFBD>
|
||||
break;
|
||||
default:
|
||||
command=W25X_WriteStatusReg1;
|
||||
break;
|
||||
}
|
||||
W25QXX_CS=0; // ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI1_ReadWriteByte(command); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>дȡ״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI1_ReadWriteByte(sr); // д<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||||
W25QXX_CS=1; // ȡ<EFBFBD><EFBFBD>Ƭѡ
|
||||
}
|
||||
//W25QXXдʹ<D0B4><CAB9>
|
||||
//<2F><>WEL<45><4C>λ
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void W25QXX_Write_Enable(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: W25QXXдʹ<D0B4><CAB9>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void W25QXX_Write_Enable(void)
|
||||
{
|
||||
W25QXX_CS=0; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI5_ReadWriteByte(W25X_WriteEnable); //<2F><><EFBFBD><EFBFBD>дʹ<D0B4><CAB9>
|
||||
W25QXX_CS=1; //ȡ<><C8A1>Ƭѡ
|
||||
W25QXX_CS=0; // ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI1_ReadWriteByte(W25X_WriteEnable); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>дʹ<EFBFBD><EFBFBD>
|
||||
W25QXX_CS=1; // ȡ<EFBFBD><EFBFBD>Ƭѡ
|
||||
}
|
||||
//W25QXXд<58><D0B4>ֹ
|
||||
//<2F><>WEL<45><4C><EFBFBD><EFBFBD>
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void W25QXX_Write_Disable(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: WW25QXXд<58><D0B4>ֹ
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void W25QXX_Write_Disable(void)
|
||||
{
|
||||
W25QXX_CS=0; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI5_ReadWriteByte(W25X_WriteDisable); //<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ָֹ<D6B9><D6B8>
|
||||
W25QXX_CS=1; //ȡ<><C8A1>Ƭѡ
|
||||
W25QXX_CS=0; // ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI1_ReadWriteByte(W25X_WriteDisable); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ָֹ<EFBFBD><EFBFBD>
|
||||
W25QXX_CS=1; // ȡ<EFBFBD><EFBFBD>Ƭѡ
|
||||
}
|
||||
|
||||
//<EFBFBD><EFBFBD>ȡоƬID
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
//0XEF13,<2C><>ʾоƬ<D0BE>ͺ<EFBFBD>ΪW25Q80
|
||||
//0XEF14,<2C><>ʾоƬ<D0BE>ͺ<EFBFBD>ΪW25Q16
|
||||
//0XEF15,<2C><>ʾоƬ<D0BE>ͺ<EFBFBD>ΪW25Q32
|
||||
//0XEF16,<2C><>ʾоƬ<D0BE>ͺ<EFBFBD>ΪW25Q64
|
||||
//0XEF17,<EFBFBD><EFBFBD>ʾоƬ<EFBFBD>ͺ<EFBFBD>ΪW25Q128
|
||||
//0XEF18,<2C><>ʾоƬ<D0BE>ͺ<EFBFBD>ΪW25Q256
|
||||
//-----------------------------------------------------------------
|
||||
// u16 W25QXX_ReadID(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ȡоƬID
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: u16 Temp<EFBFBD><EFBFBD>оƬ<EFBFBD>ͺ<EFBFBD>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 0XEF13,<2C><>ʾоƬ<D0BE>ͺ<EFBFBD>ΪW25Q80
|
||||
// 0XEF14,<2C><>ʾоƬ<D0BE>ͺ<EFBFBD>ΪW25Q16
|
||||
// 0XEF15,<2C><>ʾоƬ<D0BE>ͺ<EFBFBD>ΪW25Q32
|
||||
// 0XEF16,<2C><>ʾоƬ<D0BE>ͺ<EFBFBD>ΪW25Q64
|
||||
// 0XEF17,<2C><>ʾоƬ<D0BE>ͺ<EFBFBD>ΪW25Q128
|
||||
// 0XEF18,<2C><>ʾоƬ<D0BE>ͺ<EFBFBD>ΪW25Q256
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
u16 W25QXX_ReadID(void)
|
||||
{
|
||||
u16 Temp = 0;
|
||||
W25QXX_CS=0;
|
||||
SPI5_ReadWriteByte(0x90);//<2F><><EFBFBD>Ͷ<EFBFBD>ȡID<49><44><EFBFBD><EFBFBD>
|
||||
SPI5_ReadWriteByte(0x00);
|
||||
SPI5_ReadWriteByte(0x00);
|
||||
SPI5_ReadWriteByte(0x00);
|
||||
Temp|=SPI5_ReadWriteByte(0xFF)<<8;
|
||||
Temp|=SPI5_ReadWriteByte(0xFF);
|
||||
SPI1_ReadWriteByte(0x90);// <EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD>ȡID<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI1_ReadWriteByte(0x00);
|
||||
SPI1_ReadWriteByte(0x00);
|
||||
SPI1_ReadWriteByte(0x00);
|
||||
Temp|=SPI1_ReadWriteByte(0xFF)<<8;
|
||||
Temp|=SPI1_ReadWriteByte(0xFF);
|
||||
W25QXX_CS=1;
|
||||
return Temp;
|
||||
}
|
||||
//<2F><>ȡSPI FLASH
|
||||
//<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼ<EFBFBD><CABC>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
//pBuffer:<3A><><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
//ReadAddr:<3A><>ʼ<EFBFBD><CABC>ȡ<EFBFBD>ĵ<EFBFBD>ַ(24bit)
|
||||
//NumByteToRead:Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD><EFBFBD>65535)
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void W25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ȡSPI FLASH<53><48><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼ<EFBFBD><CABC>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8* pBuffer<65><72><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
// u32 ReadAddr:<3A><>ʼ<EFBFBD><CABC>ȡ<EFBFBD>ĵ<EFBFBD>ַ(24bit)
|
||||
// u16 NumByteToRead:<3A><><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD><EFBFBD>65535)
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void W25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)
|
||||
{
|
||||
u16 i;
|
||||
W25QXX_CS=0; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI5_ReadWriteByte(W25X_ReadData); //<2F><><EFBFBD>Ͷ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
if(W25QXX_TYPE==W25Q256) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W25Q256<35>Ļ<EFBFBD><C4BB><EFBFBD>ַΪ4<CEAA>ֽڵģ<DAB5>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8λ
|
||||
{
|
||||
SPI5_ReadWriteByte((u8)((ReadAddr)>>24));
|
||||
}
|
||||
SPI5_ReadWriteByte((u8)((ReadAddr)>>16)); //<2F><><EFBFBD><EFBFBD>24bit<69><74>ַ
|
||||
SPI5_ReadWriteByte((u8)((ReadAddr)>>8));
|
||||
SPI5_ReadWriteByte((u8)ReadAddr);
|
||||
for(i=0;i<NumByteToRead;i++)
|
||||
W25QXX_CS=0; // ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI1_ReadWriteByte(W25X_ReadData); // <EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(W25QXX_TYPE==W25Q256) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W25Q256<EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD>ַΪ4<EFBFBD>ֽڵģ<EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8λ
|
||||
{
|
||||
SPI1_ReadWriteByte((u8)((ReadAddr)>>24));
|
||||
}
|
||||
SPI1_ReadWriteByte((u8)((ReadAddr)>>16)); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>24bit<EFBFBD><EFBFBD>ַ
|
||||
SPI1_ReadWriteByte((u8)((ReadAddr)>>8));
|
||||
SPI1_ReadWriteByte((u8)ReadAddr);
|
||||
for(i=0;i<NumByteToRead;i++)
|
||||
{
|
||||
pBuffer[i]=SPI5_ReadWriteByte(0XFF); //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
pBuffer[i]=SPI1_ReadWriteByte(0XFF); // ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
W25QXX_CS=1;
|
||||
}
|
||||
//SPI<50><49>һҳ(0~65535)<29><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>256<35><36><EFBFBD>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼд<CABC><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>256<35>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
//pBuffer:<3A><><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
//WriteAddr:<3A><>ʼд<CABC><D0B4><EFBFBD>ĵ<EFBFBD>ַ(24bit)
|
||||
//NumByteToWrite:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD><EFBFBD>256),<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ʣ<EFBFBD><CAA3><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>!!!
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void W25QXX_Write_Page(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: PI<50><49>һҳ(0~65535)<29><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>256<35><36><EFBFBD>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼд<CABC><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>256<35>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8* pBuffer<65><72><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
// u32 WriteAddr<64><72><EFBFBD><EFBFBD>ʼд<CABC><D0B4><EFBFBD>ĵ<EFBFBD>ַ(24bit)
|
||||
// u16 NumByteToWrite<74><65>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD><EFBFBD>256),<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ʣ<EFBFBD><CAA3><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>!!!
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void W25QXX_Write_Page(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
|
||||
{
|
||||
u16 i;
|
||||
W25QXX_Write_Enable(); //SET WEL
|
||||
W25QXX_CS=0; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI5_ReadWriteByte(W25X_PageProgram); //<2F><><EFBFBD><EFBFBD>дҳ<D0B4><D2B3><EFBFBD><EFBFBD>
|
||||
if(W25QXX_TYPE==W25Q256) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W25Q256<35>Ļ<EFBFBD><C4BB><EFBFBD>ַΪ4<CEAA>ֽڵģ<DAB5>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8λ
|
||||
{
|
||||
SPI5_ReadWriteByte((u8)((WriteAddr)>>24));
|
||||
}
|
||||
SPI5_ReadWriteByte((u8)((WriteAddr)>>16)); //<2F><><EFBFBD><EFBFBD>24bit<69><74>ַ
|
||||
SPI5_ReadWriteByte((u8)((WriteAddr)>>8));
|
||||
SPI5_ReadWriteByte((u8)WriteAddr);
|
||||
for(i=0;i<NumByteToWrite;i++)SPI5_ReadWriteByte(pBuffer[i]);//ѭ<><D1AD>д<EFBFBD><D0B4>
|
||||
W25QXX_CS=1; //ȡ<><C8A1>Ƭѡ
|
||||
W25QXX_Wait_Busy(); //<2F>ȴ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
W25QXX_Write_Enable(); // SET WEL
|
||||
W25QXX_CS=0; // ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI1_ReadWriteByte(W25X_PageProgram); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>дҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(W25QXX_TYPE==W25Q256) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W25Q256<EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD>ַΪ4<EFBFBD>ֽڵģ<EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8λ
|
||||
{
|
||||
SPI1_ReadWriteByte((u8)((WriteAddr)>>24));
|
||||
}
|
||||
SPI1_ReadWriteByte((u8)((WriteAddr)>>16)); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>24bit<EFBFBD><EFBFBD>ַ
|
||||
SPI1_ReadWriteByte((u8)((WriteAddr)>>8));
|
||||
SPI1_ReadWriteByte((u8)WriteAddr);
|
||||
for(i=0;i<NumByteToWrite;i++)
|
||||
SPI1_ReadWriteByte(pBuffer[i]); // ѭ<><D1AD>д<EFBFBD><D0B4>
|
||||
W25QXX_CS=1; // ȡ<><C8A1>Ƭѡ
|
||||
W25QXX_Wait_Busy(); // <20>ȴ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
//<2F><EFBFBD><DEBC><EFBFBD>дSPI FLASH
|
||||
//<2F><><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>д<EFBFBD>ĵ<EFBFBD>ַ<EFBFBD><D6B7>Χ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>Ϊ0XFF,<2C><><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>0XFF<46><46>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD>ʧ<EFBFBD><CAA7>!
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>ʼд<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ҫȷ<D2AA><C8B7><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>Խ<EFBFBD><D4BD>!
|
||||
//pBuffer:<3A><><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
//WriteAddr:<3A><>ʼд<CABC><D0B4><EFBFBD>ĵ<EFBFBD>ַ(24bit)
|
||||
//NumByteToWrite:Ҫд<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>65535)
|
||||
//CHECK OK
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void W25QXX_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><EFBFBD><DEBC><EFBFBD>дSPI FLASH
|
||||
// <20><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>: u8* pBuffer<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ洢<EFBFBD><EFBFBD>
|
||||
// u32 WriteAddr<64><72><EFBFBD><EFBFBD>ʼд<CABC><D0B4><EFBFBD>ĵ<EFBFBD>ַ(24bit)
|
||||
// u16 NumByteToWrite<74><65>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD><EFBFBD>65535)
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>д<EFBFBD>ĵ<EFBFBD>ַ<EFBFBD><D6B7>Χ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>Ϊ0XFF,<2C><><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>0XFF<46><46>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD>ʧ<EFBFBD><CAA7>!
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>!
|
||||
// <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼд<CABC><D0B4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ҫȷ<D2AA><C8B7><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>Խ<EFBFBD><D4BD>!
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void W25QXX_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
|
||||
{
|
||||
u16 pageremain;
|
||||
pageremain=256-WriteAddr%256; //<2F><>ҳʣ<D2B3><CAA3><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
if(NumByteToWrite<=pageremain)pageremain=NumByteToWrite;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>256<35><36><EFBFBD>ֽ<EFBFBD>
|
||||
pageremain=256-WriteAddr%256; // <EFBFBD><EFBFBD>ҳʣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
|
||||
if(NumByteToWrite<=pageremain)
|
||||
pageremain=NumByteToWrite; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>256<35><36><EFBFBD>ֽ<EFBFBD>
|
||||
while(1)
|
||||
{
|
||||
W25QXX_Write_Page(pBuffer,WriteAddr,pageremain);
|
||||
if(NumByteToWrite==pageremain)break;//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else //NumByteToWrite>pageremain
|
||||
if(NumByteToWrite==pageremain)
|
||||
break; // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else // NumByteToWrite>pageremain
|
||||
{
|
||||
pBuffer+=pageremain;
|
||||
WriteAddr+=pageremain;
|
||||
|
||||
NumByteToWrite-=pageremain; //<2F><>ȥ<EFBFBD>Ѿ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>˵<EFBFBD><CBB5>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
if(NumByteToWrite>256)pageremain=256; //һ<>ο<EFBFBD><CEBF><EFBFBD>д<EFBFBD><D0B4>256<35><36><EFBFBD>ֽ<EFBFBD>
|
||||
else pageremain=NumByteToWrite; //<2F><><EFBFBD><EFBFBD>256<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
|
||||
NumByteToWrite-=pageremain; // <EFBFBD><EFBFBD>ȥ<EFBFBD>Ѿ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
|
||||
if(NumByteToWrite>256)
|
||||
pageremain=256; // һ<>ο<EFBFBD><CEBF><EFBFBD>д<EFBFBD><EFBFBD>256<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||||
else
|
||||
pageremain=NumByteToWrite; // <20><><EFBFBD><EFBFBD>256<35><36><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
//дSPI FLASH
|
||||
//<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼд<CABC><D0B4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
||||
//pBuffer:<3A><><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
//WriteAddr:<3A><>ʼд<CABC><D0B4><EFBFBD>ĵ<EFBFBD>ַ(24bit)
|
||||
//NumByteToWrite:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD><EFBFBD>65535)
|
||||
u8 W25QXX_BUFFER[4096];
|
||||
|
||||
u8 W25QXX_BUFFER[4096];
|
||||
//-----------------------------------------------------------------
|
||||
// void W25QXX_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: дSPI FLASH
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u8* pBuffer<65><72><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2>
|
||||
// u32 WriteAddr<64><72><EFBFBD><EFBFBD>ʼд<CABC><D0B4><EFBFBD>ĵ<EFBFBD>ַ(24bit)
|
||||
// u16 NumByteToWrite<74><65>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>(<28><><EFBFBD><EFBFBD>65535)
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void W25QXX_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
|
||||
{
|
||||
u32 secpos;
|
||||
@@ -244,94 +327,149 @@ void W25QXX_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
|
||||
u16 secremain;
|
||||
u16 i;
|
||||
u8 * W25QXX_BUF;
|
||||
W25QXX_BUF=W25QXX_BUFFER;
|
||||
secpos=WriteAddr/4096;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
secoff=WriteAddr%4096;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
secremain=4096-secoff;//<2F><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>С
|
||||
//printf("ad:%X,nb:%X\r\n",WriteAddr,NumByteToWrite);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(NumByteToWrite<=secremain)secremain=NumByteToWrite;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4096<39><36><EFBFBD>ֽ<EFBFBD>
|
||||
W25QXX_BUF=W25QXX_BUFFER;
|
||||
secpos=WriteAddr/4096; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
secoff=WriteAddr%4096; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ƫ<EFBFBD><EFBFBD>
|
||||
secremain=4096-secoff; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD>С
|
||||
if(NumByteToWrite<=secremain)
|
||||
secremain=NumByteToWrite;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4096<39><36><EFBFBD>ֽ<EFBFBD>
|
||||
while(1)
|
||||
{
|
||||
W25QXX_Read(W25QXX_BUF,secpos*4096,4096);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(i=0;i<secremain;i++)//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
W25QXX_Read(W25QXX_BUF,secpos*4096,4096); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(i=0;i<secremain;i++) // У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(W25QXX_BUF[secoff+i]!=0XFF)break;//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
||||
if(W25QXX_BUF[secoff+i]!=0XFF)
|
||||
break;// <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
||||
}
|
||||
if(i<secremain)//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
||||
if(i<secremain)// <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
W25QXX_Erase_Sector(secpos);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(i=0;i<secremain;i++) //<2F><><EFBFBD><EFBFBD>
|
||||
W25QXX_Erase_Sector(secpos); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(i=0;i<secremain;i++) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
W25QXX_BUF[i+secoff]=pBuffer[i];
|
||||
}
|
||||
W25QXX_Write_NoCheck(W25QXX_BUF,secpos*4096,4096);//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
W25QXX_Write_NoCheck(W25QXX_BUF,secpos*4096,4096);// д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
}else W25QXX_Write_NoCheck(pBuffer,WriteAddr,secremain);//д<>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>,ֱ<><D6B1>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
if(NumByteToWrite==secremain)break;//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else//д<><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
else
|
||||
W25QXX_Write_NoCheck(pBuffer,WriteAddr,secremain);// д<EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>,ֱ<><D6B1>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
if(NumByteToWrite==secremain)
|
||||
break; // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else // д<><D0B4>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
|
||||
{
|
||||
secpos++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>1
|
||||
secoff=0;//ƫ<><C6AB>λ<EFBFBD><CEBB>Ϊ0
|
||||
secpos++;// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>1
|
||||
secoff=0;// ƫ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>Ϊ0
|
||||
|
||||
pBuffer+=secremain; //ָ<><D6B8>ƫ<EFBFBD><C6AB>
|
||||
WriteAddr+=secremain;//д<><D0B4>ַƫ<D6B7><C6AB>
|
||||
NumByteToWrite-=secremain; //<2F>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݼ<EFBFBD>
|
||||
if(NumByteToWrite>4096)secremain=4096; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
else secremain=NumByteToWrite; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
pBuffer+=secremain; // ָ<EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
|
||||
WriteAddr+=secremain; // д<EFBFBD><EFBFBD>ַƫ<EFBFBD><EFBFBD>
|
||||
NumByteToWrite-=secremain; // <EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD>
|
||||
if(NumByteToWrite>4096)
|
||||
secremain=4096; // <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else
|
||||
secremain=NumByteToWrite; // <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ
|
||||
//<2F>ȴ<EFBFBD>ʱ<EFBFBD>䳬<EFBFBD><E4B3AC>...
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void W25QXX_Erase_Chip(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void W25QXX_Erase_Chip(void)
|
||||
{
|
||||
W25QXX_Write_Enable(); //SET WEL
|
||||
W25QXX_Wait_Busy();
|
||||
W25QXX_CS=0; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI5_ReadWriteByte(W25X_ChipErase); //<2F><><EFBFBD><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
W25QXX_CS=1; //ȡ<><C8A1>Ƭѡ
|
||||
W25QXX_Wait_Busy(); //<2F>ȴ<EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
W25QXX_Write_Enable(); // SET WEL
|
||||
W25QXX_Wait_Busy();
|
||||
W25QXX_CS=0; // ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI1_ReadWriteByte(W25X_ChipErase); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
W25QXX_CS=1; // ȡ<EFBFBD><EFBFBD>Ƭѡ
|
||||
W25QXX_Wait_Busy(); // <EFBFBD>ȴ<EFBFBD>оƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//Dst_Addr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>:150ms
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void W25QXX_Erase_Sector(u32 Dst_Addr)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: u32 Dst_Addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>:150ms
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void W25QXX_Erase_Sector(u32 Dst_Addr)
|
||||
{
|
||||
//<2F><><EFBFBD><EFBFBD>falsh<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//printf("fe:%x\r\n",Dst_Addr);
|
||||
{
|
||||
Dst_Addr*=4096;
|
||||
W25QXX_Write_Enable(); //SET WEL
|
||||
W25QXX_Wait_Busy();
|
||||
W25QXX_CS=0; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI5_ReadWriteByte(W25X_SectorErase); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
if(W25QXX_TYPE==W25Q256) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W25Q256<35>Ļ<EFBFBD><C4BB><EFBFBD>ַΪ4<CEAA>ֽڵģ<DAB5>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8λ
|
||||
{
|
||||
SPI5_ReadWriteByte((u8)((Dst_Addr)>>24));
|
||||
}
|
||||
SPI5_ReadWriteByte((u8)((Dst_Addr)>>16)); //<2F><><EFBFBD><EFBFBD>24bit<69><74>ַ
|
||||
SPI5_ReadWriteByte((u8)((Dst_Addr)>>8));
|
||||
SPI5_ReadWriteByte((u8)Dst_Addr);
|
||||
W25QXX_CS=1; //ȡ<><C8A1>Ƭѡ
|
||||
W25QXX_Wait_Busy(); //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
W25QXX_Write_Enable(); // SET WEL
|
||||
W25QXX_Wait_Busy();
|
||||
W25QXX_CS=0; // ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI1_ReadWriteByte(W25X_SectorErase); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
||||
if(W25QXX_TYPE==W25Q256) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W25Q256<EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD>ַΪ4<EFBFBD>ֽڵģ<EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8λ
|
||||
{
|
||||
SPI1_ReadWriteByte((u8)((Dst_Addr)>>24));
|
||||
}
|
||||
SPI1_ReadWriteByte((u8)((Dst_Addr)>>16)); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>24bit<EFBFBD><EFBFBD>ַ
|
||||
SPI1_ReadWriteByte((u8)((Dst_Addr)>>8));
|
||||
SPI1_ReadWriteByte((u8)Dst_Addr);
|
||||
W25QXX_CS=1; // ȡ<EFBFBD><EFBFBD>Ƭѡ
|
||||
W25QXX_Wait_Busy(); // <EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void W25QXX_Wait_Busy(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void W25QXX_Wait_Busy(void)
|
||||
{
|
||||
while((W25QXX_ReadSR(1)&0x01)==0x01); // <20>ȴ<EFBFBD>BUSYλ<59><CEBB><EFBFBD><EFBFBD>
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void W25QXX_PowerDown(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void W25QXX_PowerDown(void)
|
||||
{
|
||||
W25QXX_CS=0; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI5_ReadWriteByte(W25X_PowerDown); //<2F><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
W25QXX_CS=1; //ȡ<><C8A1>Ƭѡ
|
||||
delay_us(3); //<2F>ȴ<EFBFBD>TPD
|
||||
W25QXX_CS=0; // ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI1_ReadWriteByte(W25X_PowerDown); // <EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
W25QXX_CS=1; // ȡ<EFBFBD><EFBFBD>Ƭѡ
|
||||
delay_us(3); // <EFBFBD>ȴ<EFBFBD>TPD
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// void W25QXX_WAKEUP(void)
|
||||
//-----------------------------------------------------------------
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>: <20><>
|
||||
// <20><> <20><> ֵ: <20><>
|
||||
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
void W25QXX_WAKEUP(void)
|
||||
{
|
||||
W25QXX_CS=0; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI5_ReadWriteByte(W25X_ReleasePowerDown); // send W25X_PowerDown command 0xAB
|
||||
W25QXX_CS=1; //ȡ<><C8A1>Ƭѡ
|
||||
delay_us(3); //<2F>ȴ<EFBFBD>TRES1
|
||||
W25QXX_CS=0; // ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SPI1_ReadWriteByte(W25X_ReleasePowerDown); // send W25X_PowerDown command 0xAB
|
||||
W25QXX_CS=1; // ȡ<EFBFBD><EFBFBD>Ƭѡ
|
||||
delay_us(3); // <EFBFBD>ȴ<EFBFBD>TRES1
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
@@ -1,26 +1,29 @@
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// W25QXX<58><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
|
||||
// <20><> <20><>: <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 2018-08-04
|
||||
// <20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// <20><>ǰ<EFBFBD>汾: V1.0
|
||||
// <20><>ʷ<EFBFBD>汾:
|
||||
// - V1.0: (2018-08-04)W25QXX<58><58>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>: <20><><EFBFBD><EFBFBD>STM32F429+CycloneIV<49><56><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>塢LZE_ST_LINK2
|
||||
// ˵ <20><>:
|
||||
//
|
||||
//-----------------------------------------------------------------
|
||||
#ifndef __W25QXX_H
|
||||
#define __W25QXX_H
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>ѧϰʹ<EFBFBD>ã<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>;
|
||||
//ALIENTEK STM32F429<32><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//W25QXX<58><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/16
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
#include "stm32f429_winner.h"
|
||||
//-----------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
extern u16 W25QXX_TYPE; // <20><><EFBFBD><EFBFBD>W25QXXоƬ<D0BE>ͺ<EFBFBD>
|
||||
|
||||
//W25Xϵ<EFBFBD><EFBFBD>/Qϵ<51><CFB5>оƬ<D0BE>б<EFBFBD>
|
||||
//W25Q80 ID 0XEF13
|
||||
//W25Q16 ID 0XEF14
|
||||
//W25Q32 ID 0XEF15
|
||||
//W25Q64 ID 0XEF16
|
||||
//W25Q128 ID 0XEF17
|
||||
//W25Q256 ID 0XEF18
|
||||
//-----------------------------------------------------------------
|
||||
// <20>궨<EFBFBD><EAB6A8>
|
||||
//-----------------------------------------------------------------
|
||||
// W25Xϵ<EFBFBD><EFBFBD>/Qϵ<51><CFB5>оƬ<D0BE>б<EFBFBD>
|
||||
#define W25Q80 0XEF13
|
||||
#define W25Q16 0XEF14
|
||||
#define W25Q32 0XEF15
|
||||
@@ -28,49 +31,50 @@
|
||||
#define W25Q128 0XEF17
|
||||
#define W25Q256 0XEF18
|
||||
|
||||
extern u16 W25QXX_TYPE; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>W25QXXоƬ<EFBFBD>ͺ<EFBFBD>
|
||||
#define W25QXX_CS PGout(3) // W25QXX<EFBFBD><EFBFBD>Ƭѡ<EFBFBD>ź<EFBFBD>
|
||||
|
||||
#define W25QXX_CS PFout(6) //W25QXX<58><58>Ƭѡ<C6AC>ź<EFBFBD>
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//ָ<><D6B8><EFBFBD><EFBFBD>
|
||||
#define W25X_WriteEnable 0x06
|
||||
#define W25X_WriteDisable 0x04
|
||||
#define W25X_ReadStatusReg1 0x05
|
||||
#define W25X_ReadStatusReg2 0x35
|
||||
#define W25X_ReadStatusReg3 0x15
|
||||
#define W25X_WriteEnable 0x06
|
||||
#define W25X_WriteDisable 0x04
|
||||
#define W25X_ReadStatusReg1 0x05
|
||||
#define W25X_ReadStatusReg2 0x35
|
||||
#define W25X_ReadStatusReg3 0x15
|
||||
#define W25X_WriteStatusReg1 0x01
|
||||
#define W25X_WriteStatusReg2 0x31
|
||||
#define W25X_WriteStatusReg3 0x11
|
||||
#define W25X_ReadData 0x03
|
||||
#define W25X_FastReadData 0x0B
|
||||
#define W25X_FastReadDual 0x3B
|
||||
#define W25X_PageProgram 0x02
|
||||
#define W25X_BlockErase 0xD8
|
||||
#define W25X_SectorErase 0x20
|
||||
#define W25X_ChipErase 0xC7
|
||||
#define W25X_PowerDown 0xB9
|
||||
#define W25X_ReleasePowerDown 0xAB
|
||||
#define W25X_DeviceID 0xAB
|
||||
#define W25X_ManufactDeviceID 0x90
|
||||
#define W25X_JedecDeviceID 0x9F
|
||||
#define W25X_ReadData 0x03
|
||||
#define W25X_FastReadData 0x0B
|
||||
#define W25X_FastReadDual 0x3B
|
||||
#define W25X_PageProgram 0x02
|
||||
#define W25X_BlockErase 0xD8
|
||||
#define W25X_SectorErase 0x20
|
||||
#define W25X_ChipErase 0xC7
|
||||
#define W25X_PowerDown 0xB9
|
||||
#define W25X_ReleasePowerDown 0xAB
|
||||
#define W25X_DeviceID 0xAB
|
||||
#define W25X_ManufactDeviceID 0x90
|
||||
#define W25X_JedecDeviceID 0x9F
|
||||
#define W25X_Enable4ByteAddr 0xB7
|
||||
#define W25X_Exit4ByteAddr 0xE9
|
||||
|
||||
void W25QXX_Init(void);
|
||||
u16 W25QXX_ReadID(void); //<2F><>ȡFLASH ID
|
||||
u8 W25QXX_ReadSR(u8 regno); //<2F><>ȡ״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
void W25QXX_4ByteAddr_Enable(void); //ʹ<EFBFBD><EFBFBD>4<EFBFBD>ֽڵ<EFBFBD>ַģʽ
|
||||
void W25QXX_Write_SR(u8 regno,u8 sr); //д״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
|
||||
void W25QXX_Write_Enable(void); //дʹ<EFBFBD><EFBFBD>
|
||||
void W25QXX_Write_Disable(void); //д<><EFBFBD><EFBFBD><EFBFBD>
|
||||
void W25QXX_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite);
|
||||
void W25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead); //<2F><>ȡflash
|
||||
void W25QXX_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite);//д<><D0B4>flash
|
||||
void W25QXX_Erase_Chip(void); //<2F><>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>
|
||||
void W25QXX_Erase_Sector(u32 Dst_Addr); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void W25QXX_Wait_Busy(void); //<EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void W25QXX_PowerDown(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
void W25QXX_WAKEUP(void); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-----------------------------------------------------------------
|
||||
extern void W25QXX_Init(void);
|
||||
extern u16 W25QXX_ReadID(void); // <EFBFBD><EFBFBD>ȡFLASH ID
|
||||
extern u8 W25QXX_ReadSR(u8 regno); // <20><>ȡ״̬<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
|
||||
extern void W25QXX_4ByteAddr_Enable(void); // ʹ<EFBFBD><EFBFBD>4<EFBFBD>ֽڵ<EFBFBD>ַģʽ
|
||||
extern void W25QXX_Write_SR(u8 regno,u8 sr); // д״̬<D7B4>Ĵ<EFBFBD><EFBFBD><EFBFBD>
|
||||
extern void W25QXX_Write_Enable(void); // дʹ<D0B4><CAB9>
|
||||
extern void W25QXX_Write_Disable(void); // д<><D0B4><EFBFBD><EFBFBD>
|
||||
extern void W25QXX_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite);
|
||||
extern void W25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead); // <20><>ȡflash
|
||||
extern void W25QXX_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite);// д<><D0B4>flash
|
||||
extern void W25QXX_Erase_Chip(void); // <20><>Ƭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
extern void W25QXX_Erase_Sector(u32 Dst_Addr); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
extern void W25QXX_Wait_Busy(void); // <20>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
extern void W25QXX_PowerDown(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
extern void W25QXX_WAKEUP(void); // <20><><EFBFBD><EFBFBD>
|
||||
#endif
|
||||
//-----------------------------------------------------------------
|
||||
// End Of File
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
631
MY/cnn.c
631
MY/cnn.c
@@ -1,631 +0,0 @@
|
||||
#include "cnn.h"
|
||||
|
||||
u8 isrun;
|
||||
|
||||
void _cnn_run(){
|
||||
isrun = 1;
|
||||
}
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>*/
|
||||
/// @brief <20><>ӡͼ<D3A1><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param array <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param array_num <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ܵĸ<DCB5><C4B8><EFBFBD>
|
||||
/// @param elements_per_line ÿһ<C3BF>еĸ<D0B5><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
void PrintfArray(float *array, int array_num, int elements_per_line)
|
||||
{
|
||||
for (int i = 0; i < array_num; i++)
|
||||
{
|
||||
printf("%f ", array[i]); // <20><>ӡ<EFBFBD><D3A1>ǰԪ<C7B0><D4AA>
|
||||
// ÿ<><C3BF>ӡ<EFBFBD><D3A1>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
if ((i + 1) % elements_per_line == 0)
|
||||
{
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ԫ<EFBFBD>ز<EFBFBD><D8B2>㣬<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (array_num % elements_per_line != 0)
|
||||
{
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void PrintfResArray(float *array, int array_num, int elements_per_line)
|
||||
{
|
||||
for (int i = 0; i < array_num; i++)
|
||||
{
|
||||
printf("%f ", array[i]); // <20><>ӡ<EFBFBD><D3A1>ǰԪ<C7B0><D4AA>
|
||||
// ÿ<><C3BF>ӡ<EFBFBD><D3A1>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
if ((i + 1) % elements_per_line == 0)
|
||||
{
|
||||
printf("\t");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*<2A><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>*/
|
||||
/// @brief <20><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά<EFBFBD><CEAC><EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD><EFBFBD>ΪelementSize
|
||||
/// @param depth <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>a[depth][]
|
||||
/// @param num <20><><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>a[][num]
|
||||
/// @param elementSize <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void **allocate2DArray(int depth, int num, size_t elementSize)
|
||||
{
|
||||
void **array = (void **)mymalloc(SRAMEX, depth * sizeof(void *));
|
||||
for (int d = 0; d < depth; d++)
|
||||
{
|
||||
array[d] = mymalloc(SRAMEX, num * elementSize);
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
/// @brief <20>ͷ<EFBFBD>ͨ<EFBFBD><CDA8>allocate2DArray<61><79><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
|
||||
/// @param array <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
|
||||
/// @param depth <20><><EFBFBD><EFBFBD>
|
||||
void free2DArray(float **array, int depth)
|
||||
{
|
||||
for (int d = 0; d < depth; d++)
|
||||
{
|
||||
myfree(SRAMEX, array[d]);
|
||||
}
|
||||
myfree(SRAMEX, array);
|
||||
}
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>*/
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磺100<30><30>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>100<30><30>Ԫ<EFBFBD><D4AA>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Full(float *inputArray, int input_size, float *outputArray)
|
||||
{
|
||||
int i, j;
|
||||
for (i = 0; i < ((input_size + 2) * (input_size + 2)); i++)
|
||||
{
|
||||
outputArray[i] = 0;
|
||||
}
|
||||
for (i = 0; i < input_size; i++)
|
||||
{
|
||||
for (j = 0; j < input_size; j++)
|
||||
{
|
||||
outputArray[(i + 1) * (input_size + 2) + (j + 1)] = inputArray[i * input_size + j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>гػ<D0B3><D8BB><EFBFBD>ѡȡkernel_size*kernel_size<7A>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊstep
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param kernel_size <20>ػ<EFBFBD><D8BB>˵ĵ<CBB5><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param step <20><><EFBFBD><EFBFBD>ֵ
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Pooling(float *inputArray, int input_size,
|
||||
int kernel_size, unsigned int step,
|
||||
float *outputArray)
|
||||
{
|
||||
int output_size = (input_size - kernel_size) / step + 1;
|
||||
|
||||
for (int i = 0; i < output_size; i++)
|
||||
{
|
||||
for (int j = 0; j < output_size; j++)
|
||||
{
|
||||
float max_value = 0;
|
||||
|
||||
for (int m = 0; m < kernel_size; m++)
|
||||
{
|
||||
for (int n = 0; n < kernel_size; n++)
|
||||
{
|
||||
int input_row = i * step + m;
|
||||
int input_col = j * step + n;
|
||||
int input_idx = input_row * input_size + input_col;
|
||||
|
||||
if (inputArray[input_idx] > max_value)
|
||||
{
|
||||
max_value = inputArray[input_idx];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int output_idx = i * output_size + j;
|
||||
outputArray[output_idx] = max_value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD>ѡȡkernel_size*kernel_size<7A>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD>ﲽ<EFBFBD><EFB2BD>Ϊ1
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param kernel <20><><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>kernel_size * kernel_size<7A>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
/// @param kernel_size <20>ػ<EFBFBD><D8BB>˵ĵ<CBB5><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Convolution(float *inputArray, int input_size,
|
||||
float *kernel, int kernel_size,
|
||||
float *outputArray)
|
||||
{
|
||||
int i, j, m, n;
|
||||
int half_k = kernel_size / 2;
|
||||
int output_size = input_size - 2 * half_k;
|
||||
|
||||
for (i = half_k; i < input_size - half_k; i++)
|
||||
{
|
||||
for (j = half_k; j < input_size - half_k; j++)
|
||||
{
|
||||
float sum = 0;
|
||||
|
||||
for (m = 0; m < kernel_size; m++)
|
||||
{
|
||||
for (n = 0; n < kernel_size; n++)
|
||||
{
|
||||
int input_row = i + m - half_k;
|
||||
int input_col = j + n - half_k;
|
||||
int input_idx = input_row * input_size + input_col;
|
||||
int kernel_idx = m * kernel_size + n;
|
||||
sum += inputArray[input_idx] * kernel[kernel_idx];
|
||||
}
|
||||
}
|
||||
int output_idx = (i - half_k) * output_size + (j - half_k);
|
||||
outputArray[output_idx] = sum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief <20>Զ<EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧλ<D3A6><CEBB><EFBFBD><EFBFBD>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_depth <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>a[input_depth][]
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Combine(float **inputArray, int input_depth, int input_size, float *outputArray)
|
||||
{
|
||||
int i, j, k;
|
||||
int input_idx;
|
||||
|
||||
for (i = 0; i < input_size; i++)
|
||||
{
|
||||
|
||||
for (j = 0; j < input_size; j++)
|
||||
{
|
||||
float sum = 0;
|
||||
|
||||
input_idx = i * input_size + j;
|
||||
for (k = 0; k < input_depth; k++)
|
||||
{
|
||||
sum += inputArray[k][input_idx];
|
||||
}
|
||||
outputArray[i * input_size + j] = sum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief չ<><D5B9><EFBFBD><EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һά<D2BB><CEAC><EFBFBD><EFBFBD>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_depth <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>a[input_depth][]
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Flatten2D(float **inputArray, int input_depth, int input_size, float *outputArray)
|
||||
{
|
||||
int i, j, k;
|
||||
for (k = 0; k < input_depth; k++)
|
||||
{
|
||||
for (i = 0; i < input_size; i++)
|
||||
{
|
||||
for (j = 0; j < input_size; j++)
|
||||
{
|
||||
int input_idx = i * input_size + j;
|
||||
outputArray[k * input_size * input_size + input_idx] = inputArray[k][input_idx];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ÿһλ<D2BB><CEBB><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_num <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ܵ<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param bias ƫ<>ú<EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void AddBias(float *inputArray, int input_num, float bias, float *outputArray)
|
||||
{
|
||||
for (int i = 0; i < input_num; i++)
|
||||
{
|
||||
outputArray[i] = inputArray[i] + bias;
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief ȫ<><C8AB><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_num <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ܵ<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param input_w <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD>غ<EFBFBD>
|
||||
/// @param input_b <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ú<EFBFBD>
|
||||
/// @return һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊfloat
|
||||
float ConnectedLayer(float *inputArray, int input_num,
|
||||
float *input_w, float input_b)
|
||||
{
|
||||
int i;
|
||||
float sum = 0;
|
||||
for (i = 0; i < input_num; i++)
|
||||
{
|
||||
sum += inputArray[i] * input_w[i];
|
||||
}
|
||||
sum = sum + input_b;
|
||||
return sum;
|
||||
}
|
||||
|
||||
/// @brief ReLU<4C><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƕ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3BA>ֵ<EFBFBD><D6B5><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param num <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ܵ<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
void ReLU1(float *inputArray, int num, float *outputArray)
|
||||
{
|
||||
for (int i = 0; i < num; i++) {
|
||||
outputArray[i] = (inputArray[i] > 0) ? inputArray[i] : 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief ReLU<4C><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƕ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3BA>ֵ<EFBFBD><D6B5><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
/// @param data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊfloat
|
||||
float ReLU2(float data)
|
||||
{
|
||||
if (data > 0) {
|
||||
return data;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ
|
||||
|
||||
/// @brief <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͱ<EFBFBD><EFBFBD><D7BC>
|
||||
/// @param arr <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param size <20><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
/// @param max_val <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
/// @param mean ƽ<><C6BD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
/// @param std_dev <20><><EFBFBD><EFBFBD><EEB1A3>
|
||||
void calculate_statistics(float arr[], int size, float *max_val, float *mean, float *std_dev)
|
||||
{
|
||||
*max_val = fabs(arr[0]);
|
||||
float sum = 0.0;
|
||||
float sum_sq = 0.0;
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
float abs_val = fabs(arr[i]);
|
||||
|
||||
if (abs_val > *max_val) {
|
||||
*max_val = abs_val;
|
||||
}
|
||||
sum += abs_val;
|
||||
sum_sq += abs_val * abs_val;
|
||||
}
|
||||
|
||||
*mean = sum / size;
|
||||
|
||||
float variance = (sum_sq / size) - (*mean * *mean);
|
||||
*std_dev = sqrt(variance);
|
||||
}
|
||||
//<2F>жϷŵ<CFB7>
|
||||
|
||||
/// @brief <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ŵ<EFBFBD>
|
||||
/// @param arr <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param size <20><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
/// @param mean ƽ<><C6BD>ֵ
|
||||
/// @param std_dev <20><><EFBFBD><D7BC>
|
||||
/// @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
int check_threshold(float arr[], int size, float *mean, float *std_dev)
|
||||
{
|
||||
const float threshold = 20.0;
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
float K = (arr[i] - *mean) / *std_dev;
|
||||
if (K > threshold) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD>100*100<30><30><EFBFBD><EFBFBD>
|
||||
/// @param get_data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param Max_value <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
/// @param totalPoints <20>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param CNN_data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飨<EFBFBD><E9A3A8>ά<EFBFBD><CEAC>
|
||||
void generateMatrix(float *get_data, float Max_value, int totalPoints, float CNN_data[100*100])
|
||||
{
|
||||
for (int i = 0; i < 100; i++) {
|
||||
for (int j = 0; j < 100; j++) {
|
||||
CNN_data[i*100+j] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
int pointsPerInterval = totalPoints / 100;
|
||||
float amplitudeStep = Max_value / 100;
|
||||
|
||||
for (int i = 0; i < totalPoints; i++) {
|
||||
float amplitudeValue = fabsf(get_data[i]);
|
||||
|
||||
if (amplitudeValue == 0.0f) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int intervalIndex = i / pointsPerInterval;
|
||||
if (intervalIndex >= 100) intervalIndex = 99;
|
||||
|
||||
int amplitudeIndex = 99 - (int)(amplitudeValue / amplitudeStep);
|
||||
if (amplitudeIndex < 0) amplitudeIndex = 0;
|
||||
|
||||
CNN_data[amplitudeIndex*100+intervalIndex]++;
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param input_array <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param output_array <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param input_num <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @return <20><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>+1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a[0]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>
|
||||
int calculate_probabilities(float *input_array, float *output_array, int input_num)
|
||||
{
|
||||
float sum = 0.0;
|
||||
float temp[input_num];
|
||||
for (int i = 0; i < input_num; i++)
|
||||
{
|
||||
temp[i] = exp(input_array[i]);
|
||||
sum = sum + temp[i];
|
||||
}
|
||||
for (int j = 0; j < input_num; j++)
|
||||
{
|
||||
output_array[j] = temp[j] / sum;
|
||||
}
|
||||
int max_index = 0;
|
||||
float max_value = output_array[0];
|
||||
for (int k = 1; k < input_num; k++)
|
||||
{
|
||||
if (output_array[k] > max_value)
|
||||
{
|
||||
max_value = output_array[k];
|
||||
max_index = k;
|
||||
}
|
||||
}
|
||||
return max_index + 1;
|
||||
}
|
||||
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD>*/
|
||||
|
||||
/*ԭʼ<D4AD><CABC><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
|
||||
*Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD>֤<EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>㣬<EFBFBD>п<EFBFBD><D0BF>ܳ<EFBFBD><DCB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*Ŀǰû<C7B0><C3BB><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>㡣
|
||||
*ԭʼ<D4AD><CABC><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
/// @param data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һά<D2BB><CEAC><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD> --> data.array<61><79><EFBFBD><EFBFBD>
|
||||
/// @param size ԭʼ<D4AD><CABC><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD> --> data.maxlength<74><68><EFBFBD><EFBFBD>
|
||||
void cnn_run()
|
||||
{
|
||||
float maxvalue = 0.0; //<2F><><EFBFBD><EFBFBD>ֵ
|
||||
float meanvalue = 0.0; //ƽ<><C6BD>ֵ
|
||||
float std_devvalue = 0.0; //<2F><><EFBFBD><D7BC>
|
||||
int index = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>ɶ<EFBFBD>ģ<EFBFBD>
|
||||
float *Matrix_data = (float*)mymalloc(SRAMEX, sizeof(float) * 100 * 100); //<2F><><EFBFBD>ɵ<EFBFBD>100*100<30>ľ<EFBFBD><C4BE><EFBFBD><F3B1A3B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
printf("CNNģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\nData<EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD>Ϊ<EFBFBD><EFBFBD>%s\r\n",data.dname);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",0,data.array[0]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",1,data.array[1]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",2,data.array[2]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",299,data.array[299]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",300,data.array[300]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",301,data.array[301]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",1249997,data.array[1249997]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",1249998,data.array[1249998]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",1249999,data.array[1249999]);
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
calculate_statistics(data.array, data.maxlength, &maxvalue, &meanvalue,&std_devvalue);
|
||||
|
||||
/*<2A>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<C7B7><F1B3ACB9><EFBFBD>ֵ*/
|
||||
int x = check_threshold(data.array, data.maxlength, &meanvalue, &std_devvalue);
|
||||
if (x == 1) {
|
||||
printf("Start\r\n");
|
||||
//pre <20><>ʼԤ<CABC><D4A4><EFBFBD><EFBFBD>
|
||||
/*<2A><><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>*/
|
||||
generateMatrix(data.array, maxvalue, data.maxlength, Matrix_data);
|
||||
float *CNN_data = (float*)mymalloc(SRAMEX, sizeof(float) * 100 * 100);
|
||||
/*<2A><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>תһά<D2BB><CEAC><EFBFBD>飬<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 100; i++) {
|
||||
for (int j = 0; j < 100; j++) {
|
||||
CNN_data[9999 - index++] = Matrix_data[i*100+j];
|
||||
}
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>һ<EFBFBD>㣡\r\n");
|
||||
//1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>*/
|
||||
float* Full_output1 = (float*)mymalloc(SRAMEX, sizeof(float) * 102 * 102);
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
Full(CNN_data, 100, Full_output1);
|
||||
float** Convolution_result1_before = (float**)allocate2DArray(32, 100 * 100, sizeof(float));
|
||||
float** Convolution_result1_relu = (float**)allocate2DArray(32, 100 * 100, sizeof(float));
|
||||
float** Convolution_result1 = (float**)allocate2DArray(32, 100 * 100, sizeof(float));
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 32; i++) {
|
||||
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>û<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD>*/
|
||||
float conv1_weight_new[9] = {
|
||||
conv1_weight.array[i*9+0],conv1_weight.array[i*9+1],
|
||||
conv1_weight.array[i*9+2],conv1_weight.array[i*9+3],
|
||||
conv1_weight.array[i*9+4],conv1_weight.array[i*9+5],
|
||||
conv1_weight.array[i*9+6],conv1_weight.array[i*9+7],
|
||||
conv1_weight.array[i*9+8] };
|
||||
Convolution(Full_output1, 102, conv1_weight_new, 3, Convolution_result1_before[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>*/
|
||||
for (int i = 0; i < 32; i++) {
|
||||
AddBias(Convolution_result1_before[i], 100 * 100, conv1_bias.array[i], Convolution_result1_relu[i]);
|
||||
}
|
||||
/*<2A><>ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 32; i++) {
|
||||
ReLU1(Convolution_result1_relu[i], 100 * 100, Convolution_result1[i]);
|
||||
}
|
||||
/*<2A>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float ** Pooling_result1 = (float**)allocate2DArray(32, 50 * 50, sizeof(float));
|
||||
for (int i = 0; i < 32; i++) {
|
||||
Pooling(Convolution_result1[i], 100, 2, 2, Pooling_result1[i]);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/*<2A>ͷ<EFBFBD><CDB7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ*/
|
||||
myfree(SRAMEX, Full_output1);
|
||||
free2DArray(Convolution_result1_relu,32);
|
||||
free2DArray(Convolution_result1_before,32);
|
||||
free2DArray(Convolution_result1,32);
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float** Full_output2 = (float**)allocate2DArray(32, 52 * 52, sizeof(float));
|
||||
for (int i = 0; i < 32; i++) {
|
||||
Full(Pooling_result1[i], 50, Full_output2[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD>뱾<EFBFBD><EBB1BE><EFBFBD><EFBFBD>Դ*/
|
||||
float** Convolution_result_temp_2 = (float**)allocate2DArray(32, 50 * 50, sizeof(float));
|
||||
float** Convolution_result2_before = (float**)allocate2DArray(64, 50 * 50, sizeof(float));
|
||||
float** Convolution_result2_relu = (float**)allocate2DArray(64, 50 * 50, sizeof(float));
|
||||
float** Convolution_result2 = (float**)allocate2DArray(64, 50 * 50, sizeof(float));
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 64; i++) {
|
||||
for (int j = 0; j < 32; j++) {
|
||||
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float conv2_weight_new[9] = {
|
||||
conv2_weight.array[i*32*9+9*j+0],conv2_weight.array[i*32*9+9*j+1],
|
||||
conv2_weight.array[i*32*9+9*j+2],conv2_weight.array[i*32*9+9*j+3],
|
||||
conv2_weight.array[i*32*9+9*j+4],conv2_weight.array[i*32*9+9*j+5],
|
||||
conv2_weight.array[i*32*9+9*j+6],conv2_weight.array[i*32*9+9*j+7],
|
||||
conv2_weight.array[i*32*9+9*j+8]
|
||||
};
|
||||
Convolution(Full_output2[j], 52, conv2_weight_new, 3, Convolution_result_temp_2[j]);
|
||||
}
|
||||
/*ÿһ<C3BF><D2BB><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ϲ<EFBFBD>*/
|
||||
Combine(Convolution_result_temp_2, 32, 50, Convolution_result2_before[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>*/
|
||||
for (int i = 0; i < 64; i++) {
|
||||
AddBias(Convolution_result2_before[i], 50 * 50, conv2_bias.array[i], Convolution_result2_relu[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD>ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 64; i++) {
|
||||
ReLU1(Convolution_result2_relu[i], 50 * 50, Convolution_result2[i]);
|
||||
}
|
||||
/*<2A>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float** Pooling_result2 = (float**)allocate2DArray(64, 25 * 25, sizeof(float));
|
||||
for (int i = 0; i < 64; i++) {
|
||||
Pooling(Convolution_result2[i], 50, 2, 2, Pooling_result2[i]);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/*<2A>ͷ<EFBFBD><CDB7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ*/
|
||||
free2DArray(Full_output2,32);
|
||||
free2DArray(Pooling_result1,32);
|
||||
free2DArray(Convolution_result_temp_2,32);
|
||||
free2DArray(Convolution_result2_relu,64);
|
||||
free2DArray(Convolution_result2_before,64);
|
||||
free2DArray(Convolution_result2,64);
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float** Full_output3 = (float**)allocate2DArray(64, 27 * 27, sizeof(float));
|
||||
for (int i = 0; i < 64; i++) {
|
||||
Full(Pooling_result2[i], 25, Full_output3[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD>뱾<EFBFBD><EBB1BE><EFBFBD><EFBFBD>Դ*/
|
||||
float** Convolution_result_temp_3 = (float**)allocate2DArray(64, 25 * 25, sizeof(float));
|
||||
float** Convolution_result3_before = (float**)allocate2DArray(128, 25 * 25, sizeof(float));
|
||||
float** Convolution_result3_relu = (float**)allocate2DArray(128, 25 * 25, sizeof(float));
|
||||
float** Convolution_result3 = (float**)allocate2DArray(128, 25 * 25, sizeof(float));
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 128; i++) {
|
||||
for (int j = 0; j < 64; j++) {
|
||||
float conv3_weight_new[9] = {
|
||||
conv3_weight.array[i*64*9+9*j+0],conv3_weight.array[i*64*9+9*j+1],
|
||||
conv3_weight.array[i*64*9+9*j+2],conv3_weight.array[i*64*9+9*j+3],
|
||||
conv3_weight.array[i*64*9+9*j+4],conv3_weight.array[i*64*9+9*j+5],
|
||||
conv3_weight.array[i*64*9+9*j+6],conv3_weight.array[i*64*9+9*j+7],
|
||||
conv3_weight.array[i*64*9+9*j+8]
|
||||
};
|
||||
Convolution(Full_output3[j], 27, conv3_weight_new, 3, Convolution_result_temp_3[j]);
|
||||
}
|
||||
/*<2A><>ͼ<EFBFBD><CDBC><EFBFBD>ϲ<EFBFBD>*/
|
||||
Combine(Convolution_result_temp_3, 64, 25, Convolution_result3_before[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>*/
|
||||
for (int i = 0; i < 128; i++) {
|
||||
AddBias(Convolution_result3_before[i], 25 * 25, conv3_bias.array[i], Convolution_result3_relu[i]);
|
||||
}
|
||||
/*ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 128; i++) {
|
||||
ReLU1(Convolution_result3_relu[i], 25 * 25, Convolution_result3[i]);
|
||||
}
|
||||
/*<2A>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float** Pooling_result3 = (float**)allocate2DArray(128, 12 * 12, sizeof(float));
|
||||
for (int i = 0; i < 128; i++) {
|
||||
Pooling(Convolution_result3_before[i], 25, 2, 2, Pooling_result3[i]);
|
||||
}
|
||||
/*<2A>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>һά<D2BB><CEAC><EFBFBD><EFBFBD>*/
|
||||
float* xi = (float *)mymalloc(SRAMEX, sizeof(float) * 128 * 12 * 12);
|
||||
Flatten2D(Pooling_result3, 128, 12, xi);
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//4 <20><>һ<EFBFBD><D2BB><EFBFBD>Ӳ<EFBFBD>
|
||||
/*<2A>ͷ<EFBFBD><CDB7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ*/
|
||||
free2DArray(Full_output3,64);
|
||||
free2DArray(Pooling_result2,64);
|
||||
free2DArray(Convolution_result_temp_3,64);
|
||||
free2DArray(Convolution_result3_relu,128);
|
||||
free2DArray(Convolution_result3_before,128);
|
||||
free2DArray(Convolution_result3,128);
|
||||
/*<2A><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
//float yi[128] = {0};
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>IJ㣡\r\n");
|
||||
float* yi = (float *)mymalloc(SRAMEX, 128 * sizeof(float));
|
||||
memset(yi, 0, 128 * sizeof(float));
|
||||
for (int i = 0; i < 128; i++) {
|
||||
float sum = 0;
|
||||
//float fc1_weight_new[128*12*12];
|
||||
float* fc1_weight_new = (float*)mymalloc(SRAMEX, sizeof(float) * 128 * 12 * 12);
|
||||
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
memcpy(fc1_weight_new,&fc1_weight.array[i*128*12*12],128*12*12 * sizeof(float));
|
||||
sum = ConnectedLayer(xi, 128 * 12 * 12, fc1_weight_new, fc1_bias.array[i]);
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
yi[i] = ReLU2(sum);
|
||||
myfree(SRAMEX, fc1_weight_new);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD>
|
||||
/*<2A>ͷ<EFBFBD><CDB7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ*/
|
||||
free2DArray(Pooling_result3,128);
|
||||
/*<2A><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float zi[7] = {0};
|
||||
// float *zi = (float *)mymalloc(SRAMEX, 7 * sizeof(float));
|
||||
// memset(zi, 0, 7 * sizeof(float));
|
||||
for (int i = 0; i < 7; i++) {
|
||||
//float fc2_weight_new[128];
|
||||
float* fc2_weight_new = (float*)mymalloc(SRAMEX, sizeof(float) * 128);
|
||||
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
memcpy(fc2_weight_new,&fc2_weight.array[i*128],128 * sizeof(float));
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
zi[i] = ConnectedLayer(yi, 128, fc2_weight_new, fc2_bias.array[i]);
|
||||
myfree(SRAMEX, fc2_weight_new);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//end <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float result[7];
|
||||
int max_probability_idx = calculate_probabilities(zi,result,7);
|
||||
PrintfResArray(zi,7,7);
|
||||
PrintfResArray(result,7,7);
|
||||
printf("%f, Label %d\t", result[max_probability_idx - 1] * 100, max_probability_idx);
|
||||
myfree(SRAMEX, xi);
|
||||
myfree(SRAMEX, yi);
|
||||
myfree(SRAMEX, CNN_data);
|
||||
myfree(SRAMEX, Full_output1);
|
||||
myfree(SRAMEX, Matrix_data);
|
||||
}
|
||||
else printf("No\r\n");/*<2A><><EFBFBD><EFBFBD>û<EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>ӡ<EFBFBD><D3A1>No<4E><6F>*/
|
||||
printf("maxvalue is:%f\t",maxvalue);
|
||||
printf("meanvalue is:%f\t",meanvalue);
|
||||
printf("std_devvalue is:%f\r\n",std_devvalue);
|
||||
isrun = 0;
|
||||
}
|
||||
|
||||
34
MY/cnn.h
34
MY/cnn.h
@@ -1,34 +0,0 @@
|
||||
#ifndef _CNN_H_
|
||||
#define _CNN_H_
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include "my.h"
|
||||
|
||||
extern u8 isrun;
|
||||
|
||||
void PrintfArray(float *array, int array_num, int elements_per_line);
|
||||
void **allocate2DArray(int depth, int num, size_t elementSize);
|
||||
void free2DArray(float **array, int depth);
|
||||
void Full(float *inputArray, int input_size, float *outputArray);
|
||||
void Pooling(float *inputArray, int input_size, int kernel_size, unsigned int step, float *outputArray);
|
||||
void Convolution(float *inputArray, int input_size, float *kernel, int kernel_size, float *outputArray);
|
||||
void Combine(float **inputArray, int input_depth, int input_size, float *outputArray);
|
||||
void Flatten2D(float **inputArray, int input_depth, int input_size, float *outputArray);
|
||||
float ConnectedLayer(float *inputArray, int input_num, float *input_w, float input_b);
|
||||
void ReLU1(float *inputArray, int num, float *outputArray);
|
||||
float ReLU2(float data);
|
||||
void AddBias(float *inputArray, int input_num, float bias, float *outputArray);
|
||||
|
||||
int calculate_probabilities(float *input_array, float *output_array, int input_num);
|
||||
void generateMatrix(float *get_data, float Max_value, int totalPoints, float CNN_data[100*100]);
|
||||
void calculate_statistics(float arr[], int size, float *max_val, float *mean, float *std_dev);
|
||||
int check_threshold(float arr[], int size, float *mean, float *std_dev);
|
||||
|
||||
void _cnn_run(void);
|
||||
void cnn_run(void);
|
||||
void PrintfResArray(float *array, int array_num, int elements_per_line);
|
||||
|
||||
#endif
|
||||
95
MY/debug.c
95
MY/debug.c
@@ -1,95 +0,0 @@
|
||||
#ifndef _DEBUG_H_
|
||||
#define _DEBUG_H_
|
||||
#include "debug.h"
|
||||
#include "led.h"
|
||||
|
||||
|
||||
u8 _DEBUG = 0;
|
||||
|
||||
|
||||
|
||||
void DEBUG(){
|
||||
_DEBUG = !_DEBUG;
|
||||
printf("DEBUG IS: %s",(_DEBUG ? "ON" : "OFF"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
void DEBUG_PRINTF(const char *fmt, ...) {
|
||||
if(_DEBUG){
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
vprintf(fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void SDRAM_USED(){
|
||||
u8 RAM_ID = 0;
|
||||
u16 memused = 0;
|
||||
u8 paddr[20];
|
||||
memused=my_mem_perused(RAM_ID++);
|
||||
sprintf((char*)paddr,"%d.%01d%%",memused/10,memused%10);
|
||||
printf("\r\nSRAMʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%s\r\n",paddr);
|
||||
memused=my_mem_perused(RAM_ID++);
|
||||
sprintf((char*)paddr,"%d.%01d%%",memused/10,memused%10);
|
||||
printf("SDRAMʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%s\r\n",paddr);
|
||||
memused=my_mem_perused(RAM_ID);
|
||||
sprintf((char*)paddr,"%d.%01d%%",memused/10,memused%10);
|
||||
printf("CCMʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%s\r\n",paddr);
|
||||
}
|
||||
|
||||
|
||||
TIM_HandleTypeDef TIM3_Handler; //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//ͨ<>ö<EFBFBD>ʱ<EFBFBD><CAB1>3<EFBFBD>жϳ<D0B6>ʼ<EFBFBD><CABC>
|
||||
//arr<72><72><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>װֵ<D7B0><D6B5>
|
||||
//psc<73><63>ʱ<EFBFBD><CAB1>Ԥ<EFBFBD><D4A4>Ƶ<EFBFBD><C6B5>
|
||||
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>㷽<EFBFBD><E3B7BD>:Tout=((arr+1)*(psc+1))/Ft us.
|
||||
//Ft=<3D><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>,<2C><>λ:Mhz
|
||||
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5>Ƕ<EFBFBD>ʱ<EFBFBD><CAB1>3!(<28><>ʱ<EFBFBD><CAB1>3<EFBFBD><33><EFBFBD><EFBFBD>APB1<42>ϣ<EFBFBD>ʱ<EFBFBD><CAB1>ΪHCLK/2)
|
||||
void TIM3_Init(u16 arr,u16 psc)
|
||||
{
|
||||
TIM3_Handler.Instance=TIM3; //ͨ<>ö<EFBFBD>ʱ<EFBFBD><CAB1>3
|
||||
TIM3_Handler.Init.Prescaler=psc; //<2F><>Ƶϵ<C6B5><CFB5>
|
||||
TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP; //<2F><><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
TIM3_Handler.Init.Period=arr; //<2F>Զ<EFBFBD>װ<EFBFBD><D7B0>ֵ
|
||||
TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//ʱ<>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
|
||||
HAL_TIM_Base_Init(&TIM3_Handler);
|
||||
|
||||
HAL_TIM_Base_Start_IT(&TIM3_Handler); //ʹ<>ܶ<EFBFBD>ʱ<EFBFBD><CAB1>3<EFBFBD>Ͷ<EFBFBD>ʱ<EFBFBD><CAB1>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>TIM_IT_UPDATE
|
||||
}
|
||||
|
||||
|
||||
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
||||
//<2F>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ᱻHAL_TIM_Base_Init()<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
|
||||
{
|
||||
if(htim->Instance==TIM3)
|
||||
{
|
||||
__HAL_RCC_TIM3_CLK_ENABLE(); //ʹ<><CAB9>TIM3ʱ<33><CAB1>
|
||||
HAL_NVIC_SetPriority(TIM3_IRQn,1,3); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>3
|
||||
HAL_NVIC_EnableIRQ(TIM3_IRQn); //<2F><><EFBFBD><EFBFBD>ITM3<4D>ж<EFBFBD>
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//<2F><>ʱ<EFBFBD><CAB1>3<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void TIM3_IRQHandler(void)
|
||||
{
|
||||
HAL_TIM_IRQHandler(&TIM3_Handler);
|
||||
}
|
||||
|
||||
|
||||
//<2F>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
||||
{
|
||||
if(htim==(&TIM3_Handler))
|
||||
{
|
||||
LED1=!LED1; //LED1<44><31>ת
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
192
MY/my.h
192
MY/my.h
@@ -1,192 +0,0 @@
|
||||
#ifndef _MY_H_
|
||||
#define _MY_H_
|
||||
|
||||
#include "fattester.h"
|
||||
#include "sdio_sdcard.h"
|
||||
#include "usmart.h"
|
||||
#include "usart.h"
|
||||
#include "exfuns.h"
|
||||
#include "malloc.h"
|
||||
#include "ff.h"
|
||||
#include "debug.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
char* name;
|
||||
char* dname;
|
||||
float* array;
|
||||
u32 maxlength;
|
||||
u32 realength;
|
||||
} Model;
|
||||
|
||||
|
||||
|
||||
#define READLENGTH 11*10
|
||||
#define CONV1_BIAS_ARRSIZE 32
|
||||
#define CONV1_WEIGHT_ARRSIZE 32*1*3*3 //288
|
||||
#define CONV2_BIAS_ARRSIZE 64
|
||||
#define CONV2_WEIGHT_ARRSIZE 64*32*3*3 //18432
|
||||
#define CONV3_BIAS_ARRSIZE 128
|
||||
#define CONV3_WEIGHT_ARRSIZE 128*64*3*3 //73728
|
||||
#define FC1_BIAS_ARRSIZE 128
|
||||
#define FC1_WEIGHT_ARRSIZE 128*18432 //2359296
|
||||
#define FC2_BIAS_ARRSIZE 7
|
||||
#define FC2_WEIGHT_ARRSIZE 7*128 //896
|
||||
#define DATA_ARRSIZE 1250000 //1250000
|
||||
|
||||
|
||||
|
||||
extern Model conv1_bias;
|
||||
extern Model conv1_weight;
|
||||
extern Model conv2_bias;
|
||||
extern Model conv2_weight;
|
||||
extern Model conv3_bias;
|
||||
extern Model conv3_weight;
|
||||
extern Model fc1_bias;
|
||||
extern Model fc1_weight;
|
||||
extern Model fc2_bias;
|
||||
extern Model fc2_weight;
|
||||
extern Model data;
|
||||
|
||||
|
||||
|
||||
float* modelmym_init(char* model_name);
|
||||
u8 modelmym_free(char* model_name);
|
||||
u8 model_write(char* model_name);
|
||||
u8 model_read(char* model_name, u32 start, u32 end, u32 gap);
|
||||
u8 model_switchdata(char* model_name);
|
||||
void model_dataset(void);
|
||||
u8 model_info(char* model_name);
|
||||
void* model(char* model_name);
|
||||
void model_init(void);
|
||||
u8 sd_read(u32 length, char* model_name,u32 gap);
|
||||
|
||||
|
||||
|
||||
//conv1_bias[a*1] a:0~31
|
||||
//conv1_weight[a*9+b*9+c*3+d*1] a:0~31 b:0 c:0~2 d:0~2
|
||||
//conv2_bias[a*1] a:0~63
|
||||
//conv2_weight[a*288+b*9+c*3+d*1] a:0~63 b:0~31 c:0~2 d:0~2
|
||||
//conv3_bias[a*1] a:0~127
|
||||
//conv3_weight[a*576+b*9+c*3+d*1] a:0~127 b:0~63 c:0~2 d:0~2
|
||||
//fc1_bias[a*1] a:0~127
|
||||
//fc1_weight[a*18432+b*1] a:0~127 b:0~18431
|
||||
//fc2_bias[a*1] a:0~6
|
||||
//fc2_weight[a*128+b*1] a:0~6 b:0~127
|
||||
/*--------------------------------
|
||||
|
||||
for(u8 a; a<?; a++)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--------------------------------*/
|
||||
|
||||
|
||||
//u8 sd_read(u16 length)
|
||||
//{
|
||||
// u8 res=0;
|
||||
|
||||
// char _tmp[11] = "";
|
||||
// float floatArray[32] = {0};
|
||||
// int _larr = 0;
|
||||
|
||||
// printf("\r\nRead file data is:\r\n");
|
||||
// res=f_read(file,fatbuf,length,&br);
|
||||
// if(res) //<2F><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
|
||||
// {
|
||||
// printf("\r\n<><6E><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>:%d\r\n",res);
|
||||
// }else
|
||||
// {
|
||||
// for(int i=0;i<length;i++){
|
||||
// if(fatbuf[i]==0x0d){
|
||||
// DEBUG_PRINTF("<22>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[string]: %s\r\n",i,_tmp);
|
||||
// i++;
|
||||
// float value = atof(_tmp);
|
||||
// memset(_tmp, 0, sizeof(_tmp));
|
||||
// floatArray[_larr++] = value;
|
||||
// DEBUG_PRINTF("<22>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[float]: %f\r\n",i,value);
|
||||
// }else{
|
||||
// char buffer[2];
|
||||
// sprintf(buffer, "%c", fatbuf[i]);
|
||||
// strcat(_tmp, buffer);
|
||||
// DEBUG_PRINTF("[%d]: %c\r\n",i,fatbuf[i]);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// for (int i=0;i<_larr;i++){
|
||||
// DEBUG_PRINTF("floatArray[%d]: %f\r\n",i,floatArray[i]);
|
||||
// }
|
||||
// return res;
|
||||
//}
|
||||
|
||||
//u8 sd_read(u16 length, char* model)
|
||||
//{
|
||||
// float* floatArray = NULL;
|
||||
// if((floatArray = model_init(model)) == NULL)printf("<22><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
|
||||
// u8 res=0;
|
||||
// char _tmp[11] = "";
|
||||
// u32 _larr = 0;
|
||||
// length = length*11;
|
||||
|
||||
// printf("\r\nRead file data is:\r\n");
|
||||
|
||||
// for(int i=0;i<length/512;i++){
|
||||
// res=f_read(file,fatbuf,512,&br);
|
||||
// if(res)printf("\r\n<><6E><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>:%d\r\n",res);
|
||||
// else{
|
||||
// for(int i=0;i<br;i++){
|
||||
// if(fatbuf[i]==0x0d){
|
||||
// DEBUG_PRINTF("<22>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[string]: %s\r\n",i,_tmp);
|
||||
// i++;
|
||||
// float value = atof(_tmp);
|
||||
// memset(_tmp, 0, sizeof(_tmp));
|
||||
// floatArray[_larr++] = value;
|
||||
// DEBUG_PRINTF("<22>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[float]: %f\r\n",i,value);
|
||||
// }else{
|
||||
// char buffer[2];
|
||||
// sprintf(buffer, "%c", fatbuf[i]);
|
||||
// strcat(_tmp, buffer);
|
||||
// DEBUG_PRINTF("[%d]: %c\r\n",i,fatbuf[i]);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// if(length%512){
|
||||
// res=f_read(file,fatbuf,length%512,&br);
|
||||
// if(res)printf("\r\nRead Error:%d\r\n",res);
|
||||
// else{
|
||||
// for(int i=0;i<br;i++){
|
||||
// if(fatbuf[i]==0x0d){
|
||||
// DEBUG_PRINTF("<22>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[string]: %s\r\n",i,_tmp);
|
||||
// i++;
|
||||
// float value = atof(_tmp);
|
||||
// memset(_tmp, 0, sizeof(_tmp));
|
||||
// floatArray[_larr++] = value;
|
||||
// DEBUG_PRINTF("<22>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[float]: %f\r\n",i,value);
|
||||
// }else{
|
||||
// char buffer[2];
|
||||
// sprintf(buffer, "%c", fatbuf[i]);
|
||||
// strcat(_tmp, buffer);
|
||||
// DEBUG_PRINTF("[%d]: %c\r\n",i,fatbuf[i]);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// for (int i=0;i<_larr/10;i++){
|
||||
// printf("floatArray[%d]: %f\r\n",i*10,floatArray[i*10]);
|
||||
// }
|
||||
|
||||
// return res;
|
||||
//}
|
||||
#endif
|
||||
@@ -1,2 +0,0 @@
|
||||
[EXTDLL]
|
||||
Count=0
|
||||
BIN
OBJ/FATFS.axf
BIN
OBJ/FATFS.axf
Binary file not shown.
@@ -1,103 +0,0 @@
|
||||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1><EFBFBD>Vision Build Log</h1>
|
||||
<h2>Tool Versions:</h2>
|
||||
IDE-Version: <20><>Vision V5.29.0.0
|
||||
Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
|
||||
License Information: 1 Qi, 1, LIC=HN0AE-5KLTV-FWX2N-YGKNZ-F18VE-C7PH2
|
||||
|
||||
Tool Versions:
|
||||
Toolchain: MDK-ARM Plus Version: 5.21a
|
||||
Toolchain Path: C:\Keil_v5\ARM\ARMCC\Bin
|
||||
C Compiler: Armcc.exe V5.06 update 3 (build 300)
|
||||
Assembler: Armasm.exe V5.06 update 3 (build 300)
|
||||
Linker/Locator: ArmLink.exe V5.06 update 3 (build 300)
|
||||
Library Manager: ArmAr.exe V5.06 update 3 (build 300)
|
||||
Hex Converter: FromElf.exe V5.06 update 3 (build 300)
|
||||
CPU DLL: SARMCM3.DLL V5.21a
|
||||
Dialog DLL: DCM.DLL V1.13.8.0
|
||||
Target DLL: STLink\ST-LINKIII-KEIL_SWO.dll V2.0.18.0
|
||||
Dialog DLL: TCM.DLL V1.14.14.0
|
||||
|
||||
<h2>Project:</h2>
|
||||
D:\local-rep\stm32-cnn\USER\FATFS.uvprojx
|
||||
Project File Date: 11/07/2024
|
||||
|
||||
<h2>Output:</h2>
|
||||
*** Using Compiler 'V5.06 update 3 (build 300)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
|
||||
Rebuild target 'FATFS'
|
||||
assembling startup_stm32f429xx.s...
|
||||
compiling stm32f4xx_hal_pwr.c...
|
||||
compiling stm32f4xx_hal_dma_ex.c...
|
||||
compiling stm32f4xx_hal.c...
|
||||
compiling stm32f4xx_hal_dma.c...
|
||||
compiling system_stm32f4xx.c...
|
||||
compiling stm32f4xx_hal_tim_ex.c...
|
||||
compiling stm32f4xx_hal_cortex.c...
|
||||
compiling stm32f4xx_hal_rcc.c...
|
||||
compiling stm32f4xx_hal_uart.c...
|
||||
compiling stm32f4xx_hal_rcc_ex.c...
|
||||
compiling main.c...
|
||||
compiling stm32f4xx_hal_gpio.c...
|
||||
compiling stm32f4xx_it.c...
|
||||
compiling stm32f4xx_hal_pwr_ex.c...
|
||||
compiling stm32f4xx_hal_usart.c...
|
||||
compiling stm32f4xx_hal_tim.c...
|
||||
compiling stm32f4xx_hal_spi.c...
|
||||
compiling stm32f4xx_hal_sd.c...
|
||||
compiling stm32f4xx_hal_dma2d.c...
|
||||
compiling led.c...
|
||||
compiling stm32f4xx_ll_sdmmc.c...
|
||||
compiling stm32f4xx_hal_ltdc_ex.c...
|
||||
compiling sys.c...
|
||||
compiling stm32f4xx_hal_sdram.c...
|
||||
compiling stm32f4xx_hal_sram.c...
|
||||
compiling key.c...
|
||||
compiling usart.c...
|
||||
compiling stm32f4xx_hal_nand.c...
|
||||
compiling stm32f4xx_hal_ltdc.c...
|
||||
compiling stm32f4xx_ll_fmc.c...
|
||||
compiling delay.c...
|
||||
compiling lcd.c...
|
||||
compiling cc936.c...
|
||||
compiling ff.c...
|
||||
compiling sdram.c...
|
||||
compiling usmart.c...
|
||||
compiling spi.c...
|
||||
compiling diskio.c...
|
||||
compiling w25qxx.c...
|
||||
compiling usmart_str.c...
|
||||
compiling ltdc.c...
|
||||
compiling fattester.c...
|
||||
compiling exfuns.c...
|
||||
compiling nand.c...
|
||||
compiling nandtester.c...
|
||||
compiling sdio_sdcard.c...
|
||||
compiling ftl.c...
|
||||
compiling usmart_config.c...
|
||||
compiling malloc.c...
|
||||
compiling my.c...
|
||||
compiling debug.c...
|
||||
compiling cnn.c...
|
||||
linking...
|
||||
Program Size: Code=53718 RO-data=176794 RW-data=672 ZI-data=33751256
|
||||
FromELF: creating hex file...
|
||||
"..\OBJ\FATFS.axf" - 0 Error(s), 0 Warning(s).
|
||||
|
||||
<h2>Software Packages used:</h2>
|
||||
|
||||
Package Vendor: Keil
|
||||
http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.9.0.pack
|
||||
Keil.STM32F4xx_DFP.2.9.0
|
||||
STMicroelectronics STM32F4 Series Device Support, Drivers and Examples
|
||||
|
||||
<h2>Collection of Component include folders:</h2>
|
||||
.\RTE\_FATFS
|
||||
C:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.9.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include
|
||||
|
||||
<h2>Collection of Component Files used:</h2>
|
||||
Build Time Elapsed: 00:00:09
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
14434
OBJ/FATFS.hex
14434
OBJ/FATFS.hex
File diff suppressed because it is too large
Load Diff
4095
OBJ/FATFS.htm
4095
OBJ/FATFS.htm
File diff suppressed because it is too large
Load Diff
@@ -1,58 +0,0 @@
|
||||
--cpu=Cortex-M4.fp.sp
|
||||
"..\obj\main.o"
|
||||
"..\obj\stm32f4xx_it.o"
|
||||
"..\obj\system_stm32f4xx.o"
|
||||
"..\obj\startup_stm32f429xx.o"
|
||||
"..\obj\stm32f4xx_hal.o"
|
||||
"..\obj\stm32f4xx_hal_cortex.o"
|
||||
"..\obj\stm32f4xx_hal_gpio.o"
|
||||
"..\obj\stm32f4xx_hal_pwr.o"
|
||||
"..\obj\stm32f4xx_hal_pwr_ex.o"
|
||||
"..\obj\stm32f4xx_hal_rcc.o"
|
||||
"..\obj\stm32f4xx_hal_rcc_ex.o"
|
||||
"..\obj\stm32f4xx_hal_uart.o"
|
||||
"..\obj\stm32f4xx_hal_usart.o"
|
||||
"..\obj\stm32f4xx_hal_dma.o"
|
||||
"..\obj\stm32f4xx_hal_dma_ex.o"
|
||||
"..\obj\stm32f4xx_hal_tim.o"
|
||||
"..\obj\stm32f4xx_hal_tim_ex.o"
|
||||
"..\obj\stm32f4xx_ll_fmc.o"
|
||||
"..\obj\stm32f4xx_hal_sram.o"
|
||||
"..\obj\stm32f4xx_hal_sdram.o"
|
||||
"..\obj\stm32f4xx_hal_ltdc.o"
|
||||
"..\obj\stm32f4xx_hal_ltdc_ex.o"
|
||||
"..\obj\stm32f4xx_hal_dma2d.o"
|
||||
"..\obj\stm32f4xx_ll_sdmmc.o"
|
||||
"..\obj\stm32f4xx_hal_sd.o"
|
||||
"..\obj\stm32f4xx_hal_spi.o"
|
||||
"..\obj\stm32f4xx_hal_nand.o"
|
||||
"..\obj\delay.o"
|
||||
"..\obj\sys.o"
|
||||
"..\obj\usart.o"
|
||||
"..\obj\led.o"
|
||||
"..\obj\key.o"
|
||||
"..\obj\lcd.o"
|
||||
"..\obj\sdram.o"
|
||||
"..\obj\ltdc.o"
|
||||
"..\obj\sdio_sdcard.o"
|
||||
"..\obj\spi.o"
|
||||
"..\obj\w25qxx.o"
|
||||
"..\obj\ftl.o"
|
||||
"..\obj\nand.o"
|
||||
"..\obj\nandtester.o"
|
||||
"..\obj\malloc.o"
|
||||
"..\obj\usmart.o"
|
||||
"..\obj\usmart_config.o"
|
||||
"..\obj\usmart_str.o"
|
||||
"..\obj\ff.o"
|
||||
"..\obj\cc936.o"
|
||||
"..\obj\diskio.o"
|
||||
"..\obj\exfuns.o"
|
||||
"..\obj\fattester.o"
|
||||
"..\obj\my.o"
|
||||
"..\obj\debug.o"
|
||||
"..\obj\cnn.o"
|
||||
--library_type=microlib --strict --scatter "..\OBJ\FATFS.sct"
|
||||
--summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols
|
||||
--info sizes --info totals --info unused --info veneers
|
||||
--list "..\OBJ\FATFS.map" -o ..\OBJ\FATFS.axf
|
||||
4598
OBJ/FATFS.map
4598
OBJ/FATFS.map
File diff suppressed because it is too large
Load Diff
@@ -1,16 +0,0 @@
|
||||
; *************************************************************
|
||||
; *** Scatter-Loading Description File generated by uVision ***
|
||||
; *************************************************************
|
||||
|
||||
LR_IROM1 0x08000000 0x00100000 { ; load region size_region
|
||||
ER_IROM1 0x08000000 0x00100000 { ; load address = execution address
|
||||
*.o (RESET, +First)
|
||||
*(InRoot$$Sections)
|
||||
.ANY (+RO)
|
||||
.ANY (+XO)
|
||||
}
|
||||
RW_IRAM1 0x20000000 0x00030000 { ; RW data
|
||||
.ANY (+RW +ZI)
|
||||
}
|
||||
}
|
||||
|
||||
3752
OBJ/FATFS_FATFS.dep
3752
OBJ/FATFS_FATFS.dep
File diff suppressed because it is too large
Load Diff
@@ -1,16 +0,0 @@
|
||||
; *************************************************************
|
||||
; *** Scatter-Loading Description File generated by uVision ***
|
||||
; *************************************************************
|
||||
|
||||
LR_IROM1 0x08000000 0x00100000 { ; load region size_region
|
||||
ER_IROM1 0x08000000 0x00100000 { ; load address = execution address
|
||||
*.o (RESET, +First)
|
||||
*(InRoot$$Sections)
|
||||
.ANY (+RO)
|
||||
.ANY (+XO)
|
||||
}
|
||||
RW_IRAM1 0x20000000 0x0003A000 { ; RW data
|
||||
.ANY (+RW +ZI)
|
||||
}
|
||||
}
|
||||
|
||||
BIN
OBJ/cc936.crf
BIN
OBJ/cc936.crf
Binary file not shown.
@@ -1,4 +0,0 @@
|
||||
..\obj\cc936.o: ..\FATFS\src\option\cc936.c
|
||||
..\obj\cc936.o: ..\FATFS\src\option\../ff.h
|
||||
..\obj\cc936.o: ..\FATFS\src\option\../integer.h
|
||||
..\obj\cc936.o: ..\FATFS\src\option\../ffconf.h
|
||||
BIN
OBJ/cc936.o
BIN
OBJ/cc936.o
Binary file not shown.
BIN
OBJ/cnn.crf
BIN
OBJ/cnn.crf
Binary file not shown.
90
OBJ/cnn.d
90
OBJ/cnn.d
@@ -1,90 +0,0 @@
|
||||
..\obj\cnn.o: ..\MY\cnn.c
|
||||
..\obj\cnn.o: ..\MY\cnn.h
|
||||
..\obj\cnn.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdlib.h
|
||||
..\obj\cnn.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\obj\cnn.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
|
||||
..\obj\cnn.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\math.h
|
||||
..\obj\cnn.o: ..\MY\my.h
|
||||
..\obj\cnn.o: ..\FATFS\exfuns\fattester.h
|
||||
..\obj\cnn.o: ..\SYSTEM\sys\sys.h
|
||||
..\obj\cnn.o: ..\USER\stm32f4xx.h
|
||||
..\obj\cnn.o: ..\USER\stm32f429xx.h
|
||||
..\obj\cnn.o: ..\CORE\core_cm4.h
|
||||
..\obj\cnn.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
..\obj\cnn.o: ..\CORE\core_cmInstr.h
|
||||
..\obj\cnn.o: ..\CORE\cmsis_armcc.h
|
||||
..\obj\cnn.o: ..\CORE\core_cmFunc.h
|
||||
..\obj\cnn.o: ..\CORE\core_cmSimd.h
|
||||
..\obj\cnn.o: ..\USER\system_stm32f4xx.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h
|
||||
..\obj\cnn.o: ..\USER\stm32f4xx_hal_conf.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h
|
||||
..\obj\cnn.o: ..\USER\stm32f4xx.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\Legacy/stm32_hal_legacy.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_can.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_crc.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cryp.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma2d.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sram.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_fmc.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nor.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nand.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pccard.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sdram.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hash.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rng.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sd.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_sdmmc.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_usart.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_irda.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_smartcard.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_wwdg.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd_ex.h
|
||||
..\obj\cnn.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hcd.h
|
||||
..\obj\cnn.o: ..\FATFS\src\ff.h
|
||||
..\obj\cnn.o: ..\FATFS\src\integer.h
|
||||
..\obj\cnn.o: ..\FATFS\src\ffconf.h
|
||||
..\obj\cnn.o: ..\HARDWARE\SDIO\sdio_sdcard.h
|
||||
..\obj\cnn.o: ..\USMART\usmart.h
|
||||
..\obj\cnn.o: ..\USMART\usmart_str.h
|
||||
..\obj\cnn.o: ..\SYSTEM\usart\usart.h
|
||||
..\obj\cnn.o: ..\FATFS\exfuns\exfuns.h
|
||||
..\obj\cnn.o: ..\MALLOC\malloc.h
|
||||
..\obj\cnn.o: ..\MY\debug.h
|
||||
..\obj\cnn.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdarg.h
|
||||
BIN
OBJ/debug.crf
BIN
OBJ/debug.crf
Binary file not shown.
79
OBJ/debug.d
79
OBJ/debug.d
@@ -1,79 +0,0 @@
|
||||
..\obj\debug.o: ..\MY\debug.c
|
||||
..\obj\debug.o: ..\MY\debug.h
|
||||
..\obj\debug.o: ..\SYSTEM\sys\sys.h
|
||||
..\obj\debug.o: ..\USER\stm32f4xx.h
|
||||
..\obj\debug.o: ..\USER\stm32f429xx.h
|
||||
..\obj\debug.o: ..\CORE\core_cm4.h
|
||||
..\obj\debug.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
..\obj\debug.o: ..\CORE\core_cmInstr.h
|
||||
..\obj\debug.o: ..\CORE\cmsis_armcc.h
|
||||
..\obj\debug.o: ..\CORE\core_cmFunc.h
|
||||
..\obj\debug.o: ..\CORE\core_cmSimd.h
|
||||
..\obj\debug.o: ..\USER\system_stm32f4xx.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h
|
||||
..\obj\debug.o: ..\USER\stm32f4xx_hal_conf.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h
|
||||
..\obj\debug.o: ..\USER\stm32f4xx.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\Legacy/stm32_hal_legacy.h
|
||||
..\obj\debug.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_can.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_crc.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cryp.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma2d.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sram.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_fmc.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nor.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nand.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pccard.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sdram.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hash.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rng.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sd.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_sdmmc.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_usart.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_irda.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_smartcard.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_wwdg.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd_ex.h
|
||||
..\obj\debug.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hcd.h
|
||||
..\obj\debug.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdarg.h
|
||||
..\obj\debug.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdlib.h
|
||||
..\obj\debug.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
|
||||
..\obj\debug.o: ..\MALLOC\malloc.h
|
||||
..\obj\debug.o: ..\HARDWARE\LED\led.h
|
||||
BIN
OBJ/debug.o
BIN
OBJ/debug.o
Binary file not shown.
BIN
OBJ/delay.crf
BIN
OBJ/delay.crf
Binary file not shown.
74
OBJ/delay.d
74
OBJ/delay.d
@@ -1,74 +0,0 @@
|
||||
..\obj\delay.o: ..\SYSTEM\delay\delay.c
|
||||
..\obj\delay.o: ..\SYSTEM\delay\delay.h
|
||||
..\obj\delay.o: ..\SYSTEM\sys\sys.h
|
||||
..\obj\delay.o: ..\USER\stm32f4xx.h
|
||||
..\obj\delay.o: ..\USER\stm32f429xx.h
|
||||
..\obj\delay.o: ..\CORE\core_cm4.h
|
||||
..\obj\delay.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
..\obj\delay.o: ..\CORE\core_cmInstr.h
|
||||
..\obj\delay.o: ..\CORE\cmsis_armcc.h
|
||||
..\obj\delay.o: ..\CORE\core_cmFunc.h
|
||||
..\obj\delay.o: ..\CORE\core_cmSimd.h
|
||||
..\obj\delay.o: ..\USER\system_stm32f4xx.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h
|
||||
..\obj\delay.o: ..\USER\stm32f4xx_hal_conf.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h
|
||||
..\obj\delay.o: ..\USER\stm32f4xx.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\Legacy/stm32_hal_legacy.h
|
||||
..\obj\delay.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_can.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_crc.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cryp.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma2d.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sram.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_fmc.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nor.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nand.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pccard.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sdram.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hash.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rng.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sd.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_sdmmc.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_usart.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_irda.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_smartcard.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_wwdg.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd_ex.h
|
||||
..\obj\delay.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hcd.h
|
||||
BIN
OBJ/delay.o
BIN
OBJ/delay.o
Binary file not shown.
BIN
OBJ/diskio.crf
BIN
OBJ/diskio.crf
Binary file not shown.
80
OBJ/diskio.d
80
OBJ/diskio.d
@@ -1,80 +0,0 @@
|
||||
..\obj\diskio.o: ..\FATFS\src\diskio.c
|
||||
..\obj\diskio.o: ..\FATFS\src\diskio.h
|
||||
..\obj\diskio.o: ..\FATFS\src\integer.h
|
||||
..\obj\diskio.o: ..\HARDWARE\SDIO\sdio_sdcard.h
|
||||
..\obj\diskio.o: ..\SYSTEM\sys\sys.h
|
||||
..\obj\diskio.o: ..\USER\stm32f4xx.h
|
||||
..\obj\diskio.o: ..\USER\stm32f429xx.h
|
||||
..\obj\diskio.o: ..\CORE\core_cm4.h
|
||||
..\obj\diskio.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
..\obj\diskio.o: ..\CORE\core_cmInstr.h
|
||||
..\obj\diskio.o: ..\CORE\cmsis_armcc.h
|
||||
..\obj\diskio.o: ..\CORE\core_cmFunc.h
|
||||
..\obj\diskio.o: ..\CORE\core_cmSimd.h
|
||||
..\obj\diskio.o: ..\USER\system_stm32f4xx.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h
|
||||
..\obj\diskio.o: ..\USER\stm32f4xx_hal_conf.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h
|
||||
..\obj\diskio.o: ..\USER\stm32f4xx.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\Legacy/stm32_hal_legacy.h
|
||||
..\obj\diskio.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_can.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_crc.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cryp.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma2d.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sram.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_fmc.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nor.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nand.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pccard.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sdram.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hash.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rng.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sd.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_sdmmc.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_usart.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_irda.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_smartcard.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_wwdg.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd_ex.h
|
||||
..\obj\diskio.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hcd.h
|
||||
..\obj\diskio.o: ..\HARDWARE\W25QXX\w25qxx.h
|
||||
..\obj\diskio.o: ..\MALLOC\malloc.h
|
||||
..\obj\diskio.o: ..\HARDWARE\NAND\nand.h
|
||||
..\obj\diskio.o: ..\HARDWARE\NAND\ftl.h
|
||||
BIN
OBJ/diskio.o
BIN
OBJ/diskio.o
Binary file not shown.
BIN
OBJ/exfuns.crf
BIN
OBJ/exfuns.crf
Binary file not shown.
81
OBJ/exfuns.d
81
OBJ/exfuns.d
@@ -1,81 +0,0 @@
|
||||
..\obj\exfuns.o: ..\FATFS\exfuns\exfuns.c
|
||||
..\obj\exfuns.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
|
||||
..\obj\exfuns.o: ..\FATFS\exfuns\exfuns.h
|
||||
..\obj\exfuns.o: ..\SYSTEM\sys\sys.h
|
||||
..\obj\exfuns.o: ..\USER\stm32f4xx.h
|
||||
..\obj\exfuns.o: ..\USER\stm32f429xx.h
|
||||
..\obj\exfuns.o: ..\CORE\core_cm4.h
|
||||
..\obj\exfuns.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
..\obj\exfuns.o: ..\CORE\core_cmInstr.h
|
||||
..\obj\exfuns.o: ..\CORE\cmsis_armcc.h
|
||||
..\obj\exfuns.o: ..\CORE\core_cmFunc.h
|
||||
..\obj\exfuns.o: ..\CORE\core_cmSimd.h
|
||||
..\obj\exfuns.o: ..\USER\system_stm32f4xx.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h
|
||||
..\obj\exfuns.o: ..\USER\stm32f4xx_hal_conf.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h
|
||||
..\obj\exfuns.o: ..\USER\stm32f4xx.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\Legacy/stm32_hal_legacy.h
|
||||
..\obj\exfuns.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_can.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_crc.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cryp.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma2d.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sram.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_fmc.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nor.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nand.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pccard.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sdram.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hash.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rng.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sd.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_sdmmc.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_usart.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_irda.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_smartcard.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_wwdg.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd_ex.h
|
||||
..\obj\exfuns.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hcd.h
|
||||
..\obj\exfuns.o: ..\FATFS\src\ff.h
|
||||
..\obj\exfuns.o: ..\FATFS\src\integer.h
|
||||
..\obj\exfuns.o: ..\FATFS\src\ffconf.h
|
||||
..\obj\exfuns.o: ..\FATFS\exfuns\fattester.h
|
||||
..\obj\exfuns.o: ..\MALLOC\malloc.h
|
||||
..\obj\exfuns.o: ..\SYSTEM\usart\usart.h
|
||||
BIN
OBJ/exfuns.o
BIN
OBJ/exfuns.o
Binary file not shown.
Binary file not shown.
@@ -1,84 +0,0 @@
|
||||
..\obj\fattester.o: ..\FATFS\exfuns\fattester.c
|
||||
..\obj\fattester.o: ..\FATFS\exfuns\fattester.h
|
||||
..\obj\fattester.o: ..\SYSTEM\sys\sys.h
|
||||
..\obj\fattester.o: ..\USER\stm32f4xx.h
|
||||
..\obj\fattester.o: ..\USER\stm32f429xx.h
|
||||
..\obj\fattester.o: ..\CORE\core_cm4.h
|
||||
..\obj\fattester.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
..\obj\fattester.o: ..\CORE\core_cmInstr.h
|
||||
..\obj\fattester.o: ..\CORE\cmsis_armcc.h
|
||||
..\obj\fattester.o: ..\CORE\core_cmFunc.h
|
||||
..\obj\fattester.o: ..\CORE\core_cmSimd.h
|
||||
..\obj\fattester.o: ..\USER\system_stm32f4xx.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h
|
||||
..\obj\fattester.o: ..\USER\stm32f4xx_hal_conf.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h
|
||||
..\obj\fattester.o: ..\USER\stm32f4xx.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\Legacy/stm32_hal_legacy.h
|
||||
..\obj\fattester.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_can.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_crc.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cryp.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma2d.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sram.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_fmc.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nor.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nand.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pccard.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sdram.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hash.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rng.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sd.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_sdmmc.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_usart.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_irda.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_smartcard.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_wwdg.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd_ex.h
|
||||
..\obj\fattester.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hcd.h
|
||||
..\obj\fattester.o: ..\FATFS\src\ff.h
|
||||
..\obj\fattester.o: ..\FATFS\src\integer.h
|
||||
..\obj\fattester.o: ..\FATFS\src\ffconf.h
|
||||
..\obj\fattester.o: ..\HARDWARE\SDIO\sdio_sdcard.h
|
||||
..\obj\fattester.o: ..\USMART\usmart.h
|
||||
..\obj\fattester.o: ..\USMART\usmart_str.h
|
||||
..\obj\fattester.o: ..\SYSTEM\usart\usart.h
|
||||
..\obj\fattester.o: ..\FATFS\exfuns\exfuns.h
|
||||
..\obj\fattester.o: ..\MALLOC\malloc.h
|
||||
..\obj\fattester.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
|
||||
BIN
OBJ/fattester.o
BIN
OBJ/fattester.o
Binary file not shown.
BIN
OBJ/ff.crf
BIN
OBJ/ff.crf
Binary file not shown.
6
OBJ/ff.d
6
OBJ/ff.d
@@ -1,6 +0,0 @@
|
||||
..\obj\ff.o: ..\FATFS\src\ff.c
|
||||
..\obj\ff.o: ..\FATFS\src\ff.h
|
||||
..\obj\ff.o: ..\FATFS\src\integer.h
|
||||
..\obj\ff.o: ..\FATFS\src\ffconf.h
|
||||
..\obj\ff.o: ..\FATFS\src\diskio.h
|
||||
..\obj\ff.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdarg.h
|
||||
BIN
OBJ/ftl.crf
BIN
OBJ/ftl.crf
Binary file not shown.
78
OBJ/ftl.d
78
OBJ/ftl.d
@@ -1,78 +0,0 @@
|
||||
..\obj\ftl.o: ..\HARDWARE\NAND\ftl.c
|
||||
..\obj\ftl.o: ..\HARDWARE\NAND\ftl.h
|
||||
..\obj\ftl.o: ..\SYSTEM\sys\sys.h
|
||||
..\obj\ftl.o: ..\USER\stm32f4xx.h
|
||||
..\obj\ftl.o: ..\USER\stm32f429xx.h
|
||||
..\obj\ftl.o: ..\CORE\core_cm4.h
|
||||
..\obj\ftl.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
..\obj\ftl.o: ..\CORE\core_cmInstr.h
|
||||
..\obj\ftl.o: ..\CORE\cmsis_armcc.h
|
||||
..\obj\ftl.o: ..\CORE\core_cmFunc.h
|
||||
..\obj\ftl.o: ..\CORE\core_cmSimd.h
|
||||
..\obj\ftl.o: ..\USER\system_stm32f4xx.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h
|
||||
..\obj\ftl.o: ..\USER\stm32f4xx_hal_conf.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h
|
||||
..\obj\ftl.o: ..\USER\stm32f4xx.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\Legacy/stm32_hal_legacy.h
|
||||
..\obj\ftl.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_can.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_crc.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cryp.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma2d.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sram.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_fmc.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nor.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nand.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pccard.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sdram.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hash.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rng.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sd.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_sdmmc.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_usart.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_irda.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_smartcard.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_wwdg.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd_ex.h
|
||||
..\obj\ftl.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hcd.h
|
||||
..\obj\ftl.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
|
||||
..\obj\ftl.o: ..\MALLOC\malloc.h
|
||||
..\obj\ftl.o: ..\HARDWARE\NAND\nand.h
|
||||
..\obj\ftl.o: ..\SYSTEM\usart\usart.h
|
||||
BIN
OBJ/key.crf
BIN
OBJ/key.crf
Binary file not shown.
75
OBJ/key.d
75
OBJ/key.d
@@ -1,75 +0,0 @@
|
||||
..\obj\key.o: ..\HARDWARE\KEY\key.c
|
||||
..\obj\key.o: ..\HARDWARE\KEY\key.h
|
||||
..\obj\key.o: ..\SYSTEM\sys\sys.h
|
||||
..\obj\key.o: ..\USER\stm32f4xx.h
|
||||
..\obj\key.o: ..\USER\stm32f429xx.h
|
||||
..\obj\key.o: ..\CORE\core_cm4.h
|
||||
..\obj\key.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
..\obj\key.o: ..\CORE\core_cmInstr.h
|
||||
..\obj\key.o: ..\CORE\cmsis_armcc.h
|
||||
..\obj\key.o: ..\CORE\core_cmFunc.h
|
||||
..\obj\key.o: ..\CORE\core_cmSimd.h
|
||||
..\obj\key.o: ..\USER\system_stm32f4xx.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h
|
||||
..\obj\key.o: ..\USER\stm32f4xx_hal_conf.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h
|
||||
..\obj\key.o: ..\USER\stm32f4xx.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\Legacy/stm32_hal_legacy.h
|
||||
..\obj\key.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_can.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_crc.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cryp.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma2d.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sram.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_fmc.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nor.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nand.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pccard.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sdram.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hash.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rng.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sd.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_sdmmc.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_usart.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_irda.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_smartcard.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_wwdg.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd_ex.h
|
||||
..\obj\key.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hcd.h
|
||||
..\obj\key.o: ..\SYSTEM\delay\delay.h
|
||||
BIN
OBJ/lcd.crf
BIN
OBJ/lcd.crf
Binary file not shown.
79
OBJ/lcd.d
79
OBJ/lcd.d
@@ -1,79 +0,0 @@
|
||||
..\obj\lcd.o: ..\HARDWARE\LCD\lcd.c
|
||||
..\obj\lcd.o: ..\HARDWARE\LCD\lcd.h
|
||||
..\obj\lcd.o: ..\SYSTEM\sys\sys.h
|
||||
..\obj\lcd.o: ..\USER\stm32f4xx.h
|
||||
..\obj\lcd.o: ..\USER\stm32f429xx.h
|
||||
..\obj\lcd.o: ..\CORE\core_cm4.h
|
||||
..\obj\lcd.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
..\obj\lcd.o: ..\CORE\core_cmInstr.h
|
||||
..\obj\lcd.o: ..\CORE\cmsis_armcc.h
|
||||
..\obj\lcd.o: ..\CORE\core_cmFunc.h
|
||||
..\obj\lcd.o: ..\CORE\core_cmSimd.h
|
||||
..\obj\lcd.o: ..\USER\system_stm32f4xx.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h
|
||||
..\obj\lcd.o: ..\USER\stm32f4xx_hal_conf.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h
|
||||
..\obj\lcd.o: ..\USER\stm32f4xx.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\Legacy/stm32_hal_legacy.h
|
||||
..\obj\lcd.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_can.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_crc.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cryp.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma2d.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sram.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_fmc.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nor.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nand.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pccard.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sdram.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hash.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rng.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sd.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_sdmmc.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_usart.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_irda.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_smartcard.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_wwdg.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd_ex.h
|
||||
..\obj\lcd.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hcd.h
|
||||
..\obj\lcd.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdlib.h
|
||||
..\obj\lcd.o: ..\HARDWARE\LCD\font.h
|
||||
..\obj\lcd.o: ..\SYSTEM\usart\usart.h
|
||||
..\obj\lcd.o: ..\SYSTEM\delay\delay.h
|
||||
..\obj\lcd.o: ..\HARDWARE\LCD\ltdc.h
|
||||
BIN
OBJ/led.crf
BIN
OBJ/led.crf
Binary file not shown.
74
OBJ/led.d
74
OBJ/led.d
@@ -1,74 +0,0 @@
|
||||
..\obj\led.o: ..\HARDWARE\LED\led.c
|
||||
..\obj\led.o: ..\HARDWARE\LED\led.h
|
||||
..\obj\led.o: ..\SYSTEM\sys\sys.h
|
||||
..\obj\led.o: ..\USER\stm32f4xx.h
|
||||
..\obj\led.o: ..\USER\stm32f429xx.h
|
||||
..\obj\led.o: ..\CORE\core_cm4.h
|
||||
..\obj\led.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
..\obj\led.o: ..\CORE\core_cmInstr.h
|
||||
..\obj\led.o: ..\CORE\cmsis_armcc.h
|
||||
..\obj\led.o: ..\CORE\core_cmFunc.h
|
||||
..\obj\led.o: ..\CORE\core_cmSimd.h
|
||||
..\obj\led.o: ..\USER\system_stm32f4xx.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h
|
||||
..\obj\led.o: ..\USER\stm32f4xx_hal_conf.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h
|
||||
..\obj\led.o: ..\USER\stm32f4xx.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\Legacy/stm32_hal_legacy.h
|
||||
..\obj\led.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_can.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_crc.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cryp.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma2d.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sram.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_fmc.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nor.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nand.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pccard.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sdram.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hash.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rng.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sd.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_sdmmc.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_usart.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_irda.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_smartcard.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_wwdg.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd_ex.h
|
||||
..\obj\led.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hcd.h
|
||||
BIN
OBJ/ltdc.crf
BIN
OBJ/ltdc.crf
Binary file not shown.
76
OBJ/ltdc.d
76
OBJ/ltdc.d
@@ -1,76 +0,0 @@
|
||||
..\obj\ltdc.o: ..\HARDWARE\LCD\ltdc.c
|
||||
..\obj\ltdc.o: ..\HARDWARE\LCD\ltdc.h
|
||||
..\obj\ltdc.o: ..\SYSTEM\sys\sys.h
|
||||
..\obj\ltdc.o: ..\USER\stm32f4xx.h
|
||||
..\obj\ltdc.o: ..\USER\stm32f429xx.h
|
||||
..\obj\ltdc.o: ..\CORE\core_cm4.h
|
||||
..\obj\ltdc.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
..\obj\ltdc.o: ..\CORE\core_cmInstr.h
|
||||
..\obj\ltdc.o: ..\CORE\cmsis_armcc.h
|
||||
..\obj\ltdc.o: ..\CORE\core_cmFunc.h
|
||||
..\obj\ltdc.o: ..\CORE\core_cmSimd.h
|
||||
..\obj\ltdc.o: ..\USER\system_stm32f4xx.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h
|
||||
..\obj\ltdc.o: ..\USER\stm32f4xx_hal_conf.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h
|
||||
..\obj\ltdc.o: ..\USER\stm32f4xx.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\Legacy/stm32_hal_legacy.h
|
||||
..\obj\ltdc.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_can.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_crc.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cryp.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma2d.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sram.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_fmc.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nor.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nand.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pccard.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sdram.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hash.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rng.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sd.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_sdmmc.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_usart.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_irda.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_smartcard.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_wwdg.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd_ex.h
|
||||
..\obj\ltdc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hcd.h
|
||||
..\obj\ltdc.o: ..\HARDWARE\LCD\lcd.h
|
||||
..\obj\ltdc.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdlib.h
|
||||
BIN
OBJ/ltdc.o
BIN
OBJ/ltdc.o
Binary file not shown.
BIN
OBJ/main.crf
BIN
OBJ/main.crf
Binary file not shown.
96
OBJ/main.d
96
OBJ/main.d
@@ -1,96 +0,0 @@
|
||||
..\obj\main.o: main.c
|
||||
..\obj\main.o: ..\SYSTEM\sys\sys.h
|
||||
..\obj\main.o: ..\USER\stm32f4xx.h
|
||||
..\obj\main.o: ..\USER\stm32f429xx.h
|
||||
..\obj\main.o: ..\CORE\core_cm4.h
|
||||
..\obj\main.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
..\obj\main.o: ..\CORE\core_cmInstr.h
|
||||
..\obj\main.o: ..\CORE\cmsis_armcc.h
|
||||
..\obj\main.o: ..\CORE\core_cmFunc.h
|
||||
..\obj\main.o: ..\CORE\core_cmSimd.h
|
||||
..\obj\main.o: ..\USER\system_stm32f4xx.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h
|
||||
..\obj\main.o: ..\USER\stm32f4xx_hal_conf.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h
|
||||
..\obj\main.o: ..\USER\stm32f4xx.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\Legacy/stm32_hal_legacy.h
|
||||
..\obj\main.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_can.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_crc.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cryp.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma2d.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sram.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_fmc.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nor.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nand.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pccard.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sdram.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hash.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rng.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sd.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_sdmmc.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_usart.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_irda.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_smartcard.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_wwdg.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd_ex.h
|
||||
..\obj\main.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hcd.h
|
||||
..\obj\main.o: ..\SYSTEM\delay\delay.h
|
||||
..\obj\main.o: ..\SYSTEM\usart\usart.h
|
||||
..\obj\main.o: ..\HARDWARE\LED\led.h
|
||||
..\obj\main.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
|
||||
..\obj\main.o: ..\HARDWARE\SDRAM\sdram.h
|
||||
..\obj\main.o: ..\MALLOC\malloc.h
|
||||
..\obj\main.o: ..\HARDWARE\W25QXX\w25qxx.h
|
||||
..\obj\main.o: ..\FATFS\src\ff.h
|
||||
..\obj\main.o: ..\FATFS\src\integer.h
|
||||
..\obj\main.o: ..\FATFS\src\ffconf.h
|
||||
..\obj\main.o: ..\FATFS\exfuns\exfuns.h
|
||||
..\obj\main.o: ..\USMART\usmart.h
|
||||
..\obj\main.o: ..\USMART\usmart_str.h
|
||||
..\obj\main.o: ..\HARDWARE\SDIO\sdio_sdcard.h
|
||||
..\obj\main.o: ..\HARDWARE\NAND\ftl.h
|
||||
..\obj\main.o: ..\MY\my.h
|
||||
..\obj\main.o: ..\FATFS\exfuns\fattester.h
|
||||
..\obj\main.o: ..\MY\debug.h
|
||||
..\obj\main.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdarg.h
|
||||
..\obj\main.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdlib.h
|
||||
..\obj\main.o: ..\MY\debug.h
|
||||
..\obj\main.o: ..\MY\cnn.h
|
||||
..\obj\main.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\math.h
|
||||
BIN
OBJ/main.o
BIN
OBJ/main.o
Binary file not shown.
BIN
OBJ/malloc.crf
BIN
OBJ/malloc.crf
Binary file not shown.
78
OBJ/malloc.d
78
OBJ/malloc.d
@@ -1,78 +0,0 @@
|
||||
..\obj\malloc.o: ..\MALLOC\malloc.c
|
||||
..\obj\malloc.o: ..\MALLOC\malloc.h
|
||||
..\obj\malloc.o: ..\SYSTEM\sys\sys.h
|
||||
..\obj\malloc.o: ..\USER\stm32f4xx.h
|
||||
..\obj\malloc.o: ..\USER\stm32f429xx.h
|
||||
..\obj\malloc.o: ..\CORE\core_cm4.h
|
||||
..\obj\malloc.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
..\obj\malloc.o: ..\CORE\core_cmInstr.h
|
||||
..\obj\malloc.o: ..\CORE\cmsis_armcc.h
|
||||
..\obj\malloc.o: ..\CORE\core_cmFunc.h
|
||||
..\obj\malloc.o: ..\CORE\core_cmSimd.h
|
||||
..\obj\malloc.o: ..\USER\system_stm32f4xx.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h
|
||||
..\obj\malloc.o: ..\USER\stm32f4xx_hal_conf.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h
|
||||
..\obj\malloc.o: ..\USER\stm32f4xx.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\Legacy/stm32_hal_legacy.h
|
||||
..\obj\malloc.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_can.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_crc.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cryp.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma2d.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sram.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_fmc.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nor.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nand.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pccard.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sdram.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hash.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rng.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sd.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_sdmmc.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_usart.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_irda.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_smartcard.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_wwdg.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd_ex.h
|
||||
..\obj\malloc.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hcd.h
|
||||
..\obj\malloc.o: ..\MY\debug.h
|
||||
..\obj\malloc.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdarg.h
|
||||
..\obj\malloc.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdlib.h
|
||||
..\obj\malloc.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
|
||||
BIN
OBJ/malloc.o
BIN
OBJ/malloc.o
Binary file not shown.
BIN
OBJ/my.crf
BIN
OBJ/my.crf
Binary file not shown.
88
OBJ/my.d
88
OBJ/my.d
@@ -1,88 +0,0 @@
|
||||
..\obj\my.o: ..\MY\my.c
|
||||
..\obj\my.o: ..\MY\my.h
|
||||
..\obj\my.o: ..\FATFS\exfuns\fattester.h
|
||||
..\obj\my.o: ..\SYSTEM\sys\sys.h
|
||||
..\obj\my.o: ..\USER\stm32f4xx.h
|
||||
..\obj\my.o: ..\USER\stm32f429xx.h
|
||||
..\obj\my.o: ..\CORE\core_cm4.h
|
||||
..\obj\my.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
|
||||
..\obj\my.o: ..\CORE\core_cmInstr.h
|
||||
..\obj\my.o: ..\CORE\cmsis_armcc.h
|
||||
..\obj\my.o: ..\CORE\core_cmFunc.h
|
||||
..\obj\my.o: ..\CORE\core_cmSimd.h
|
||||
..\obj\my.o: ..\USER\system_stm32f4xx.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h
|
||||
..\obj\my.o: ..\USER\stm32f4xx_hal_conf.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h
|
||||
..\obj\my.o: ..\USER\stm32f4xx.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\Legacy/stm32_hal_legacy.h
|
||||
..\obj\my.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_adc_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_can.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_crc.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cryp.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma2d.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dac_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dcmi_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_eth.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sram.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_fmc.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nor.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_nand.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pccard.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sdram.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hash.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2c_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_i2s_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_iwdg.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_ltdc_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rng.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rtc_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sai_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_sd.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_sdmmc.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_spi.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_usart.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_irda.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_smartcard.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_wwdg.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usb.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pcd_ex.h
|
||||
..\obj\my.o: ..\HALLIB\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_hcd.h
|
||||
..\obj\my.o: ..\FATFS\src\ff.h
|
||||
..\obj\my.o: ..\FATFS\src\integer.h
|
||||
..\obj\my.o: ..\FATFS\src\ffconf.h
|
||||
..\obj\my.o: ..\HARDWARE\SDIO\sdio_sdcard.h
|
||||
..\obj\my.o: ..\USMART\usmart.h
|
||||
..\obj\my.o: ..\USMART\usmart_str.h
|
||||
..\obj\my.o: ..\SYSTEM\usart\usart.h
|
||||
..\obj\my.o: ..\FATFS\exfuns\exfuns.h
|
||||
..\obj\my.o: ..\MALLOC\malloc.h
|
||||
..\obj\my.o: ..\MY\debug.h
|
||||
..\obj\my.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdarg.h
|
||||
..\obj\my.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdlib.h
|
||||
..\obj\my.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user