📄 flash.lst
字号:
C51 COMPILER V6.23a FLASH 12/02/2003 11:07:21 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE FLASH
OBJECT MODULE PLACED IN FLASH.OBJ
COMPILER INVOKED BY: d:\SoftDev\Keil\C51\BIN\C51.EXE FLASH.C LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5
6 #include <REGSND1.H>
7 #include <string.h>
8 #include "flash.h"
9 #include "uart.h"
10
11 xdata BYTE rKM29UXDATA _at_ 0x4000;
12
13
14
15 unsigned int Check_Flash_Id(void)
16 {
17 1 int i;
18 1 unsigned int id;
19 1
20 1 FC_CMD;
21 1 rKM29UXDATA = 0x90;
22 1
23 1 FC_ADDR;
24 1 rKM29UXDATA = 0;
25 1 FC_DATA;
26 1
27 1 for(i=0;i<5;i++); //wait 100ns
28 1 id = rKM29UXDATA<<8;
29 1 for(i=0;i<5;i++); //wait 100ns
30 1 id += rKM29UXDATA;
31 1 FC_INACTIVE;
32 1 return id;
33 1 }
34 void Flash_Reset() //flash reset
35 {
36 1 int i;
37 1 // rPDATC = rPDATC | WP; //write unprotect
38 1 FC_CMD;
39 1 rKM29UXDATA = 0xff; //reset command
40 1 for (i=0;i<3000;i++); //delay
41 1 }
42 /********************************************************/
43 /*功能:擦除FLASH的1Block(对应文件系统为1Cluster) */
44 /* 每一个簇为16KB,因此KM29U128共有1024个簇 */
45 /*输入:unsigned int cluster/block(需要擦除的Block Number)*/
46 /*返回:OK或FAIL */
47 /********************************************************/
48
49 unsigned char Erase_Cluster(unsigned int cluster)
50 {
51 1 unsigned int blockPage = (cluster<<5);
52 1 int i;
53 1
54 1 FC_CMD;
55 1 rKM29UXDATA = 0x60;
C51 COMPILER V6.23a FLASH 12/02/2003 11:07:21 PAGE 2
56 1
57 1 FC_ADDR;
58 1 rKM29UXDATA = blockPage & 0xff;
59 1 rKM29UXDATA = (blockPage>>8) & 0xff;
60 1
61 1 for(i=0;i<2;i++); //tWC 50ns
62 1
63 1 FC_CMD;
64 1 rKM29UXDATA = 0xd0;
65 1
66 1 for(i=0;i<3;i++);
67 1
68 1 FC_DATA;
69 1 WAITRB; //wait max 3ms
70 1
71 1 FC_CMD;
72 1 rKM29UXDATA = 0x70;
73 1 FC_DATA;
74 1 if (rKM29UXDATA & 0x1) //erase error
75 1 {
76 2 FC_INACTIVE;
77 2 return FALSE;
78 2 }
79 1 else
80 1 {
81 2 FC_INACTIVE;
82 2 return TRUE;
83 2 }
84 1 }
85
86
87 /*****************************************************************/
88 /*功能:读取FLASH的某个Block中的1page数据 */
89 /* 在文件系统中,有如下对应关系:Block=Cluster */
90 /* Page =Sector */
91 /*输入:unsigned int block,page,unsigned char *pPage(存放数据的地址)*/
92 /*****************************************************************/
93
94 void ReadPage(unsigned int block,unsigned int page,unsigned char *pPage)
95 {
96 1 int i;
97 1 unsigned int blockPage = (block<<5) + page;
98 1
99 1 FC_CMD;
100 1 rKM29UXDATA = 0x00;
101 1 FC_ADDR;
102 1 rKM29UXDATA = 0;
103 1 rKM29UXDATA = blockPage & 0xff;
104 1 rKM29UXDATA = (blockPage>>8) & 0xff;
105 1 for(i=0;i<3;i++);
106 1 FC_DATA;
107 1 WAITRB; //random access ,wait max. 10us
108 1
109 1 for(i=0;i<SectorLength;i++) {*pPage++=rKM29UXDATA;}
110 1 FC_INACTIVE;
111 1 }
112
113 /*****************************************************************/
114 /*功能:向FLASH的某个Block中的1page写入数据 */
115 /* 在文件系统中,有如下对应关系:Block=Cluster */
116 /* Page =Sector */
117 /*输入:unsigned int block,page,unsigned char *pPage(存放数据的地址)*/
C51 COMPILER V6.23a FLASH 12/02/2003 11:07:21 PAGE 3
118 /*输出:0:Fail;1:OK */
119 /*****************************************************************/
120
121 int WritePage(unsigned int block,unsigned int page,unsigned char *pPage)
122 {
123 1 unsigned int blockPage = (block<<5) + page;
124 1 int i;
125 1 unsigned char *Source;
126 1 Source=pPage;
127 1 FC_CMD;
128 1 rKM29UXDATA = 0x80;
129 1 FC_ADDR;
130 1 rKM29UXDATA = 0;
131 1 rKM29UXDATA = blockPage & 0xff;
132 1 rKM29UXDATA = (blockPage>>8) & 0xff;
133 1 FC_DATA;
134 1 for(i=0;i<528;i++)
135 1 {rKM29UXDATA=*pPage++;}
136 1
137 1 FC_CMD;
138 1 rKM29UXDATA = 0x10;
139 1 for(i=0;i<10;i++);
140 1
141 1 WAITRB; //wait max 500us;
142 1 rKM29UXDATA = 0x70;
143 1 FC_DATA;
144 1 for(i=0;i<3;i++); //twhr=60ns
145 1 if((rKM29UXDATA & 0x1)) //
146 1 {
147 2 FC_INACTIVE;
148 2 return 0;
149 2 }
150 1 else
151 1 {
152 2 FC_INACTIVE;
153 2
154 2 }
155 1 }
156
157
158
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 523 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 9
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -