📄 smartcard.txt
字号:
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 ;578
0000cc d1ca BNE |L4.100|
;;;602 }
;;;603
;;;604 for (i = 0; i < SC_A2R.Hlength; i++)
0000ce 2100 MOVS r1,#0
0000d0 e008 B |L4.228|
;;;605 {
;;;606 SC_A2R.H[i] = card[i + 2 + SC_A2R.Tlength];
0000d2 bf00 NOP
|L4.212|
0000d4 f894f894 LDRB r3,[r4,#0x2a] ; SC_A2R
0000d8 1c8a ADDS r2,r1,#2
0000da 4403 ADD r3,r3,r0
0000dc 5c9a LDRB r2,[r3,r2]
0000de 1863 ADDS r3,r4,r1
0000e0 759a STRB r2,[r3,#0x16]
0000e2 1c49 ADDS r1,r1,#1 ;604
|L4.228|
0000e4 f894f894 LDRB r2,[r4,#0x2b] ;604 ; SC_A2R
0000e8 428a CMP r2,r1 ;604
0000ea d8f3 BHI |L4.212|
;;;607 }
;;;608
;;;609 return (u8)protocol;
0000ec b2f8 UXTB r0,r7
;;;610 }
0000ee e8bde8bd POP {r4-r8,pc}
;;;611
ENDP
0000f2 0000 DCW 0x0000
|L4.244|
0000f4 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
;;;619 static void SC_Init(void)
;;;620 {
000000 e92de92d PUSH {r4-r8,lr}
000004 b088 SUB sp,sp,#0x20
;;;621 GPIO_InitTypeDef GPIO_InitStructure;
;;;622 USART_InitTypeDef USART_InitStructure;
;;;623 USART_ClockInitTypeDef USART_ClockInitStructure;
;;;624
;;;625 /* Enable GPIO_3_5V, GPIORESET and GPIO_CMDVCC clocks */
;;;626 RCC_APB2PeriphClockCmd(RCC_APB2Periph_3_5V | RCC_APB2Periph_RESET |
000006 2101 MOVS r1,#1
000008 2018 MOVS r0,#0x18
00000a f7fff7ff BL RCC_APB2PeriphClockCmd
;;;627 RCC_APB2Periph_CMDVCC, ENABLE);
;;;628
;;;629 /* Enable USART3 clock */
;;;630 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
00000e 2101 MOVS r1,#1
000010 0488 LSLS r0,r1,#18
000012 f7fff7ff BL RCC_APB1PeriphClockCmd
;;;631
;;;632 /* Configure USART3 CK(PB.12) as alternate function push-pull */
;;;633 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
000016 f44ff44f MOV r5,#0x1000
00001a f8adf8ad STRH r5,[sp,#0x1c]
;;;634 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
00001e 2018 MOVS r0,#0x18
000020 f88df88d STRB r0,[sp,#0x1f]
;;;635 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000024 2003 MOVS r0,#3
;;;636 GPIO_Init(GPIOB, &GPIO_InitStructure);
000026 4f3c LDR r7,|L6.280|
000028 f88df88d STRB r0,[sp,#0x1e] ;635
00002c a907 ADD r1,sp,#0x1c
00002e 4638 MOV r0,r7
000030 f7fff7ff BL GPIO_Init
;;;637
;;;638 /* Configure USART3 Tx (PB.10) as alternate function open-drain */
;;;639 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
000034 10ae ASRS r6,r5,#2
000036 f8adf8ad STRH r6,[sp,#0x1c]
;;;640 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
00003a 201c MOVS r0,#0x1c
00003c f88df88d STRB r0,[sp,#0x1f]
;;;641 GPIO_Init(GPIOB, &GPIO_InitStructure);
000040 a907 ADD r1,sp,#0x1c
000042 4638 MOV r0,r7
000044 f7fff7ff BL GPIO_Init
;;;642
;;;643 /* Configure Smartcard Reset */
;;;644 GPIO_InitStructure.GPIO_Pin = SC_RESET;
000048 106c ASRS r4,r5,#1
00004a f8adf8ad STRH r4,[sp,#0x1c]
;;;645 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
00004e 2010 MOVS r0,#0x10
000050 f88df88d STRB r0,[sp,#0x1f]
;;;646 GPIO_Init(GPIO_RESET, &GPIO_InitStructure);
000054 a907 ADD r1,sp,#0x1c
000056 4638 MOV r0,r7
000058 f7fff7ff BL GPIO_Init
;;;647
;;;648 /* Configure Smartcard 3/5V */
;;;649 GPIO_InitStructure.GPIO_Pin = SC_3_5V;
00005c 2001 MOVS r0,#1
00005e f8adf8ad STRH r0,[sp,#0x1c]
;;;650 GPIO_Init(GPIO_3_5V, &GPIO_InitStructure);
000062 a907 ADD r1,sp,#0x1c
000064 4638 MOV r0,r7
000066 f7fff7ff BL GPIO_Init
;;;651
;;;652 /* Configure Smartcard CMDVCC */
;;;653 GPIO_InitStructure.GPIO_Pin = SC_CMDVCC;
00006a 2040 MOVS r0,#0x40
00006c f8adf8ad STRH r0,[sp,#0x1c]
;;;654 GPIO_Init(GPIO_CMDVCC, &GPIO_InitStructure);
000070 a907 ADD r1,sp,#0x1c
000072 482a LDR r0,|L6.284|
000074 f7fff7ff BL GPIO_Init
;;;655
;;;656 /* USART3 configuration ------------------------------------------------------*/
;;;657 /* USART3 configured as follow:
;;;658 - Word Length = 9 Bits
;;;659 - 0.5 Stop Bit
;;;660 - Even parity
;;;661 - BaudRate = 9677 baud
;;;662 - Hardware flow control disabled (RTS and CTS signals)
;;;663 - Tx and Rx enabled
;;;664 - USART Clock enabled
;;;665 */
;;;666
;;;667 /* USART Clock set to 3.6 MHz (PCLK1 (36 MHZ) / 10) */
;;;668 USART_SetPrescaler(USART3, 0x05);
000078 f8dff8df LDR r8,|L6.288|
00007c 2105 MOVS r1,#5
00007e 4640 MOV r0,r8
000080 f7fff7ff BL USART_SetPrescaler
;;;669
;;;670 /* USART Guard Time set to 16 Bit */
;;;671 USART_SetGuardTime(USART3, 16);
000084 2110 MOVS r1,#0x10
000086 4640 MOV r0,r8
000088 f7fff7ff BL USART_SetGuardTime
;;;672
;;;673 USART_ClockInitStructure.USART_Clock = USART_Clock_Enable;
00008c f8adf8ad STRH r4,[sp,#4]
;;;674 USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
000090 2400 MOVS r4,#0
;;;675 USART_ClockInitStructure.USART_CPHA = USART_CPHA_1Edge;
000092 f8adf8ad STRH r4,[sp,#8]
;;;676 USART_ClockInitStructure.USART_LastBit = USART_LastBit_Enable;
000096 1128 ASRS r0,r5,#4
000098 f8adf8ad STRH r0,[sp,#0xa]
00009c f8adf8ad STRH r4,[sp,#6] ;674
;;;677 USART_ClockInit(USART3, &USART_ClockInitStructure);
0000a0 a901 ADD r1,sp,#4
0000a2 4640 MOV r0,r8
0000a4 f7fff7ff BL USART_ClockInit
;;;678
;;;679
;;;680 USART_InitStructure.USART_BaudRate = 9677;
0000a8 f242f242 MOV r0,#0x25cd
;;;681 USART_InitStructure.USART_WordLength = USART_WordLength_9b;
0000ac 9003 STR r0,[sp,#0xc]
0000ae f8adf8ad STRH r5,[sp,#0x10]
;;;682 USART_InitStructure.USART_StopBits = USART_StopBits_1_5;
0000b2 f44ff44f MOV r0,#0x3000
0000b6 f8adf8ad STRH r0,[sp,#0x12]
;;;683 USART_InitStructure.USART_Parity = USART_Parity_Even;
0000ba f8adf8ad STRH r6,[sp,#0x14]
;;;684 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
0000be 200c MOVS r0,#0xc
0000c0 f8adf8ad STRH r0,[sp,#0x16]
;;;685 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
0000c4 f8adf8ad STRH r4,[sp,#0x18]
;;;686 USART_Init(USART3, &USART_InitStructure);
0000c8 a903 ADD r1,sp,#0xc
0000ca 4640 MOV r0,r8
0000cc f7fff7ff BL USART_Init
;;;687
;;;688 /* Enable the USART3 Parity Error Interrupt */
;;;689 USART_ITConfig(USART3, USART_IT_PE, ENABLE);
0000d0 2201 MOVS r2,#1
0000d2 2128 MOVS r1,#0x28
0000d4 4640 MOV r0,r8
0000d6 f7fff7ff BL USART_ITConfig
;;;690
;;;691 /* Enable the USART3 Framing Error Interrupt */
;;;692 USART_ITConfig(USART3, USART_IT_ERR, ENABLE);
0000da 2201 MOVS r2,#1
0000dc 2160 MOVS r1,#0x60
0000de 4640 MOV r0,r8
0000e0 f7fff7ff BL USART_ITConfig
;;;693
;;;694 /* Enable USART3 */
;;;695 USART_Cmd(USART3, ENABLE);
0000e4 2101 MOVS r1,#1
0000e6 4640 MOV r0,r8
0000e8 f7fff7ff BL USART_Cmd
;;;696
;;;697 /* Enable the NACK Transmission */
;;;698 USART_SmartCardNACKCmd(USART3, ENABLE);
0000ec 2101 MOVS r1,#1
0000ee 4640 MOV r0,r8
0000f0 f7fff7ff BL USART_SmartCardNACKCmd
;;;699
;;;700 /* Enable the Smartcard Interface */
;;;701 USART_SmartCardCmd(USART3, ENABLE);
0000f4 2101 MOVS r1,#1
0000f6 4640 MOV r0,r8
0000f8 f7fff7ff BL USART_SmartCardCmd
;;;702
;;;703 /* Set RSTIN HIGH */
;;;704 SC_Reset(Bit_SET);
0000fc 2001 MOVS r0,#1
0000fe f7fff7ff BL SC_Reset
000102 2101 MOVS r1,#1
000104 4638 MOV r0,r7
000106 f7fff7ff BL GPIO_SetBits
;;;705
;;;706 /* Select 5V */
;;;707 SC_VoltageConfig(SC_Voltage_5V);
;;;708
;;;709 /* Disable CMDVCC */
;;;710 SC_PowerCmd(DISABLE);
00010a 2000 MOVS r0,#0
00010c f7fff7ff BL SC_PowerCmd
;;;711 }
000110 b008 ADD sp,sp,#0x20
000112 e8bde8bd POP {r4-r8,pc}
;;;712
ENDP
000116 0000 DCW 0x0000
|L6.280|
000118 40010c00 DCD 0x40010c00
|L6.284|
00011c 40011000 DCD 0x40011000
|L6.288|
000120 40004800 DCD 0x40004800
AREA ||i.SC_Handler||, CODE, READONLY, ALIGN=2
SC_Handler PROC
;;;62 void SC_Handler(SC_State *SCState, SC_ADPU_Commands *SC_ADPU, SC_ADPU_Responce *SC_Response)
;;;63 {
000000 e92de92d PUSH {r4-r8,lr}
000004 4605 MOV r5,r0
;;;64 u32 i = 0;
;;;65
;;;66 switch(*SCState)
000006 782b LDRB r3,[r5,#0]
000008 4608 MOV r0,r1 ;63
00000a 2400 MOVS r4,#0 ;64
00000c 2605 MOVS r6,#5
00000e 4f34 LDR r7,|L7.224|
000010 4611 MOV r1,r2 ;63
000012 2b06 CMP r3,#6
000014 d262 BCS |L7.220|
000016 e8dfe8df TBB [pc,r3]
00001a 03236138 DCB 0x03,0x23,0x61,0x38
00001e 4246 DCB 0x42,0x46
;;;67 {
;;;68 case SC_POWER_ON:
;;;69 if (SC_ADPU->Header.INS == SC_GET_A2R)
000020 7840 LDRB r0,[r0,#1]
000022 2800 CMP r0,#0
000024 d12f BNE |L7.134|
;;;70 {
;;;71 /* Smartcard intialization ------------------------------------------*/
;;;72 SC_Init();
000026 f7fff7ff BL SC_Init
00002a 482e LDR r0,|L7.228|
00002c 2100 MOVS r1,#0
|L7.46|
;;;73
;;;74 /* Reset Data from SC buffer -----------------------------------------*/
;;;75 for (i = 0; i < 40; i++)
;;;76 {
;;;77 SC_ATR_Table[i] = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -