📄 smartcard.txt
字号:
00019e 7528 STRB r0,[r5,#0x14]
;;;449 i = 11;
0001a0 e002 B |L8.424|
|L8.418|
;;;450 }
;;;451 else
;;;452 {
;;;453 i++;
0001a2 1c64 ADDS r4,r4,#1
0001a4 2c0a CMP r4,#0xa ;444
0001a6 d3f2 BCC |L8.398|
|L8.424|
;;;454 }
;;;455 }
;;;456 /* Wait SW2 ------------------------------------------------------------*/
;;;457 i = 0;
0001a8 2400 MOVS r4,#0
|L8.426|
;;;458 while(i < 10)
;;;459 {
;;;460 if(USART_ByteReceive(&locData, SC_Receive_Timeout) == SUCCESS)
0001aa 4631 MOV r1,r6
0001ac 4668 MOV r0,sp
0001ae f7fffffe BL USART_ByteReceive
0001b2 2801 CMP r0,#1
0001b4 d104 BNE |L8.448|
;;;461 {
;;;462 SC_ResponceStatus->SW2 = locData;
0001b6 f89d0000 LDRB r0,[sp,#0]
0001ba 7568 STRB r0,[r5,#0x15]
|L8.444|
;;;463 i = 11;
;;;464 }
;;;465 else
;;;466 {
;;;467 i++;
;;;468 }
;;;469 }
;;;470 }
;;;471 }
0001bc e8bd8ff8 POP {r3-r11,pc}
|L8.448|
0001c0 1c64 ADDS r4,r4,#1 ;467
0001c2 2c0a CMP r4,#0xa ;458
0001c4 d3f1 BCC |L8.426|
0001c6 e7f9 B |L8.444|
;;;472
ENDP
|L8.456|
DCD 0x40004800
|L8.460|
DCD ||.data||
AREA ||i.SC_decode_Answer2reset||, CODE, READONLY, ALIGN=2
SC_decode_Answer2reset PROC
;;;551 *******************************************************************************/
;;;552 static u8 SC_decode_Answer2reset(u8 *card)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;553 {
;;;554 u32 i = 0, flag = 0, buf = 0, protocol = 0;
;;;555
;;;556 SC_A2R.TS = card[0]; /* Initial character */
000004 4f3b LDR r7,|L9.244|
000006 7802 LDRB r2,[r0,#0]
000008 703a STRB r2,[r7,#0]
;;;557 SC_A2R.T0 = card[1]; /* Format character */
00000a 7842 LDRB r2,[r0,#1]
00000c 2100 MOVS r1,#0 ;554
00000e 707a STRB r2,[r7,#1]
;;;558
;;;559 SC_A2R.Hlength = SC_A2R.T0 & (u8)0x0F;
000010 f002040f AND r4,r2,#0xf
000014 f887402b STRB r4,[r7,#0x2b]
000018 460b MOV r3,r1 ;554
;;;560
;;;561 if ((SC_A2R.T0 & (u8)0x80) == 0x80)
00001a 0614 LSLS r4,r2,#24
00001c d500 BPL |L9.32|
;;;562 {
;;;563 flag = 1;
00001e 2301 MOVS r3,#1
|L9.32|
;;;564 }
;;;565
;;;566 for (i = 0; i < 4; i++)
;;;567 {
;;;568 SC_A2R.Tlength = SC_A2R.Tlength + (((SC_A2R.T0 & (u8)0xF0) >> (4 + i)) & (u8)0x1);
000020 f00205f0 AND r5,r2,#0xf0
|L9.36|
000024 1d0a ADDS r2,r1,#4
000026 fa25f202 LSR r2,r5,r2
00002a f897402a LDRB r4,[r7,#0x2a] ; SC_A2R
00002e f0020201 AND r2,r2,#1
000032 4422 ADD r2,r2,r4
000034 1c49 ADDS r1,r1,#1 ;566
000036 f887202a STRB r2,[r7,#0x2a]
00003a 2904 CMP r1,#4 ;566
00003c d3f2 BCC |L9.36|
;;;569 }
;;;570
;;;571 for (i = 0; i < SC_A2R.Tlength; i++)
00003e 2100 MOVS r1,#0
000040 e004 B |L9.76|
|L9.66|
;;;572 {
;;;573 SC_A2R.T[i] = card[i + 2];
000042 1842 ADDS r2,r0,r1
000044 187c ADDS r4,r7,r1
000046 7892 LDRB r2,[r2,#2]
000048 70a2 STRB r2,[r4,#2]
00004a 1c49 ADDS r1,r1,#1 ;571
|L9.76|
00004c f897202a LDRB r2,[r7,#0x2a] ;571 ; SC_A2R
000050 428a CMP r2,r1 ;571
000052 d8f6 BHI |L9.66|
;;;574 }
;;;575
;;;576 protocol = SC_A2R.T[SC_A2R.Tlength - 1] & (u8)0x0F;
000054 f8dfe09c LDR lr,|L9.244|
000058 f897102a LDRB r1,[r7,#0x2a] ; SC_A2R
00005c f10e0e01 ADD lr,lr,#1
000060 f811100e LDRB r1,[r1,lr]
000064 f001080f AND r8,r1,#0xf
;;;577
;;;578 while (flag)
000068 e030 B |L9.204|
;;;579 {
;;;580 if ((SC_A2R.T[SC_A2R.Tlength - 1] & (u8)0x80) == 0x80)
00006a bf00 NOP
|L9.108|
00006c f897202a LDRB r2,[r7,#0x2a] ; SC_A2R
000070 f812100e LDRB r1,[r2,lr]
000074 0609 LSLS r1,r1,#24
000076 d501 BPL |L9.124|
;;;581 {
;;;582 flag = 1;
000078 2301 MOVS r3,#1
00007a e000 B |L9.126|
|L9.124|
;;;583 }
;;;584 else
;;;585 {
;;;586 flag = 0;
00007c 2300 MOVS r3,#0
|L9.126|
;;;587 }
;;;588
;;;589 buf = SC_A2R.Tlength;
;;;590 SC_A2R.Tlength = 0;
00007e 2100 MOVS r1,#0
000080 f887102a STRB r1,[r7,#0x2a]
;;;591
;;;592 for (i = 0; i < 4; i++)
;;;593 {
;;;594 SC_A2R.Tlength = SC_A2R.Tlength + (((SC_A2R.T[buf - 1] & (u8)0xF0) >> (4 + i)) & (u8)0x1);
000084 eb070c02 ADD r12,r7,r2
|L9.136|
000088 f89c6001 LDRB r6,[r12,#1]
00008c 1d0c ADDS r4,r1,#4
00008e f00606f0 AND r6,r6,#0xf0
000092 40e6 LSRS r6,r6,r4
000094 f897502a LDRB r5,[r7,#0x2a] ; SC_A2R
000098 f0060401 AND r4,r6,#1
00009c 442c ADD r4,r4,r5
00009e 1c49 ADDS r1,r1,#1 ;592
0000a0 f887402a STRB r4,[r7,#0x2a]
0000a4 2904 CMP r1,#4 ;592
0000a6 d3ef BCC |L9.136|
;;;595 }
;;;596
;;;597 for (i = 0;i < SC_A2R.Tlength; i++)
0000a8 2100 MOVS r1,#0
0000aa e006 B |L9.186|
|L9.172|
;;;598 {
;;;599 SC_A2R.T[buf + i] = card[i + 2 + buf];
0000ac 188c ADDS r4,r1,r2
0000ae 1855 ADDS r5,r2,r1
0000b0 4404 ADD r4,r4,r0
0000b2 78a4 LDRB r4,[r4,#2]
0000b4 443d ADD r5,r5,r7
0000b6 70ac STRB r4,[r5,#2]
0000b8 1c49 ADDS r1,r1,#1 ;597
|L9.186|
0000ba f897402a LDRB r4,[r7,#0x2a] ;597 ; SC_A2R
0000be 428c CMP r4,r1 ;597
0000c0 d8f4 BHI |L9.172|
;;;600 }
;;;601 SC_A2R.Tlength += (u8)buf;
0000c2 f897102a LDRB r1,[r7,#0x2a] ; SC_A2R
0000c6 4411 ADD r1,r1,r2
0000c8 f887102a STRB r1,[r7,#0x2a]
|L9.204|
0000cc 2b00 CMP r3,#0 ;578
0000ce d1cd BNE |L9.108|
;;;602 }
;;;603
;;;604 for (i = 0; i < SC_A2R.Hlength; i++)
0000d0 2100 MOVS r1,#0
0000d2 e007 B |L9.228|
|L9.212|
;;;605 {
;;;606 SC_A2R.H[i] = card[i + 2 + SC_A2R.Tlength];
0000d4 f897302a LDRB r3,[r7,#0x2a] ; SC_A2R
0000d8 1c8a ADDS r2,r1,#2
0000da 4403 ADD r3,r3,r0
0000dc 5c9a LDRB r2,[r3,r2]
0000de 187b ADDS r3,r7,r1
0000e0 759a STRB r2,[r3,#0x16]
0000e2 1c49 ADDS r1,r1,#1 ;604
|L9.228|
0000e4 f897202b LDRB r2,[r7,#0x2b] ;604 ; SC_A2R
0000e8 428a CMP r2,r1 ;604
0000ea d8f3 BHI |L9.212|
;;;607 }
;;;608
;;;609 return (u8)protocol;
0000ec f00800ff AND r0,r8,#0xff
;;;610 }
0000f0 e8bd81f0 POP {r4-r8,pc}
;;;611
ENDP
|L9.244|
DCD ||.bss||
AREA ||i.USART_ByteReceive||, CODE, READONLY, ALIGN=2
USART_ByteReceive PROC
;;;791 *******************************************************************************/
;;;792 static ErrorStatus USART_ByteReceive(u8 *Data, u32 TimeOut)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;793 {
000004 4606 MOV r6,r0
000006 460d MOV r5,r1
;;;794 u32 Counter = 0;
000008 2400 MOVS r4,#0
;;;795
;;;796 while((USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET) && (Counter != TimeOut))
00000a 4f0a LDR r7,|L10.52|
00000c e000 B |L10.16|
|L10.14|
;;;797 {
;;;798 Counter++;
00000e 1c64 ADDS r4,r4,#1
|L10.16|
000010 2120 MOVS r1,#0x20 ;796
000012 4638 MOV r0,r7 ;796
000014 f7fffffe BL USART_GetFlagStatus
000018 b908 CBNZ r0,|L10.30|
00001a 42ac CMP r4,r5 ;796
00001c d1f7 BNE |L10.14|
|L10.30|
;;;799 }
;;;800
;;;801 if(Counter != TimeOut)
00001e 42ac CMP r4,r5
000020 d006 BEQ |L10.48|
;;;802 {
;;;803 *Data = (u8)USART_ReceiveData(USART3);
000022 4638 MOV r0,r7
000024 f7fffffe BL USART_ReceiveData
000028 7030 STRB r0,[r6,#0]
;;;804 return SUCCESS;
00002a 2001 MOVS r0,#1
|L10.44|
;;;805 }
;;;806 else
;;;807 {
;;;808 return ERROR;
;;;809 }
;;;810 }
00002c e8bd81f0 POP {r4-r8,pc}
|L10.48|
000030 2000 MOVS r0,#0 ;808
000032 e7fb B |L10.44|
;;;811
ENDP
|L10.52|
DCD 0x40004800
AREA ||.bss||, DATA, NOINIT, ALIGN=0
SC_A2R
% 44
SC_ATR_Table
% 40
AREA ||.data||, DATA, ALIGN=2
SCData
000000 00000000 DCB 0x00,0x00,0x00,0x00
F_Table
DCD 0x00000000
DCD 0x00000174
DCD 0x0000022e
DCD 0x000002e8
DCD 0x0000045c
DCD 0x000005d0
DCD 0x00000744
DCD 0x00000000
DCD 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -