📄 smartcard.txt
字号:
000182 e009 B |L3.408|
|L3.388|
;;;427 {
;;;428 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|
;;;429 {
;;;430 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
|L3.408|
000198 7e60 LDRB r0,[r4,#0x19]
00019a 42b0 CMP r0,r6
00019c d8f2 BHI |L3.388|
|L3.414|
;;;431 }
;;;432 }
;;;433 }
;;;434 /* Wait SW1 --------------------------------------------------------------*/
;;;435 i = 0;
00019e 2400 MOVS r4,#0
|L3.416|
;;;436 while(i < 10)
;;;437 {
;;;438 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|
;;;439 {
;;;440 SC_ResponceStatus->SW1 = locData;
0001ac f89df89d LDRB r0,[sp,#0]
0001b0 7528 STRB r0,[r5,#0x14]
;;;441 i = 11;
0001b2 e002 B |L3.442|
|L3.436|
;;;442 }
;;;443 else
;;;444 {
;;;445 i++;
0001b4 1c64 ADDS r4,r4,#1
0001b6 2c0a CMP r4,#0xa
0001b8 d3f2 BCC |L3.416|
|L3.442|
;;;446 }
;;;447 }
;;;448 /* Wait SW2 ------------------------------------------------------------*/
;;;449 i = 0;
0001ba 2400 MOVS r4,#0
|L3.444|
;;;450 while(i < 10)
;;;451 {
;;;452 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|
;;;453 {
;;;454 SC_ResponceStatus->SW2 = locData;
0001c8 f89df89d LDRB r0,[sp,#0]
0001cc 7568 STRB r0,[r5,#0x15]
|L3.462|
;;;455 i = 11;
;;;456 }
;;;457 else
;;;458 {
;;;459 i++;
;;;460 }
;;;461 }
;;;462 }
;;;463 }
0001ce e8bde8bd POP {r3-r9,pc}
|L3.466|
0001d2 1c64 ADDS r4,r4,#1
0001d4 2c0a CMP r4,#0xa
0001d6 d3f1 BCC |L3.444|
0001d8 e7f9 B |L3.462|
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
;;;544 static u8 SC_decode_Answer2reset(u8 *card)
;;;545 {
000000 e92de92d PUSH {r4-r8,lr}
;;;546 u32 i = 0, flag = 0, buf = 0, protocol = 0;
;;;547
;;;548 SC_A2R.TS = card[0]; /* Initial character */
000004 4c3a LDR r4,|L4.240|
000006 7802 LDRB r2,[r0,#0]
000008 7022 STRB r2,[r4,#0] ; SC_A2R
;;;549 SC_A2R.T0 = card[1]; /* Format character */
00000a 7842 LDRB r2,[r0,#1]
00000c 2100 MOVS r1,#0
00000e 7062 STRB r2,[r4,#1] ; SC_A2R
;;;550
;;;551 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
;;;552
;;;553 if ((SC_A2R.T0 & (u8)0x80) == 0x80)
00001a 0615 LSLS r5,r2,#24
00001c d500 BPL |L4.32|
;;;554 {
;;;555 flag = 1;
00001e 2301 MOVS r3,#1
|L4.32|
000020 f002f002 AND r6,r2,#0xf0
|L4.36|
;;;556 }
;;;557
;;;558 for (i = 0; i < 4; i++)
;;;559 {
;;;560 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
000036 f884f884 STRB r2,[r4,#0x2a] ; SC_A2R
00003a 2904 CMP r1,#4
00003c d3f2 BCC |L4.36|
;;;561 }
;;;562
;;;563 for (i = 0; i < SC_A2R.Tlength; i++)
00003e 2100 MOVS r1,#0
000040 e004 B |L4.76|
|L4.66|
;;;564 {
;;;565 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
|L4.76|
00004c f894f894 LDRB r2,[r4,#0x2a] ; SC_A2R
000050 428a CMP r2,r1
000052 d8f6 BHI |L4.66|
;;;566 }
;;;567
;;;568 protocol = SC_A2R.T[SC_A2R.Tlength - 1] & (u8)0x0F;
000054 4e26 LDR r6,|L4.240|
000056 f894f894 LDRB r1,[r4,#0x2a] ; SC_A2R
00005a 1c76 ADDS r6,r6,#1
00005c 5d89 LDRB r1,[r1,r6]
00005e f001f001 AND r5,r1,#0xf
;;;569
;;;570 while (flag)
000062 e032 B |L4.202|
|L4.100|
;;;571 {
;;;572 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|
;;;573 {
;;;574 flag = 1;
00006e 2301 MOVS r3,#1
000070 e000 B |L4.116|
|L4.114|
;;;575 }
;;;576 else
;;;577 {
;;;578 flag = 0;
000072 2300 MOVS r3,#0
|L4.116|
;;;579 }
;;;580
;;;581 buf = SC_A2R.Tlength;
;;;582 SC_A2R.Tlength = 0;
000074 2100 MOVS r1,#0
000076 f884f884 STRB r1,[r4,#0x2a] ; SC_A2R
00007a eb04eb04 ADD r12,r4,r2
|L4.126|
;;;583
;;;584 for (i = 0; i < 4; i++)
;;;585 {
;;;586 SC_A2R.Tlength = SC_A2R.Tlength + (((SC_A2R.T[buf - 1] & (u8)0xF0) >> (4 + i)) & (u8)0x1);
00007e f89cf89c LDRB r7,[r12,#1]
000082 f101f101 ADD r8,r1,#4
000086 f007f007 AND r7,r7,#0xf0
00008a fa27fa27 LSR r7,r7,r8
00008e f894f894 LDRB lr,[r4,#0x2a] ; SC_A2R
000092 f007f007 AND r7,r7,#1
000096 4477 ADD r7,r7,lr
000098 1c49 ADDS r1,r1,#1
00009a f884f884 STRB r7,[r4,#0x2a] ; SC_A2R
00009e 2904 CMP r1,#4
0000a0 d3ed BCC |L4.126|
;;;587 }
;;;588
;;;589 for (i = 0;i < SC_A2R.Tlength; i++)
0000a2 2100 MOVS r1,#0
0000a4 e008 B |L4.184|
|L4.166|
;;;590 {
;;;591 SC_A2R.T[buf + i] = card[i + 2 + buf];
0000a6 188f ADDS r7,r1,r2
0000a8 eb02eb02 ADD r12,r2,r1
0000ac 4407 ADD r7,r7,r0
0000ae 78bf LDRB r7,[r7,#2]
0000b0 44a4 ADD r12,r12,r4
0000b2 f88cf88c STRB r7,[r12,#2]
0000b6 1c49 ADDS r1,r1,#1
|L4.184|
0000b8 f894f894 LDRB r7,[r4,#0x2a] ; SC_A2R
0000bc 428f CMP r7,r1
0000be d8f2 BHI |L4.166|
;;;592 }
;;;593 SC_A2R.Tlength += (u8)buf;
0000c0 f894f894 LDRB r1,[r4,#0x2a] ; SC_A2R
0000c4 4411 ADD r1,r1,r2
0000c6 f884f884 STRB r1,[r4,#0x2a] ; SC_A2R
|L4.202|
0000ca 2b00 CMP r3,#0
0000cc d1ca BNE |L4.100|
;;;594 }
;;;595
;;;596 for (i = 0; i < SC_A2R.Hlength; i++)
0000ce 2100 MOVS r1,#0
0000d0 e007 B |L4.226|
|L4.210|
;;;597 {
;;;598 SC_A2R.H[i] = card[i + 2 + SC_A2R.Tlength];
0000d2 f894f894 LDRB r2,[r4,#0x2a] ; SC_A2R
0000d6 1813 ADDS r3,r2,r0
0000d8 1c8a ADDS r2,r1,#2
0000da 5c9a LDRB r2,[r3,r2]
0000dc 1863 ADDS r3,r4,r1
0000de 759a STRB r2,[r3,#0x16]
0000e0 1c49 ADDS r1,r1,#1
|L4.226|
0000e2 f894f894 LDRB r2,[r4,#0x2b] ; SC_A2R
0000e6 428a CMP r2,r1
0000e8 d8f3 BHI |L4.210|
;;;599 }
;;;600
;;;601 return (u8)protocol;
0000ea b2e8 UXTB r0,r5
;;;602 }
0000ec e8bde8bd POP {r4-r8,pc}
ENDP
|L4.240|
0000f0 00000000 DCD ||.bss||
AREA ||i.SC_Reset||, CODE, READONLY, ALIGN=2
SC_Reset PROC
000000 4602 MOV r2,r0
000002 f44ff44f MOV r1,#0x800
000006 4801 LDR r0,|L5.12|
000008 f7fff7ff B.W GPIO_WriteBit
ENDP
|L5.12|
00000c 40010c00 DCD 0x40010c00
AREA ||i.SC_Init||, CODE, READONLY, ALIGN=2
SC_Init PROC
;;;611 static void SC_Init(void)
;;;612 {
000000 e92de92d PUSH {r4-r8,lr}
000004 b088 SUB sp,sp,#0x20
;;;613 GPIO_InitTypeDef GPIO_InitStructure;
;;;614 USART_InitTypeDef USART_InitStructure;
;;;615
;;;616 /* Enable GPIOB, GPIOD and GPIOE clocks */
;;;617 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD |
000006 2101 MOVS r1,#1
000008 2068 MOVS r0,#0x68
00000a f7fff7ff BL RCC_APB2PeriphClockCmd
;;;618 RCC_APB2Periph_GPIOE, ENABLE);
;;;619
;;;620 /* Enable USART3 clock */
;;;621 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
00000e 2101 MOVS r1,#1
000010 0488 LSLS r0,r1,#18
000012 f7fff7ff BL RCC_APB1PeriphClockCmd
;;;622
;;;623 /* Configure USART3 CK(PB.12) as alternate function push-pull */
;;;624 GPIO_InitStructure.GPIO_Pin = SC_CLK;
000016 f44ff44f MOV r6,#0x1000
00001a f8adf8ad STRH r6,[sp,#0x1c]
;;;625 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
00001e 2018 MOVS r0,#0x18
000020 f88df88d STRB r0,[sp,#0x1f]
;;;626 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000024 2003 MOVS r0,#3
;;;627 GPIO_Init(GPIOB, &GPIO_InitStructure);
000026 4f35 LDR r7,|L6.252|
000028 f88df88d STRB r0,[sp,#0x1e]
00002c a907 ADD r1,sp,#0x1c
00002e 4638 MOV r0,r7
000030 f7fff7ff BL GPIO_Init
;;;628
;;;629 /* Configure USART3 Tx (PB.10) as alternate function open-drain */
;;;630 GPIO_InitStructure.GPIO_Pin = SC_IO;
000034 10b5 ASRS r5,r6,#2
000036 f8adf8ad STRH r5,[sp,#0x1c]
;;;631 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
00003a 201c MOVS r0,#0x1c
00003c f88df88d STRB r0,[sp,#0x1f]
;;;632 GPIO_Init(GPIOB, &GPIO_InitStructure);
000040 a907 ADD r1,sp,#0x1c
000042 4638 MOV r0,r7
000044 f7fff7ff BL GPIO_Init
;;;633
;;;634 /* Configure Smartcard Reset */
;;;635 GPIO_InitStructure.GPIO_Pin = SC_RESET;
000048 006c LSLS r4,r5,#1
00004a f8adf8ad STRH r4,[sp,#0x1c]
;;;636 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
00004e 2010 MOVS r0,#0x10
000050 f88df88d STRB r0,[sp,#0x1f]
;;;637 GPIO_Init(GPIOB, &GPIO_InitStructure);
000054 a907 ADD r1,sp,#0x1c
000056 4638 MOV r0,r7
000058 f7fff7ff BL GPIO_Init
;;;638
;;;639 /* Configure Smartcard 3/5V */
;;;640 GPIO_InitStructure.GPIO_Pin = SC_3_5V;
;;;641 GPIO_Init(GPIOD, &GPIO_InitStructure);
00005c f8dff8df LDR r8,|L6.256|
000060 f8adf8ad STRH r4,[sp,#0x1c]
000064 a907 ADD r1,sp,#0x1c
000066 4640 MOV r0,r8
000068 f7fff7ff BL GPIO_Init
;;;642
;;;643 /* Configure Smartcard CMDVCC */
;;;644 GPIO_InitStructure.GPIO_Pin = SC_CMDVCC;
00006c 2080 MOVS r0,#0x80
00006e f8adf8ad STRH r0,[sp,#0x1c]
;;;645 GPIO_Init(GPIOE, &GPIO_InitStructure);
000072 a907 ADD r1,sp,#0x1c
000074 4823 LDR r0,|L6.260|
000076 f7fff7ff BL GPIO_Init
;;;646
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -