📄 smartcard.txt
字号:
;;;407 }
;;;408 }
;;;409
;;;410 /* If no status bytes received ---------------------------------------------*/
;;;411 if(SC_ResponceStatus->SW1 == 0x00)
000136 7d28 LDRB r0,[r5,#0x14]
000138 2800 CMP r0,#0
00013a d148 BNE |L3.462|
;;;412 {
;;;413 /* Send body data to SC--------------------------------------------------*/
;;;414 if (SC_ADPU->Body.LC)
00013c 7920 LDRB r0,[r4,#4]
00013e b1e8 CBZ r0,|L3.380|
;;;415 {
;;;416 for(i = 0; i < SC_ADPU->Body.LC; i++)
000140 2600 MOVS r6,#0
000142 e00f B |L3.356|
|L3.324|
;;;417 {
;;;418 SCData = SC_ADPU->Body.Data[i];
000144 19a0 ADDS r0,r4,r6
000146 7940 LDRB r0,[r0,#5]
000148 f888f888 STRB r0,[r8,#0] ; SCData
;;;419
;;;420 USART_SendData(USART3, SCData);
00014c f898f898 LDRB r1,[r8,#0] ; SCData
000150 4648 MOV r0,r9
000152 f7fff7ff BL USART_SendData
|L3.342|
;;;421 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000156 2140 MOVS r1,#0x40
000158 4648 MOV r0,r9
00015a f7fff7ff BL USART_GetFlagStatus
00015e 2800 CMP r0,#0
000160 d0f9 BEQ |L3.342|
000162 1c76 ADDS r6,r6,#1 ;416
|L3.356|
000164 7920 LDRB r0,[r4,#4] ;416
000166 42b0 CMP r0,r6 ;416
000168 d8ec BHI |L3.324|
;;;422 {
;;;423 }
;;;424 }
;;;425 /* Flush the USART3 DR */
;;;426 (void)USART_ReceiveData(USART3);
00016a 4648 MOV r0,r9
00016c f7fff7ff BL USART_ReceiveData
;;;427 /* Disable the DMA Receive (Reset DMAR bit only) */
;;;428 USART_DMACmd(USART3, USART_DMAReq_Rx, DISABLE);
000170 2200 MOVS r2,#0
000172 2140 MOVS r1,#0x40
000174 4648 MOV r0,r9
000176 f7fff7ff BL USART_DMACmd
00017a e010 B |L3.414|
|L3.380|
;;;429 }
;;;430
;;;431 /* Or receive body data from SC ------------------------------------------*/
;;;432 else if (SC_ADPU->Body.LE)
00017c 7e60 LDRB r0,[r4,#0x19]
00017e b170 CBZ r0,|L3.414|
;;;433 {
;;;434 for(i = 0; i < SC_ADPU->Body.LE; i++)
000180 2600 MOVS r6,#0
000182 e009 B |L3.408|
|L3.388|
;;;435 {
;;;436 if(USART_ByteReceive(&locData, SC_Receive_Timeout) == SUCCESS)
000184 4639 MOV r1,r7
000186 4668 MOV r0,sp
000188 f7fff7ff BL USART_ByteReceive
00018c 2801 CMP r0,#1
00018e d102 BNE |L3.406|
;;;437 {
;;;438 SC_ResponceStatus->Data[i] = locData;
000190 f89df89d LDRB r0,[sp,#0]
000194 55a8 STRB r0,[r5,r6]
|L3.406|
000196 1c76 ADDS r6,r6,#1 ;434
|L3.408|
000198 7e60 LDRB r0,[r4,#0x19] ;434
00019a 42b0 CMP r0,r6 ;434
00019c d8f2 BHI |L3.388|
|L3.414|
;;;439 }
;;;440 }
;;;441 }
;;;442 /* Wait SW1 --------------------------------------------------------------*/
;;;443 i = 0;
00019e 2400 MOVS r4,#0
|L3.416|
;;;444 while(i < 10)
;;;445 {
;;;446 if(USART_ByteReceive(&locData, SC_Receive_Timeout) == SUCCESS)
0001a0 4639 MOV r1,r7
0001a2 4668 MOV r0,sp
0001a4 f7fff7ff BL USART_ByteReceive
0001a8 2801 CMP r0,#1
0001aa d103 BNE |L3.436|
;;;447 {
;;;448 SC_ResponceStatus->SW1 = locData;
0001ac f89df89d LDRB r0,[sp,#0]
0001b0 7528 STRB r0,[r5,#0x14]
;;;449 i = 11;
0001b2 e002 B |L3.442|
|L3.436|
;;;450 }
;;;451 else
;;;452 {
;;;453 i++;
0001b4 1c64 ADDS r4,r4,#1
0001b6 2c0a CMP r4,#0xa ;444
0001b8 d3f2 BCC |L3.416|
|L3.442|
;;;454 }
;;;455 }
;;;456 /* Wait SW2 ------------------------------------------------------------*/
;;;457 i = 0;
0001ba 2400 MOVS r4,#0
|L3.444|
;;;458 while(i < 10)
;;;459 {
;;;460 if(USART_ByteReceive(&locData, SC_Receive_Timeout) == SUCCESS)
0001bc 4639 MOV r1,r7
0001be 4668 MOV r0,sp
0001c0 f7fff7ff BL USART_ByteReceive
0001c4 2801 CMP r0,#1
0001c6 d104 BNE |L3.466|
;;;461 {
;;;462 SC_ResponceStatus->SW2 = locData;
0001c8 f89df89d LDRB r0,[sp,#0]
0001cc 7568 STRB r0,[r5,#0x15]
|L3.462|
;;;463 i = 11;
;;;464 }
;;;465 else
;;;466 {
;;;467 i++;
;;;468 }
;;;469 }
;;;470 }
;;;471 }
0001ce e8bde8bd POP {r3-r9,pc}
|L3.466|
0001d2 1c64 ADDS r4,r4,#1 ;467
0001d4 2c0a CMP r4,#0xa ;458
0001d6 d3f1 BCC |L3.444|
0001d8 e7f9 B |L3.462|
;;;472
ENDP
0001da 0000 DCW 0x0000
|L3.476|
0001dc 40004800 DCD 0x40004800
|L3.480|
0001e0 00000000 DCD ||.data||
AREA ||i.SC_decode_Answer2reset||, CODE, READONLY, ALIGN=2
SC_decode_Answer2reset PROC
;;;552 static u8 SC_decode_Answer2reset(u8 *card)
;;;553 {
000000 e92de92d PUSH {r4-r8,lr}
;;;554 u32 i = 0, flag = 0, buf = 0, protocol = 0;
;;;555
;;;556 SC_A2R.TS = card[0]; /* Initial character */
000004 4c3b LDR r4,|L4.244|
000006 7802 LDRB r2,[r0,#0]
000008 7022 STRB r2,[r4,#0] ; SC_A2R
;;;557 SC_A2R.T0 = card[1]; /* Format character */
00000a 7842 LDRB r2,[r0,#1]
00000c 2100 MOVS r1,#0 ;554
00000e 7062 STRB r2,[r4,#1] ; SC_A2R
;;;558
;;;559 SC_A2R.Hlength = SC_A2R.T0 & (u8)0x0F;
000010 f002f002 AND r5,r2,#0xf
000014 f884f884 STRB r5,[r4,#0x2b] ; SC_A2R
000018 460b MOV r3,r1 ;554
;;;560
;;;561 if ((SC_A2R.T0 & (u8)0x80) == 0x80)
00001a 0615 LSLS r5,r2,#24
00001c d500 BPL |L4.32|
;;;562 {
;;;563 flag = 1;
00001e 2301 MOVS r3,#1
|L4.32|
000020 f002f002 AND r6,r2,#0xf0
|L4.36|
;;;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);
000024 1d0d ADDS r5,r1,#4
000026 fa26fa26 LSR r2,r6,r5
00002a f894f894 LDRB r7,[r4,#0x2a] ; SC_A2R
00002e f002f002 AND r2,r2,#1
000032 443a ADD r2,r2,r7
000034 1c49 ADDS r1,r1,#1 ;566
000036 f884f884 STRB r2,[r4,#0x2a] ; SC_A2R
00003a 2904 CMP r1,#4 ;566
00003c d3f2 BCC |L4.36|
;;;569 }
;;;570
;;;571 for (i = 0; i < SC_A2R.Tlength; i++)
00003e 2100 MOVS r1,#0
000040 e004 B |L4.76|
|L4.66|
;;;572 {
;;;573 SC_A2R.T[i] = card[i + 2];
000042 1842 ADDS r2,r0,r1
000044 1865 ADDS r5,r4,r1
000046 7892 LDRB r2,[r2,#2]
000048 70aa STRB r2,[r5,#2]
00004a 1c49 ADDS r1,r1,#1 ;571
|L4.76|
00004c f894f894 LDRB r2,[r4,#0x2a] ;571 ; SC_A2R
000050 428a CMP r2,r1 ;571
000052 d8f6 BHI |L4.66|
;;;574 }
;;;575
;;;576 protocol = SC_A2R.T[SC_A2R.Tlength - 1] & (u8)0x0F;
000054 4e27 LDR r6,|L4.244|
000056 f894f894 LDRB r1,[r4,#0x2a] ; SC_A2R
00005a 1c76 ADDS r6,r6,#1
00005c 5d89 LDRB r1,[r1,r6]
00005e f001f001 AND r7,r1,#0xf
;;;577
;;;578 while (flag)
000062 e032 B |L4.202|
|L4.100|
;;;579 {
;;;580 if ((SC_A2R.T[SC_A2R.Tlength - 1] & (u8)0x80) == 0x80)
000064 f894f894 LDRB r2,[r4,#0x2a] ; SC_A2R
000068 5d91 LDRB r1,[r2,r6]
00006a 0609 LSLS r1,r1,#24
00006c d501 BPL |L4.114|
;;;581 {
;;;582 flag = 1;
00006e 2301 MOVS r3,#1
000070 e000 B |L4.116|
|L4.114|
;;;583 }
;;;584 else
;;;585 {
;;;586 flag = 0;
000072 2300 MOVS r3,#0
|L4.116|
;;;587 }
;;;588
;;;589 buf = SC_A2R.Tlength;
;;;590 SC_A2R.Tlength = 0;
000074 2100 MOVS r1,#0
000076 f884f884 STRB r1,[r4,#0x2a] ; SC_A2R
00007a eb04eb04 ADD lr,r4,r2
;;;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);
00007e bf00 NOP
|L4.128|
000080 f89ef89e LDRB r8,[lr,#1]
000084 1d0d ADDS r5,r1,#4
000086 f008f008 AND r8,r8,#0xf0
00008a fa28fa28 LSR r8,r8,r5
00008e f894f894 LDRB r12,[r4,#0x2a] ; SC_A2R
000092 f008f008 AND r5,r8,#1
000096 4465 ADD r5,r5,r12
000098 1c49 ADDS r1,r1,#1 ;592
00009a f884f884 STRB r5,[r4,#0x2a] ; SC_A2R
00009e 2904 CMP r1,#4 ;592
0000a0 d3ee BCC |L4.128|
;;;595 }
;;;596
;;;597 for (i = 0;i < SC_A2R.Tlength; i++)
0000a2 2100 MOVS r1,#0
0000a4 e008 B |L4.184|
|L4.166|
;;;598 {
;;;599 SC_A2R.T[buf + i] = card[i + 2 + buf];
0000a6 188d ADDS r5,r1,r2
0000a8 eb02eb02 ADD r12,r2,r1
0000ac 4405 ADD r5,r5,r0
0000ae 78ad LDRB r5,[r5,#2]
0000b0 44a4 ADD r12,r12,r4
0000b2 f88cf88c STRB r5,[r12,#2]
0000b6 1c49 ADDS r1,r1,#1 ;597
|L4.184|
0000b8 f894f894 LDRB r5,[r4,#0x2a] ;597 ; SC_A2R
0000bc 428d CMP r5,r1 ;597
0000be d8f2 BHI |L4.166|
;;;600 }
;;;601 SC_A2R.Tlength += (u8)buf;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -