📄 smartcard.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 934] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\smartcard.o --depend=.\Obj\smartcard.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\SRAM -I"D:\Program Files\MDK KEIL\ARM\INC\ST\STM32F10x" -D__MICROLIB --omf_browse=.\Obj\smartcard.crf ..\..\source\smartcard.c]
THUMB
AREA ||i.SC_PowerCmd||, CODE, READONLY, ALIGN=2
SC_PowerCmd PROC
000000 4a04 LDR r2,|L1.20|
000002 2800 CMP r0,#0
000004 f04ff04f MOV r1,#0x40
000008 4610 MOV r0,r2
00000a d001 BEQ |L1.16|
00000c f7fff7ff B.W GPIO_SetBits
|L1.16|
000010 f7fff7ff B.W GPIO_ResetBits
ENDP
|L1.20|
000014 40011000 DCD 0x40011000
AREA ||i.USART_ByteReceive||, CODE, READONLY, ALIGN=2
USART_ByteReceive PROC
;;;792 static ErrorStatus USART_ByteReceive(u8 *Data, u32 TimeOut)
;;;793 {
000000 e92de92d PUSH {r4-r8,lr}
000004 4606 MOV r6,r0
000006 460d MOV r5,r1
;;;794 u32 Counter = 0;
000008 2400 MOVS r4,#0
00000a 4f0a LDR r7,|L2.52|
;;;795
;;;796 while((USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET) && (Counter != TimeOut))
00000c e000 B |L2.16|
|L2.14|
;;;797 {
;;;798 Counter++;
00000e 1c64 ADDS r4,r4,#1
|L2.16|
000010 2120 MOVS r1,#0x20 ;796
000012 4638 MOV r0,r7 ;796
000014 f7fff7ff BL USART_GetFlagStatus
000018 b908 CBNZ r0,|L2.30|
00001a 42ac CMP r4,r5 ;796
00001c d1f7 BNE |L2.14|
|L2.30|
;;;799 }
;;;800
;;;801 if(Counter != TimeOut)
00001e 42ac CMP r4,r5
000020 d006 BEQ |L2.48|
;;;802 {
;;;803 *Data = (u8)USART_ReceiveData(USART3);
000022 4638 MOV r0,r7
000024 f7fff7ff BL USART_ReceiveData
000028 7030 STRB r0,[r6,#0]
;;;804 return SUCCESS;
00002a 2001 MOVS r0,#1
|L2.44|
;;;805 }
;;;806 else
;;;807 {
;;;808 return ERROR;
;;;809 }
;;;810 }
00002c e8bde8bd POP {r4-r8,pc}
|L2.48|
000030 2000 MOVS r0,#0 ;808
000032 e7fb B |L2.44|
;;;811
ENDP
|L2.52|
000034 40004800 DCD 0x40004800
AREA ||i.SC_SendData||, CODE, READONLY, ALIGN=2
SC_SendData PROC
;;;321 static void SC_SendData(SC_ADPU_Commands *SC_ADPU, SC_ADPU_Responce *SC_ResponceStatus)
;;;322 {
000000 e92de92d PUSH {r3-r9,lr}
000004 4604 MOV r4,r0
;;;323 u32 i = 0;
000006 2000 MOVS r0,#0
000008 460d MOV r5,r1 ;322
;;;324 u8 locData = 0;
00000a 4601 MOV r1,r0
00000c 9000 STR r0,[sp,#0]
|L3.14|
;;;325
;;;326 /* Reset responce buffer ---------------------------------------------------*/
;;;327 for(i = 0; i < LCmax; i++)
;;;328 {
;;;329 SC_ResponceStatus->Data[i] = 0;
00000e 5429 STRB r1,[r5,r0]
000010 1c40 ADDS r0,r0,#1 ;327
000012 2814 CMP r0,#0x14 ;327
000014 d3fb BCC |L3.14|
;;;330 }
;;;331
;;;332 SC_ResponceStatus->SW1 = 0;
000016 7529 STRB r1,[r5,#0x14]
;;;333 SC_ResponceStatus->SW2 = 0;
;;;334
;;;335 /* Enable the DMA Receive (Set DMAR bit only) to enable interrupt generation
;;;336 in case of a framing error FE */
;;;337 USART_DMACmd(USART3, USART_DMAReq_Rx, ENABLE);
000018 4e70 LDR r6,|L3.476|
00001a 7569 STRB r1,[r5,#0x15] ;333
00001c 2201 MOVS r2,#1
00001e 2140 MOVS r1,#0x40
000020 4630 MOV r0,r6
000022 f7fff7ff BL USART_DMACmd
;;;338
;;;339 /* Send header -------------------------------------------------------------*/
;;;340 SCData = SC_ADPU->Header.CLA;
000026 f8dff8df LDR r8,|L3.480|
00002a 7820 LDRB r0,[r4,#0]
00002c f888f888 STRB r0,[r8,#0] ; SCData
;;;341 USART_SendData(USART3, SCData);
000030 f898f898 LDRB r1,[r8,#0] ; SCData
000034 4630 MOV r0,r6
000036 f7fff7ff BL USART_SendData
|L3.58|
;;;342 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
00003a 2140 MOVS r1,#0x40
00003c 4630 MOV r0,r6
00003e f7fff7ff BL USART_GetFlagStatus
000042 2800 CMP r0,#0
000044 d0f9 BEQ |L3.58|
;;;343 {
;;;344 }
;;;345
;;;346 SCData = SC_ADPU->Header.INS;
000046 7860 LDRB r0,[r4,#1]
000048 f888f888 STRB r0,[r8,#0] ; SCData
;;;347 USART_SendData(USART3, SCData);
00004c f898f898 LDRB r1,[r8,#0] ; SCData
000050 4630 MOV r0,r6
000052 f7fff7ff BL USART_SendData
|L3.86|
;;;348 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000056 2140 MOVS r1,#0x40
000058 4630 MOV r0,r6
00005a f7fff7ff BL USART_GetFlagStatus
00005e 2800 CMP r0,#0
000060 d0f9 BEQ |L3.86|
;;;349 {
;;;350 }
;;;351
;;;352 SCData = SC_ADPU->Header.P1;
000062 78a0 LDRB r0,[r4,#2]
000064 f888f888 STRB r0,[r8,#0] ; SCData
;;;353 USART_SendData(USART3, SCData);
000068 f898f898 LDRB r1,[r8,#0] ; SCData
00006c 4630 MOV r0,r6
00006e f7fff7ff BL USART_SendData
|L3.114|
;;;354 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000072 2140 MOVS r1,#0x40
000074 4630 MOV r0,r6
000076 f7fff7ff BL USART_GetFlagStatus
00007a 2800 CMP r0,#0
00007c d0f9 BEQ |L3.114|
;;;355 {
;;;356 }
;;;357
;;;358 SCData = SC_ADPU->Header.P2;
00007e 78e0 LDRB r0,[r4,#3]
000080 f888f888 STRB r0,[r8,#0] ; SCData
;;;359 USART_SendData(USART3, SCData);
000084 f898f898 LDRB r1,[r8,#0] ; SCData
000088 4630 MOV r0,r6
00008a f7fff7ff BL USART_SendData
|L3.142|
;;;360 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
00008e 2140 MOVS r1,#0x40
000090 4630 MOV r0,r6
000092 f7fff7ff BL USART_GetFlagStatus
000096 2800 CMP r0,#0
000098 d0f9 BEQ |L3.142|
;;;361 {
;;;362 }
;;;363
;;;364 /* Send body length to/from SC ---------------------------------------------*/
;;;365 if(SC_ADPU->Body.LC)
00009a 7920 LDRB r0,[r4,#4]
00009c b168 CBZ r0,|L3.186|
;;;366 {
;;;367 SCData = SC_ADPU->Body.LC;
00009e f888f888 STRB r0,[r8,#0] ; SCData
;;;368 USART_SendData(USART3, SCData);
0000a2 f898f898 LDRB r1,[r8,#0] ; SCData
0000a6 4630 MOV r0,r6
0000a8 f7fff7ff BL USART_SendData
|L3.172|
;;;369 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
0000ac 2140 MOVS r1,#0x40
0000ae 4630 MOV r0,r6
0000b0 f7fff7ff BL USART_GetFlagStatus
0000b4 2800 CMP r0,#0
0000b6 d0f9 BEQ |L3.172|
0000b8 e00e B |L3.216|
|L3.186|
;;;370 {
;;;371 }
;;;372 }
;;;373 else if(SC_ADPU->Body.LE)
0000ba 7e60 LDRB r0,[r4,#0x19]
0000bc b160 CBZ r0,|L3.216|
;;;374 {
;;;375 SCData = SC_ADPU->Body.LE;
0000be f888f888 STRB r0,[r8,#0] ; SCData
;;;376 USART_SendData(USART3, SCData);
0000c2 f898f898 LDRB r1,[r8,#0] ; SCData
0000c6 4630 MOV r0,r6
0000c8 f7fff7ff BL USART_SendData
|L3.204|
;;;377 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
0000cc 2140 MOVS r1,#0x40
0000ce 4630 MOV r0,r6
0000d0 f7fff7ff BL USART_GetFlagStatus
0000d4 2800 CMP r0,#0
0000d6 d0f9 BEQ |L3.204|
|L3.216|
;;;378 {
;;;379 }
;;;380 }
;;;381 /* Flush the USART3 DR */
;;;382 (void)USART_ReceiveData(USART3);
0000d8 46b1 MOV r9,r6
0000da 4630 MOV r0,r6
0000dc f7fff7ff BL USART_ReceiveData
;;;383
;;;384 /* --------------------------------------------------------
;;;385 Wait Procedure byte from card:
;;;386 1 - ACK
;;;387 2 - NULL
;;;388 3 - SW1; SW2
;;;389 -------------------------------------------------------- */
;;;390
;;;391 if((USART_ByteReceive(&locData, SC_Receive_Timeout)) == SUCCESS)
0000e0 f44ff44f MOV r7,#0x4000
0000e4 4639 MOV r1,r7
0000e6 4668 MOV r0,sp
0000e8 f7fff7ff BL USART_ByteReceive
0000ec 2801 CMP r0,#1
0000ee d122 BNE |L3.310|
;;;392 {
;;;393 if(((locData & (u8)0xF0) == 0x60) || ((locData & (u8)0xF0) == 0x90))
0000f0 f89df89d LDRB r0,[sp,#0]
0000f4 2106 MOVS r1,#6
0000f6 ebb1ebb1 CMP r1,r0,LSR #4
0000fa d003 BEQ |L3.260|
0000fc 2109 MOVS r1,#9
0000fe ebb1ebb1 CMP r1,r0,LSR #4
000102 d10a BNE |L3.282|
|L3.260|
;;;394 {
;;;395 /* SW1 received */
;;;396 SC_ResponceStatus->SW1 = locData;
000104 7528 STRB r0,[r5,#0x14]
;;;397
;;;398 if((USART_ByteReceive(&locData, SC_Receive_Timeout)) == SUCCESS)
000106 4639 MOV r1,r7
000108 4668 MOV r0,sp
00010a f7fff7ff BL USART_ByteReceive
00010e 2801 CMP r0,#1
000110 d111 BNE |L3.310|
;;;399 {
;;;400 /* SW2 received */
;;;401 SC_ResponceStatus->SW2 = locData;
000112 f89df89d LDRB r0,[sp,#0]
000116 7568 STRB r0,[r5,#0x15]
000118 e00d B |L3.310|
|L3.282|
;;;402 }
;;;403 }
;;;404 else if (((locData & (u8)0xFE) == (((u8)~(SC_ADPU->Header.INS)) & (u8)0xFE))||((locData & (u8)0xFE) == (SC_ADPU->Header.INS & (u8)0xFE)))
00011a 7862 LDRB r2,[r4,#1]
00011c f000f000 AND r1,r0,#0xfe
000120 43d3 MVNS r3,r2
000122 f3c3f3c3 UBFX r3,r3,#1,#7
000126 ebb1ebb1 CMP r1,r3,LSL #1
00012a d003 BEQ |L3.308|
00012c f002f002 AND r2,r2,#0xfe
000130 4291 CMP r1,r2
000132 d100 BNE |L3.310|
|L3.308|
;;;405 {
;;;406 SC_ResponceStatus->Data[0] = locData;/* ACK received */
000134 7028 STRB r0,[r5,#0]
|L3.310|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -