?? main.lst
字號:
\ 00000000 01 DC8 1
162
163 // struct Inter is an interface for transmit information from usb or application
164 // to bootloader
165
166 // define a global interface varialble
\ In section .bss, align 4
167 INTERFACE * interface;
\ interface:
\ 00000000 DS8 4
168
169 #define LEADAPP_STATE 1
170 #define STARTAPP_STATE 2
171 #define LOADAPP_STATE 3
172 #define STARTUSB_STATE 4
173 #define LISTEN 5
174
175 //My define variable end ******************************************************
176 /// SPI driver instance.
\ In section .bss, align 4
177 static Spid spid;
\ spid:
\ 00000000 DS8 16
178
179 /// AT45 driver instance.
\ In section .bss, align 4
180 static At45 at45;
\ at45:
\ 00000000 DS8 40
181
182 /// Pins used by the application.
\ In section .rodata, align 4
183 static const Pin pins[] = {BOARD_AT45_A_SPI_PINS, BOARD_AT45_A_NPCS_PIN};
\ pins:
\ 00000000 0010000000F4 DC32 4096, 0FFFFF400H
\ FFFF
\ 00000008 02000100 DC8 2, 0, 1, 0
\ 0000000C 0020000000F4 DC32 8192, 0FFFFF400H
\ FFFF
\ 00000014 02000100 DC8 2, 0, 1, 0
\ 00000018 0040000000F4 DC32 16384, 0FFFFF400H
\ FFFF
\ 00000020 02000100 DC8 2, 0, 1, 0
\ 00000024 0008000000F4 DC32 2048, 0FFFFF400H
\ FFFF
\ 0000002C 02000100 DC8 2, 0, 1, 0
184
185 /// Page buffer.
\ In section .bss, align 4
186 static unsigned char pBuffer[2112];
\ pBuffer:
\ 00000000 DS8 2112
187
188 //------------------------------------------------------------------------------
189 // Internal functions
190 //------------------------------------------------------------------------------
191
192 //------------------------------------------------------------------------------
193 /// SPI interrupt handler. Invokes the SPI driver handler to check for pending
194 /// interrupts.
195 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
196 static void ISR_Spi(void)
197 {
\ ISR_Spi:
\ 00000000 01402DE9 PUSH {R0,LR}
198 SPID_Handler(&spid);
\ 00000004 ........ LDR R0,??DataTable42 ;; spid
199 }
\ 00000008 0050BDE8 POP {R12,LR}
\ 0000000C ........ B SPID_Handler ;; tailcall
200
201 //------------------------------------------------------------------------------
202 /// Retrieves and returns the At45 current status, or 0 if an error
203 /// happened.
204 /// \param pAt45 Pointer to a At45 driver instance.
205 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
206 static unsigned char AT45_GetStatus(At45 *pAt45)
207 {
\ AT45_GetStatus:
\ 00000000 13402DE9 PUSH {R0,R1,R4,LR}
\ 00000004 0040B0E1 MOVS R4,R0
208 unsigned char error;
209 unsigned char status;
210
211 // Sanity checks
212 ASSERT(pAt45, "-F- AT45_GetStatus: pAt45 is null\n\r");
\ 00000008 0400001A BNE ??AT45_GetStatus_0
\ 0000000C ........ LDR R0,??DataTable12 ;; `?<Constant "-F- ASSERT: ">`
\ 00000010 ........ BL printf
\ 00000014 68009FE5 LDR R0,??AT45_GetStatus_1 ;; `?<Constant "-F- AT45_GetStatus: p...">`
\ 00000018 ........ BL printf
\ ??AT45_GetStatus_2:
\ 0000001C FEFFFFEA B ??AT45_GetStatus_2
213
214 // Issue a status register read command
215 error = AT45_SendCommand(pAt45, AT45_STATUS_READ, 1, &status, 1, 0, 0, 0);
\ ??AT45_GetStatus_0:
\ 00000020 0010A0E3 MOV R1,#+0
\ 00000024 0000A0E3 MOV R0,#+0
\ 00000028 03002DE9 PUSH {R0,R1}
\ 0000002C 0100A0E3 MOV R0,#+1
\ 00000030 03002DE9 PUSH {R0,R1}
\ 00000034 10308DE2 ADD R3,SP,#+16
\ 00000038 0020A0E1 MOV R2,R0
\ 0000003C D710A0E3 MOV R1,#+215
\ 00000040 0400A0E1 MOV R0,R4
\ 00000044 ........ BL AT45_SendCommand
\ 00000048 10D08DE2 ADD SP,SP,#+16 ;; stack cleaning
216 ASSERT(!error, "-F- AT45_GetStatus: Failed to issue command.\n\r");
\ 0000004C 000050E3 CMP R0,#+0
\ 00000050 0400000A BEQ ??AT45_GetStatus_3
\ 00000054 ........ LDR R0,??DataTable12 ;; `?<Constant "-F- ASSERT: ">`
\ 00000058 ........ BL printf
\ 0000005C 24009FE5 LDR R0,??AT45_GetStatus_1+0x4 ;; `?<Constant "-F- AT45_GetStatus: F...">`
\ 00000060 ........ BL printf
\ ??AT45_GetStatus_4:
\ 00000064 FEFFFFEA B ??AT45_GetStatus_4
217
218 // Wait for command to terminate
219 while (AT45_IsBusy(pAt45));
\ ??AT45_GetStatus_3:
\ 00000068 0400A0E1 MOV R0,R4
\ 0000006C ........ BL AT45_IsBusy
\ 00000070 000050E3 CMP R0,#+0
\ 00000074 FBFFFF1A BNE ??AT45_GetStatus_3
220
221 return status;
\ 00000078 0000DDE5 LDRB R0,[SP, #+0]
\ 0000007C 1C40BDE8 POP {R2-R4,LR}
\ 00000080 1EFF2FE1 BX LR ;; return
\ ??AT45_GetStatus_1:
\ 00000084 ........ DC32 `?<Constant "-F- AT45_GetStatus: p...">`
\ 00000088 ........ DC32 `?<Constant "-F- AT45_GetStatus: F...">`
222 }
223
224 //------------------------------------------------------------------------------
225 /// Waits for the At45 to be ready to accept new commands.
226 /// \param pAt45 Pointer to a At45 driver instance.
227 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
229 {
\ AT45_WaitReady:
\ 00000000 10402DE9 PUSH {R4,LR}
\ 00000004 0040B0E1 MOVS R4,R0
230 unsigned char ready = 0;
231
232 // Sanity checks
233 ASSERT(pAt45, "-F- AT45_WaitUntilReady: pAt45 is null\n\r");
\ 00000008 0400001A BNE ??AT45_WaitReady_0
\ 0000000C ........ LDR R0,??DataTable12 ;; `?<Constant "-F- ASSERT: ">`
\ 00000010 ........ BL printf
\ 00000014 1C009FE5 LDR R0,??AT45_WaitReady_1 ;; `?<Constant "-F- AT45_WaitUntilRea...">`
\ 00000018 ........ BL printf
\ ??AT45_WaitReady_2:
\ 0000001C FEFFFFEA B ??AT45_WaitReady_2
234
235 // Poll device until it is ready
236 while (!ready) {
237
238 ready = AT45_STATUS_READY(AT45_GetStatus(pAt45));
\ ??AT45_WaitReady_0:
\ 00000020 0400A0E1 MOV R0,R4
\ 00000024 ........ BL AT45_GetStatus
\ 00000028 800010E2 ANDS R0,R0,#0x80
239 }
\ 0000002C FBFFFF0A BEQ ??AT45_WaitReady_0
240 }
\ 00000030 1040BDE8 POP {R4,LR}
\ 00000034 1EFF2FE1 BX LR ;; return
\ ??AT45_WaitReady_1:
\ 00000038 ........ DC32 `?<Constant "-F- AT45_WaitUntilRea...">`
241
242 //------------------------------------------------------------------------------
243 /// Reads and returns the JEDEC identifier of a At45.
244 /// \param pAt45 Pointer to a At45 driver instance.
245 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
246 static unsigned int AT45_GetJedecId(At45 *pAt45)
247 {
\ AT45_GetJedecId:
\ 00000000 13402DE9 PUSH {R0,R1,R4,LR}
\ 00000004 0040B0E1 MOVS R4,R0
248 unsigned char error;
249 unsigned int id;
250
251 // Sanity checks
252 ASSERT(pAt45, "-F- AT45_GetJedecId: pAt45 is null\n\r");
\ 00000008 0400001A BNE ??AT45_GetJedecId_0
\ 0000000C ........ LDR R0,??DataTable12 ;; `?<Constant "-F- ASSERT: ">`
\ 00000010 ........ BL printf
\ 00000014 68009FE5 LDR R0,??AT45_GetJedecId_1 ;; `?<Constant "-F- AT45_GetJedecId: ...">`
\ 00000018 ........ BL printf
\ ??AT45_GetJedecId_2:
\ 0000001C FEFFFFEA B ??AT45_GetJedecId_2
253
254 // Issue a manufacturer and device ID read command
255 error = AT45_SendCommand(pAt45, AT45_ID_READ, 1, (void *) &id, 4, 0, 0, 0);
\ ??AT45_GetJedecId_0:
\ 00000020 0010A0E3 MOV R1,#+0
\ 00000024 0000A0E3 MOV R0,#+0
\ 00000028 03002DE9 PUSH {R0,R1}
\ 0000002C 0400A0E3 MOV R0,#+4
\ 00000030 03002DE9 PUSH {R0,R1}
\ 00000034 10308DE2 ADD R3,SP,#+16
\ 00000038 0120A0E3 MOV R2,#+1
\ 0000003C 9F10A0E3 MOV R1,#+159
\ 00000040 0400A0E1 MOV R0,R4
\ 00000044 ........ BL AT45_SendCommand
\ 00000048 10D08DE2 ADD SP,SP,#+16 ;; stack cleaning
256 ASSERT(!error, "-F- AT45_GetJedecId: Could not issue command.\n\r");
\ 0000004C 000050E3 CMP R0,#+0
\ 00000050 0400000A BEQ ??AT45_GetJedecId_3
\ 00000054 ........ LDR R0,??DataTable12 ;; `?<Constant "-F- ASSERT: ">`
\ 00000058 ........ BL printf
\ 0000005C 24009FE5 LDR R0,??AT45_GetJedecId_1+0x4 ;; `?<Constant "-F- AT45_GetJedecId: ...">_1`
\ 00000060 ........ BL printf
\ ??AT45_GetJedecId_4:
\ 00000064 FEFFFFEA B ??AT45_GetJedecId_4
257
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -