📄 main.lst
字号:
452
453 }
454 //------------------------------------------------------------------------------
455 ///change char to int
456 ///-----------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
457 void ChangChartoInt(unsigned char *Char,unsigned long *Int)
458 {
\ ChangChartoInt:
\ 00000000 01402DE9 PUSH {R0,LR}
459 unsigned int i;
460 for(i=0;i<4;i++)
\ 00000004 0020A0E3 MOV R2,#+0
461 {
462 *Int |= (unsigned int) Char[i]<<(24-8*i);
\ ??ChangChartoInt_0:
\ 00000008 003091E5 LDR R3,[R1, #+0]
\ 0000000C 01C0D0E4 LDRB R12,[R0], #+1
\ 00000010 18E0A0E3 MOV LR,#+24
\ 00000014 82E14EE0 SUB LR,LR,R2, LSL #+3
\ 00000018 1C3E83E1 ORR R3,R3,R12, LSL LR
\ 0000001C 003081E5 STR R3,[R1, #+0]
463 }
\ 00000020 012082E2 ADD R2,R2,#+1
\ 00000024 040052E3 CMP R2,#+4
\ 00000028 F6FFFF3A BCC ??ChangChartoInt_0
464 }
\ 0000002C 0050BDE8 POP {R12,LR}
\ 00000030 1EFF2FE1 BX LR ;; return
465 //------------------------------------------------------------------------------
466 /// LeadApp() function was used to copy the code in dataflash to sdram
467 //------------------------------------------------------------------------------
468
\ In section .text, align 4, keep-with-next
469 static unsigned int LeadAPP(void)
470 {
\ LeadAPP:
\ 00000000 F1402DE9 PUSH {R0,R4-R7,LR}
471 unsigned int page,i;
472 unsigned char *tmp;
473 unsigned int time;
474 tmp = SdCodeAddr;
\ 00000004 ........ LDR R0,??DataTable66 ;; SdCodeAddr
\ 00000008 004090E5 LDR R4,[R0, #+0]
475 time = timestamp;
\ 0000000C 28019FE5 LDR R0,??LeadAPP_0 ;; timestamp
\ 00000010 005090E5 LDR R5,[R0, #+0]
476 unsigned long crc,ConfigureCRC;
477 TRACE_INFO("In LeadApp\n\r");
\ 00000014 24019FE5 LDR R0,??LeadAPP_0+0x4 ;; `?<Constant "-I- In LeadApp\\n\\r">`
\ 00000018 ........ BL printf
478 for(page=1;page< AT45_PageNumber(&at45);page++)
\ 0000001C 0160A0E3 MOV R6,#+1
\ 00000020 080000EA B ??LeadAPP_1
479 {
480 // Verify that page has been erased correctly
481 memset(pBuffer, 0, AT45_PageSize(&at45));
482 AT45_Read(&at45, pBuffer, AT45_PageSize(&at45), page * AT45_PageSize(&at45));
483 for (i=0; i < AT45_PageSize(&at45); i++)
484 {
485 *tmp = pBuffer[i];
\ ??LeadAPP_2:
\ 00000024 ........ LDR R0,??DataTable63 ;; pBuffer
\ 00000028 0000D7E7 LDRB R0,[R7, +R0]
\ 0000002C 0100C4E4 STRB R0,[R4], #+1
486 tmp++;
487 }
\ 00000030 017087E2 ADD R7,R7,#+1
\ ??LeadAPP_3:
\ 00000034 ........ LDR R0,??DataTable74 ;; at45
\ 00000038 ........ BL AT45_PageSize
\ 0000003C 000057E1 CMP R7,R0
\ 00000040 F7FFFF3A BCC ??LeadAPP_2
\ 00000044 016086E2 ADD R6,R6,#+1
\ ??LeadAPP_1:
\ 00000048 ........ LDR R0,??DataTable73 ;; at45 + 28
\ 0000004C 000090E5 LDR R0,[R0, #+0]
\ 00000050 000090E5 LDR R0,[R0, #+0]
\ 00000054 000056E1 CMP R6,R0
\ 00000058 1100002A BCS ??LeadAPP_4
\ 0000005C ........ LDR R0,??DataTable74 ;; at45
\ 00000060 ........ BL AT45_PageSize
\ 00000064 0020A0E1 MOV R2,R0
\ 00000068 0010A0E3 MOV R1,#+0
\ 0000006C ........ LDR R0,??DataTable63 ;; pBuffer
\ 00000070 ........ BL memset
\ 00000074 ........ LDR R0,??DataTable74 ;; at45
\ 00000078 ........ BL AT45_PageSize
\ 0000007C 0070A0E1 MOV R7,R0
\ 00000080 ........ LDR R0,??DataTable74 ;; at45
\ 00000084 ........ BL AT45_PageSize
\ 00000088 970603E0 MUL R3,R7,R6
\ 0000008C 0020A0E1 MOV R2,R0
\ 00000090 ........ LDR R1,??DataTable63 ;; pBuffer
\ 00000094 ........ LDR R0,??DataTable74 ;; at45
\ 00000098 ........ BL AT45_Read
\ 0000009C 0070A0E3 MOV R7,#+0
\ 000000A0 E3FFFFEA B ??LeadAPP_3
488 }
489
490 TRACE_INFO("SdCodeAddr:%x",*SdCodeAddr);
\ ??LeadAPP_4:
\ 000000A4 ........ LDR R0,??DataTable66 ;; SdCodeAddr
\ 000000A8 000090E5 LDR R0,[R0, #+0]
\ 000000AC 0010D0E5 LDRB R1,[R0, #+0]
\ 000000B0 8C009FE5 LDR R0,??LeadAPP_0+0x8 ;; `?<Constant "-I- SdCodeAddr:%x">`
\ 000000B4 ........ BL printf
491 TRACE_INFO("Go to Whether\n\r");
\ 000000B8 88009FE5 LDR R0,??LeadAPP_0+0xC ;; `?<Constant "-I- Go to Whether\\n\\r">`
\ 000000BC ........ BL printf
492
493 if(WhetherEmpty() == 1)
\ 000000C0 ........ BL WhetherEmpty
\ 000000C4 010050E3 CMP R0,#+1
\ 000000C8 1900000A BEQ ??LeadAPP_5
494 {
495 return 1;
496 }
497 else
498 {
499 TRACE_INFO("The code has transmit to sdram\n\r");
\ 000000CC 78009FE5 LDR R0,??LeadAPP_0+0x10 ;; `?<Constant "-I- The code has tran...">`
\ 000000D0 ........ BL printf
500 crc = FullCRC(SdCodeAddr,2162160);
\ 000000D4 ........ LDR R1,??DataTable64 ;; 0x20fdf0
\ 000000D8 ........ LDR R0,??DataTable66 ;; SdCodeAddr
\ 000000DC 000090E5 LDR R0,[R0, #+0]
\ 000000E0 ........ BL FullCRC
\ 000000E4 0040A0E1 MOV R4,R0
501 time = timestamp-time;
\ 000000E8 4C009FE5 LDR R0,??LeadAPP_0 ;; timestamp
\ 000000EC 000090E5 LDR R0,[R0, #+0]
\ 000000F0 051040E0 SUB R1,R0,R5
502 TRACE_INFO("CRC end time:%x\n\r",time);
\ 000000F4 54009FE5 LDR R0,??LeadAPP_0+0x14 ;; `?<Constant "-I- CRC end time:%x\\n\\r">`
\ 000000F8 ........ BL printf
503 TRACE_INFO("CRC over:%x\n\r",crc);
^
Remark[Pe181]: argument is incompatible with corresponding format string
conversion
\ 000000FC 0410A0E1 MOV R1,R4
\ 00000100 4C009FE5 LDR R0,??LeadAPP_0+0x18 ;; `?<Constant "-I- CRC over:%x\\n\\r">`
\ 00000104 ........ BL printf
504
505 AT45_Read(&at45,(unsigned char *)&ConfigureCRC,4,524);
\ 00000108 833FA0E3 MOV R3,#+524
\ 0000010C 0420A0E3 MOV R2,#+4
\ 00000110 0D10A0E1 MOV R1,SP
\ 00000114 ........ LDR R0,??DataTable74 ;; at45
\ 00000118 ........ BL AT45_Read
506 if(crc == interface->CRC)
\ 0000011C ........ LDR R0,??DataTable77 ;; interface
\ 00000120 000090E5 LDR R0,[R0, #+0]
\ 00000124 0C0090E5 LDR R0,[R0, #+12]
\ 00000128 000054E1 CMP R4,R0
507 {
508 return 0;
\ 0000012C 0000A003 MOVEQ R0,#+0
509 }
510 else
511 {
512 return 1;
\ 00000130 0100A013 MOVNE R0,#+1
\ ??LeadAPP_5:
\ 00000134 F840BDE8 POP {R3-R7,LR}
\ 00000138 1EFF2FE1 BX LR ;; return
\ ??LeadAPP_0:
\ 0000013C ........ DC32 timestamp
\ 00000140 ........ DC32 `?<Constant "-I- In LeadApp\\n\\r">`
\ 00000144 ........ DC32 `?<Constant "-I- SdCodeAddr:%x">`
\ 00000148 ........ DC32 `?<Constant "-I- Go to Whether\\n\\r">`
\ 0000014C ........ DC32 `?<Constant "-I- The code has tran...">`
\ 00000150 ........ DC32 `?<Constant "-I- CRC end time:%x\\n\\r">`
\ 00000154 ........ DC32 `?<Constant "-I- CRC over:%x\\n\\r">`
513 }
514 }
515 }
516
517 //------------------------------------------------------------------------------
518 ///LoadApp() function was used to promote the application. So when the apllication
519 // load the application code to the sdram we should save code in dataflash
520 //\param information was used to store the code information
521 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
522 static unsigned char LoadApp()
523 {
\ LoadApp:
\ 00000000 73402DE9 PUSH {R0,R1,R4-R6,LR}
524 unsigned int j,PageNum;
525 unsigned char *tmp;
526 unsigned char * codeaddr;
527 unsigned long crc;
528 tmp = (unsigned char *)interface->address;
529 crc = FullCRC(tmp, interface->CSize);
\ 00000004 ........ LDR R0,??DataTable77 ;; interface
\ 00000008 000090E5 LDR R0,[R0, #+0]
\ 0000000C 081090E5 LDR R1,[R0, #+8]
\ 00000010 ........ LDR R0,??DataTable77 ;; interface
\ 00000014 000090E5 LDR R0,[R0, #+0]
\ 00000018 000090E5 LDR R0,[R0, #+0]
\ 0000001C ........ BL FullCRC
\ 00000020 00008DE5 STR R0,[SP, #+0]
530 codeaddr = SdCodeAddr;
\ 00000024 ........ LDR R0,??DataTable66 ;; SdCodeAddr
\ 00000028 004090E5 LDR R4,[R0, #+0]
531 TRACE_INFO("IN LOADAPP\n\r");
\ 0000002C E8019FE5 LDR R0,??LoadApp_0 ;; `?<Constant "-I- IN LOADAPP\\n\\r">`
\ 00000030 ........ BL printf
532 if(crc ==interface->CRC )
\ 00000034 00009DE5 LDR R0,[SP, #+0]
\ 00000038 ........ LDR R1,??DataTable77 ;; interface
\ 0000003C 001091E5 LDR R1,[R1, #+0]
\ 00000040 0C1091E5 LDR R1,[R1, #+12]
\ 00000044 010050E1 CMP R0,R1
\ 00000048 7000001A BNE ??LoadApp_1
533 {
534
535 for(PageNum=1; PageNum<AT45_PageNumber(&at45); PageNum++)
\ 0000004C 0150A0E3 MOV R5,#+1
\ 00000050 080000EA B ??LoadApp_2
536 {
537 //将dataflash的数据写入sdram以便于数据的包装
538 memset(pBuffer, 0, AT45_PageSize(&at45));
539 AT45_Read(&at45, pBuffer, AT4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -