📄 flash.lst
字号:
ARM COMPILER V2.32a, flash 08/08/05 09:50:22 PAGE 1
ARM COMPILER V2.32a, COMPILATION OF MODULE flash
OBJECT MODULE PLACED IN flash.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe flash.c THUMB OPTIMIZE(0,SPEED) BROWSE DEBUG TABS(4)
stmt level source
1 // flash.c
2
3 /********************************************************************/
4 /* */
5 /* Flash/EE Rountine */
6 /* */
7 /********************************************************************/
8 #include <ADuC7020.h>
9 #include "common.h"
10
11
12 /********************************************************************/
13 /* */
14 /* Flash/EE Data initialize routine */
15 /* (source-to-flash) */
16 /********************************************************************/
17
18 void InitFlash(void){
19 1
20 1 int i;
21 1
22 1 if(flash_read(0xF208)){ // check A2h[130]
23 2
24 2 sff8472_table(); // load defalt data table
25 2
26 2 A2h[130]=0; // clear flash init. enable bit
27 2
28 2 // Load A2h data to Flash, start address 0x0008F000
29 2 flash_erase(0xF000); // erase page, F000 thru F1FF
30 2 flash_erase(0xF200); // erase page, F200 thru F3FF
31 2
32 2 for(i=0; i<256; i++){
33 3 flash_write(0xF000+(i*4), A2h[i]);
34 3 }
35 2
36 2 // Load A0h data to Flash, start address 0x0008F400
37 2 flash_erase(0xF400); // erase page, F400 thru F5FF
38 2 flash_erase(0xF600); // erase page, F600 thru F7FF
39 2
40 2 for(i=0; i<256; i++){
41 3 flash_write(0xF400+(i*4), A0h[i]);
42 3 }
43 2 }
44 1 }
45
46
47 /********************************************************************/
48 /* */
49 /* Initialize SFF8472 table in SRAM */
50 /* (flash-to-sram) */
51 /********************************************************************/
52 void InitSFF8472(void){
53 1
54 1 int i;
55 1
56 1 // Map A2h data to SRAM
57 1 for(i=0; i<256; i++){
58 2 A2h[i] = (flash_read(0xF000+(i*4)));
59 2 }
ARM COMPILER V2.32a, flash 08/08/05 09:50:22 PAGE 2
60 1
61 1 // Load A0h data to Flash, start address 0x0008F400
62 1 for(i=0; i<256; i++){
63 2 A0h[i] = (flash_read(0xF400+(i*4)));
64 2 }
65 1 }
66
67
68 /********************************************************************/
69 /* */
70 /* Flash/EE Update routine */
71 /* */
72 /********************************************************************/
73 void FlashUpdate(BYTE i2c_addr){
74 1
75 1 int i;
76 1
77 1 //FIQCLR = 0x00000200; // clear I2C0SIRQ
78 1
79 1
80 1 if(i2c_addr == 0xA0){
81 2 // Load A0h data to Flash, start address 0x0008F400
82 2 flash_erase(0xF400); // erase page, F400 thru F5FF
83 2 flash_erase(0xF600); // erase page, F600 thru F7FF
84 2 for(i=0; i<256; i++){
85 3 flash_write(0xF400+(i*4), A0h[i]);
86 3 }
87 2 }
88 1
89 1 if(i2c_addr == 0xA2){
90 2 // Load A2h data to Flash, start address 0x0008F000
91 2 flash_erase(0xF000); // erase page, F000 thru F1FF
92 2 flash_erase(0xF200); // erase page, F200 thru F2FF
93 2 for(i=0; i<256; i++){
94 3 flash_write(0xF000+(i*4), A2h[i]);
95 3 }
96 2 }
97 1
98 1 //FIQEN = 0x00000200; // enable I2C0SIRQ
99 1
100 1 }
101
102
103 /********************************************************************/
104 /* */
105 /* Flash/EE read routine */
106 /* */
107 /********************************************************************/
108 unsigned char flash_read(unsigned short int addr){
109 1
110 1 WORD cnt = 3000;
111 1
112 1 FEEADR = addr; // set address
113 1 FEECON = 0x01; // single read command
114 1 //while(!(FEESTA & 0x01)){} // wait for command completion
115 1
116 1 while((cnt>1) && (!(FEESTA & 0x01))) {cnt--;}
117 1
118 1 return (FEEDAT & 0xFF); // return one byte data
119 1 }
120
121
122 /********************************************************************/
123 /* */
124 /* Flash/EE write routine */
125 /* */
ARM COMPILER V2.32a, flash 08/08/05 09:50:22 PAGE 3
126 /********************************************************************/
127 void flash_write(unsigned short int addr, unsigned char data){
128 1
129 1 WORD cnt = 3000;
130 1
131 1 FEEADR = addr; // set address
132 1 FEEDAT = data; // set data value
133 1 FEECON = 0x02; // write command
134 1 //while(!(FEESTA & 0x01)){} // wait for command completion
135 1
136 1 while((cnt>1) && (!(FEESTA & 0x01))) {cnt--;}
137 1
138 1 }
139
140
141 /********************************************************************/
142 /* */
143 /* Flash/EE erase routine */
144 /* */
145 /********************************************************************/
146 void flash_erase(unsigned short int addr){
147 1
148 1 WORD cnt = 3000;
149 1
150 1 FEEADR = addr; // set address
151 1 FEECON = 0x05; // page erase command
152 1 //while(!(FEESTA & 0x01)){} // wait for command completion
153 1
154 1 while((cnt>1) && (!(FEESTA & 0x01))) {cnt--;}
155 1
156 1 }
ARM COMPILER V2.32a, flash 08/08/05 09:50:22 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN DATA (A0h)
EXTERN DATA (A2h)
EXTERN CODE16 (sff8472_table?T)
*** PUBLICS:
PUBLIC flash_read?T
PUBLIC flash_write?T
PUBLIC flash_erase?T
PUBLIC InitFlash?T
PUBLIC FlashUpdate?T
PUBLIC InitSFF8472?T
*** CODE SEGMENT '?PR?InitFlash?T?flash':
18: void InitFlash(void){
00000000 B500 PUSH {LR}
00000002 B081 SUB R13,#0x4
00000004 ; SCOPE-START
22: if(flash_read(0xF208)){ // check A2h[130]
00000004 4800 LDR R0,=0xF208
00000006 F7FF BL flash_read?T ; T=0x0001 (1)
00000008 FFFB BL flash_read?T ; T=0x0001 (2)
0000000A 2800 CMP R0,#0x0 ; flash_read?T
0000000C D042 BEQ L_1 ; T=0x00000094
24: sff8472_table(); // load defalt data table
0000000E F7FF BL sff8472_table?T ; T=0x0001 (1)
00000010 FFF7 BL sff8472_table?T ; T=0x0001 (2)
26: A2h[130]=0; // clear flash init. enable bit
00000012 2100 MOV R1,#0x0
00000014 4800 LDR R0,=A2h + 0x82 ; A2h+130
00000016 7001 STRB R1,[R0,#0x0] ; A2h+130
29: flash_erase(0xF000); // erase page, F000 thru F1FF
00000018 4800 LDR R0,=0xF000
0000001A F7FF BL flash_erase?T ; T=0x0001 (1)
0000001C FFF1 BL flash_erase?T ; T=0x0001 (2)
30: flash_erase(0xF200); // erase page, F200 thru F3FF
0000001E 4800 LDR R0,=0xF200
00000020 F7FF BL flash_erase?T ; T=0x0001 (1)
00000022 FFEE BL flash_erase?T ; T=0x0001 (2)
32: for(i=0; i<256; i++){
00000024 2100 MOV R1,#0x0
00000026 A800 ADD R0,R13,#0x0
00000028 6001 STR R1,[R0,#0x0] ; i
0000002A E00F B L_4 ; T=0x0000004C
0000002C L_5:
33: flash_write(0xF000+(i*4), A2h[i]);
0000002C A800 ADD R0,R13,#0x0
0000002E 6800 LDR R0,[R0,#0x0] ; i
00000030 0080 LSL R0,R0,#0x2
00000032 4800 LDR R1,=0xF000
00000034 1840 ADD R0,R1
00000036 A900 ADD R1,R13,#0x0
00000038 680A LDR R2,[R1,#0x0] ; i
0000003A 4800 LDR R1,=A2h ; A2h
0000003C 1889 ADD R1,R2 ; A2h
0000003E 7809 LDRB R1,[R1,#0x0]
00000040 F7FF BL flash_write?T ; T=0x0001 (1)
00000042 FFDE BL flash_write?T ; T=0x0001 (2)
34: }
00000044 A800 ADD R0,R13,#0x0
00000046 6801 LDR R1,[R0,#0x0] ; i
00000048 3101 ADD R1,#0x1
0000004A 6001 STR R1,[R0,#0x0] ; i
ARM COMPILER V2.32a, flash 08/08/05 09:50:22 PAGE 5
0000004C L_4:
0000004C A800 ADD R0,R13,#0x0
0000004E 6800 LDR R0,[R0,#0x0] ; i
00000050 4940 LDR R1,=0x100
00000052 4288 CMP R0,R1
00000054 DBEA BLT L_5 ; T=0x0000002C
37: flash_erase(0xF400); // erase page, F400 thru F5FF
00000056 4800 LDR R0,=0xF400
00000058 F7FF BL flash_erase?T ; T=0x0001 (1)
0000005A FFD2 BL flash_erase?T ; T=0x0001 (2)
38: flash_erase(0xF600); // erase page, F600 thru F7FF
0000005C 4800 LDR R0,=0xF600
0000005E F7FF BL flash_erase?T ; T=0x0001 (1)
00000060 FFCF BL flash_erase?T ; T=0x0001 (2)
40: for(i=0; i<256; i++){
00000062 2100 MOV R1,#0x0
00000064 A800 ADD R0,R13,#0x0
00000066 6001 STR R1,[R0,#0x0] ; i
00000068 E00F B L_9 ; T=0x0000008A
0000006A L_10:
41: flash_write(0xF400+(i*4), A0h[i]);
0000006A A800 ADD R0,R13,#0x0
0000006C 6800 LDR R0,[R0,#0x0] ; i
0000006E 0080 LSL R0,R0,#0x2
00000070 4800 LDR R1,=0xF400
00000072 1840 ADD R0,R1
00000074 A900 ADD R1,R13,#0x0
00000076 680A LDR R2,[R1,#0x0] ; i
00000078 4800 LDR R1,=A0h ; A0h
0000007A 1889 ADD R1,R2 ; A0h
0000007C 7809 LDRB R1,[R1,#0x0]
0000007E F7FF BL flash_write?T ; T=0x0001 (1)
00000080 FFBF BL flash_write?T ; T=0x0001 (2)
42: }
00000082 A800 ADD R0,R13,#0x0
00000084 6801 LDR R1,[R0,#0x0] ; i
00000086 3101 ADD R1,#0x1
00000088 6001 STR R1,[R0,#0x0] ; i
0000008A L_9:
0000008A A800 ADD R0,R13,#0x0
0000008C 6800 LDR R0,[R0,#0x0] ; i
0000008E 4940 LDR R1,=0x100
00000090 4288 CMP R0,R1
00000092 DBEA BLT L_10 ; T=0x0000006A
43: }
00000094 L_1:
00000094 ; SCOPE-END
44: }
00000094 B001 ADD R13,#0x4
00000096 BC08 POP {R3}
00000098 4718 BX R3
0000009A ENDP ; 'InitFlash?T'
*** CODE SEGMENT '?PR?InitSFF8472?T?flash':
52: void InitSFF8472(void){
00000000 B500 PUSH {LR}
00000002 B081 SUB R13,#0x4
00000004 ; SCOPE-START
57: for(i=0; i<256; i++){
00000004 2100 MOV R1,#0x0
00000006 A800 ADD R0,R13,#0x0
00000008 6001 STR R1,[R0,#0x0] ; i
0000000A E00F B L_14 ; T=0x0000002C
0000000C L_15:
58: A2h[i] = (flash_read(0xF000+(i*4)));
0000000C A800 ADD R0,R13,#0x0
0000000E 6800 LDR R0,[R0,#0x0] ; i
ARM COMPILER V2.32a, flash 08/08/05 09:50:22 PAGE 6
00000010 0080 LSL R0,R0,#0x2
00000012 4800 LDR R1,=0xF000
00000014 1840 ADD R0,R1
00000016 F7FF BL flash_read?T ; T=0x0001 (1)
00000018 FFF3 BL flash_read?T ; T=0x0001 (2)
0000001A A900 ADD R1,R13,#0x0
0000001C 680A LDR R2,[R1,#0x0] ; i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -