📄 smartcard.txt
字号:
;;;216 USART_DMACmd(USART3, USART_DMAReq_Rx, ENABLE);
000018 4e57 LDR r6,|L9.376|
00001a 0609 LSLS r1,r1,#24
00001c 0dc9 LSRS r1,r1,#23
00001e fbb0fbb0 UDIV r5,r0,r1
000022 3e18 SUBS r6,r6,#0x18
000024 2201 MOVS r2,#1
000026 2140 MOVS r1,#0x40
000028 4630 MOV r0,r6
00002a f7fff7ff BL USART_DMACmd
;;;217
;;;218 if((SC_A2R.T0 & (u8)0x10) == 0x10)
00002e 4f53 LDR r7,|L9.380|
000030 7878 LDRB r0,[r7,#1] ; SC_A2R
000032 06c0 LSLS r0,r0,#27
000034 d57e BPL |L9.308|
;;;219 {
;;;220 if(SC_A2R.T[0] != 0x11)
000036 78b8 LDRB r0,[r7,#2] ; SC_A2R
000038 2811 CMP r0,#0x11
00003a d07b BEQ |L9.308|
;;;221 {
;;;222 /* Send PTSS */
;;;223 SCData = 0xFF;
00003c f8dff8df LDR r8,|L9.384|
000040 20ff MOVS r0,#0xff
000042 f888f888 STRB r0,[r8,#0] ; SCData
;;;224 USART_SendData(USART3, SCData);
000046 f898f898 LDRB r1,[r8,#0] ; SCData
00004a 4630 MOV r0,r6
00004c f7fff7ff BL USART_SendData
|L9.80|
;;;225 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000050 2140 MOVS r1,#0x40
000052 4630 MOV r0,r6
000054 f7fff7ff BL USART_GetFlagStatus
000058 2800 CMP r0,#0
00005a d0f9 BEQ |L9.80|
;;;226 {
;;;227 }
;;;228
;;;229 /* Send PTS0 */
;;;230 SCData = 0x10;
00005c 2010 MOVS r0,#0x10
00005e f888f888 STRB r0,[r8,#0] ; SCData
;;;231 USART_SendData(USART3, SCData);
000062 f898f898 LDRB r1,[r8,#0] ; SCData
000066 4630 MOV r0,r6
000068 f7fff7ff BL USART_SendData
|L9.108|
;;;232 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
00006c 2140 MOVS r1,#0x40
00006e 4630 MOV r0,r6
000070 f7fff7ff BL USART_GetFlagStatus
000074 2800 CMP r0,#0
000076 d0f9 BEQ |L9.108|
;;;233 {
;;;234 }
;;;235
;;;236 /* Send PTS1 */
;;;237 SCData = SC_A2R.T[0];
000078 78b8 LDRB r0,[r7,#2] ; SC_A2R
00007a f888f888 STRB r0,[r8,#0] ; SCData
;;;238 USART_SendData(USART3, SCData);
00007e f898f898 LDRB r1,[r8,#0] ; SCData
000082 4630 MOV r0,r6
000084 f7fff7ff BL USART_SendData
|L9.136|
;;;239 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000088 2140 MOVS r1,#0x40
00008a 4630 MOV r0,r6
00008c f7fff7ff BL USART_GetFlagStatus
000090 2800 CMP r0,#0
000092 d0f9 BEQ |L9.136|
;;;240 {
;;;241 }
;;;242
;;;243 /* Send PCK */
;;;244 SCData = (u8)0xFF^(u8)0x10^(u8)SC_A2R.T[0];
000094 78b8 LDRB r0,[r7,#2] ; SC_A2R
000096 f080f080 EOR r0,r0,#0xef
00009a f888f888 STRB r0,[r8,#0] ; SCData
;;;245 USART_SendData(USART3, SCData);
00009e f898f898 LDRB r1,[r8,#0] ; SCData
0000a2 4630 MOV r0,r6
0000a4 f7fff7ff BL USART_SendData
|L9.168|
;;;246 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
0000a8 2140 MOVS r1,#0x40
0000aa 4630 MOV r0,r6
0000ac f7fff7ff BL USART_GetFlagStatus
0000b0 2800 CMP r0,#0
0000b2 d0f9 BEQ |L9.168|
;;;247 {
;;;248 }
;;;249
;;;250 /* Disable the DMA Receive (Reset DMAR bit only) */
;;;251 USART_DMACmd(USART3, USART_DMAReq_Rx, DISABLE);
0000b4 2200 MOVS r2,#0
0000b6 2140 MOVS r1,#0x40
0000b8 4630 MOV r0,r6
0000ba f7fff7ff BL USART_DMACmd
;;;252
;;;253 if((USART_ByteReceive(&locData, SC_Receive_Timeout)) == SUCCESS)
0000be f44ff44f MOV r8,#0x4000
0000c2 4641 MOV r1,r8
0000c4 a806 ADD r0,sp,#0x18
0000c6 f7fff7ff BL USART_ByteReceive
0000ca 2801 CMP r0,#1
0000cc d104 BNE |L9.216|
;;;254 {
;;;255 if(locData != 0xFF)
0000ce f89df89d LDRB r0,[sp,#0x18]
0000d2 28ff CMP r0,#0xff
0000d4 d000 BEQ |L9.216|
;;;256 {
;;;257 PTSConfirmStatus = 0x00;
0000d6 2400 MOVS r4,#0
|L9.216|
;;;258 }
;;;259 }
;;;260 if((USART_ByteReceive(&locData, SC_Receive_Timeout)) == SUCCESS)
0000d8 4641 MOV r1,r8
0000da a806 ADD r0,sp,#0x18
0000dc f7fff7ff BL USART_ByteReceive
0000e0 2801 CMP r0,#1
0000e2 d104 BNE |L9.238|
;;;261 {
;;;262 if(locData != 0x10)
0000e4 f89df89d LDRB r0,[sp,#0x18]
0000e8 2810 CMP r0,#0x10
0000ea d000 BEQ |L9.238|
;;;263 {
;;;264 PTSConfirmStatus = 0x00;
0000ec 2400 MOVS r4,#0
|L9.238|
;;;265 }
;;;266 }
;;;267 if((USART_ByteReceive(&locData, SC_Receive_Timeout)) == SUCCESS)
0000ee 4641 MOV r1,r8
0000f0 a806 ADD r0,sp,#0x18
0000f2 f7fff7ff BL USART_ByteReceive
0000f6 2801 CMP r0,#1
0000f8 d105 BNE |L9.262|
;;;268 {
;;;269 if(locData != SC_A2R.T[0])
0000fa 78b8 LDRB r0,[r7,#2] ; SC_A2R
0000fc f89df89d LDRB r1,[sp,#0x18]
000100 4288 CMP r0,r1
000102 d000 BEQ |L9.262|
;;;270 {
;;;271 PTSConfirmStatus = 0x00;
000104 2400 MOVS r4,#0
|L9.262|
;;;272 }
;;;273 }
;;;274 if((USART_ByteReceive(&locData, SC_Receive_Timeout)) == SUCCESS)
000106 4641 MOV r1,r8
000108 a806 ADD r0,sp,#0x18
00010a f7fff7ff BL USART_ByteReceive
00010e 2801 CMP r0,#1
000110 d12e BNE |L9.368|
;;;275 {
;;;276 if(locData != ((u8)0xFF^(u8)0x10^(u8)SC_A2R.T[0]))
000112 78b8 LDRB r0,[r7,#2] ; SC_A2R
000114 f89df89d LDRB r2,[sp,#0x18]
000118 f080f080 EOR r1,r0,#0xef
00011c 4291 CMP r1,r2
00011e d127 BNE |L9.368|
;;;277 {
;;;278 PTSConfirmStatus = 0x00;
;;;279 }
;;;280 }
;;;281 else
;;;282 {
;;;283 PTSConfirmStatus = 0x00;
;;;284 }
;;;285 /* PTS Confirm */
;;;286 if(PTSConfirmStatus == 0x01)
000120 2c01 CMP r4,#1
000122 d125 BNE |L9.368|
;;;287 {
;;;288 workingbaudrate = apbclock * D_Table[(SC_A2R.T[0] & (u8)0x0F)];
000124 4a16 LDR r2,|L9.384|
000126 f000f000 AND r1,r0,#0xf
00012a 3244 ADDS r2,r2,#0x44
00012c f852f852 LDR r1,[r2,r1,LSL #2]
000130 4369 MULS r1,r5,r1
;;;289 workingbaudrate /= F_Table[((SC_A2R.T[0] >> 4) & (u8)0x0F)];
000132 e000 B |L9.310|
|L9.308|
000134 e01c B |L9.368|
|L9.310|
000136 0900 LSRS r0,r0,#4
000138 3a40 SUBS r2,r2,#0x40
00013a f852f852 LDR r0,[r2,r0,LSL #2]
00013e fbb1fbb1 UDIV r4,r1,r0
;;;290 USART_StructInit(&USART_InitStructure);
000142 4668 MOV r0,sp
000144 f7fff7ff BL USART_StructInit
;;;291 USART_InitStructure.USART_BaudRate = workingbaudrate;
;;;292 USART_InitStructure.USART_WordLength = USART_WordLength_9b;
000148 f44ff44f MOV r0,#0x1000
00014c f8adf8ad STRH r0,[sp,#4]
;;;293 USART_InitStructure.USART_StopBits = USART_StopBits_1_5;
000150 f44ff44f MOV r0,#0x3000
000154 f8adf8ad STRH r0,[sp,#6]
;;;294 USART_InitStructure.USART_Parity = USART_Parity_Even;
000158 f44ff44f MOV r0,#0x400
00015c f8adf8ad STRH r0,[sp,#8]
;;;295 USART_InitStructure.USART_Clock = USART_Clock_Enable;
000160 0040 LSLS r0,r0,#1
000162 f8adf8ad STRH r0,[sp,#0xe]
000166 9400 STR r4,[sp,#0]
;;;296 USART_Init(USART3, &USART_InitStructure);
000168 4669 MOV r1,sp
00016a 4630 MOV r0,r6
00016c f7fff7ff BL USART_Init
|L9.368|
;;;297 }
;;;298 }
;;;299 }
;;;300 }
000170 b00c ADD sp,sp,#0x30
000172 e8bde8bd POP {r4-r8,pc}
ENDP
000176 0000 DCW 0x0000
|L9.376|
000178 40004818 DCD 0x40004818
|L9.380|
00017c 00000000 DCD ||.bss||
|L9.384|
000180 00000000 DCD ||.data||
AREA ||i.SC_AnswerReq||, CODE, READONLY, ALIGN=1
SC_AnswerReq PROC
000000 e92de92d PUSH {r3-r9,lr}
000004 4607 MOV r7,r0
000006 2000 MOVS r0,#0
000008 4605 MOV r5,r0
00000a 9000 STR r0,[sp,#0]
00000c 7838 LDRB r0,[r7,#0]
00000e 460c MOV r4,r1
000010 4616 MOV r6,r2
000012 f04ff04f MOV r8,#3
000016 f44ff44f MOV r9,#0x4000
00001a 2801 CMP r0,#1
00001c d018 BEQ |L10.80|
00001e 2802 CMP r0,#2
000020 d022 BEQ |L10.104|
000022 2803 CMP r0,#3
000024 d008 BEQ |L10.56|
000026 2805 CMP r0,#5
000028 f04ff04f MOV r0,#1
00002c d137 BNE |L10.158|
00002e f7fff7ff BL SC_Reset
000032 2000 MOVS r0,#0
000034 f7fff7ff BL SC_PowerCmd
|L10.56|
000038 e8bde8bd POP {r3-r9,pc}
|L10.60|
00003c 4649 MOV r1,r9
00003e 4668 MOV r0,sp
000040 f7fff7ff BL USART_ByteReceive
000044 2801 CMP r0,#1
000046 d102 BNE |L10.78|
000048 f89df89d LDRB r0,[sp,#0]
00004c 5560 STRB r0,[r4,r5]
|L10.78|
00004e 1c6d ADDS r5,r5,#1
|L10.80|
000050 42b5 CMP r5,r6
000052 d3f3 BCC |L10.60|
000054 7820 LDRB r0,[r4,#0]
000056 b128 CBZ r0,|L10.100|
000058 f887f887 STRB r8,[r7,#0]
00005c 2001 MOVS r0,#1
00005e f7fff7ff BL SC_Reset
000062 e7e9 B |L10.56|
|L10.100|
000064 2002 MOVS r0,#2
000066 e018 B |L10.154|
|L10.104|
000068 2001 MOVS r0,#1
00006a f7fff7ff BL SC_Reset
00006e e009 B |L10.132|
|L10.112|
000070 4649 MOV r1,r9
000072 4668 MOV r0,sp
000074 f7fff7ff BL USART_ByteReceive
000078 2801 CMP r0,#1
00007a d103 BNE |L10.132|
00007c f89df89d LDRB r0,[sp,#0]
000080 f804f804 STRB r0,[r4],#1
|L10.132|
000084 0030 MOVS r0,r6
000086 f1a6f1a6 SUB r6,r6,#1
00008a b2f6 UXTB r6,r6
00008c d1f0 BNE |L10.112|
00008e 7820 LDRB r0,[r4,#0]
000090 b110 CBZ r0,|L10.152|
000092 f887f887 STRB r8,[r7,#0]
000096 e7cf B |L10.56|
|L10.152|
000098 2005 MOVS r0,#5
|L10.154|
00009a 7038 STRB r0,[r7,#0]
00009c e7cc B |L10.56|
|L10.158|
00009e e7fc B |L10.154|
ENDP
AREA ||.data||, DATA, ALIGN=2
SCData
000000 00000000 DCB 0x00,0x00,0x00,0x00
F_Table
000004 00000000 DCD 0x00000000
000008 00000174 DCD 0x00000174
00000c 0000022e DCD 0x0000022e
000010 000002e8 DCD 0x000002e8
000014 0000045c DCD 0x0000045c
000018 000005d0 DCD 0x000005d0
00001c 00000744 DCD 0x00000744
000020 00000000 DCD 0x00000000
000024 00000000 DCD 0x00000000
000028 00000200 DCD 0x00000200
00002c 00000300 DCD 0x00000300
000030 00000400 DCD 0x00000400
000034 00000600 DCD 0x00000600
000038 00000800 DCD 0x00000800
00003c 00000000 DCD 0x00000000
000040 00000000 DCD 0x00000000
D_Table
000044 00000000 DCD 0x00000000
000048 00000001 DCD 0x00000001
00004c 00000002 DCD 0x00000002
000050 00000004 DCD 0x00000004
000054 00000008 DCD 0x00000008
000058 00000010 DCD 0x00000010
00005c 00000000 DCD 0x00000000
000060 00000000 DCD 0x00000000
AREA ||.bss||, DATA, NOINIT, ALIGN=0
SC_A2R
% 44
SC_ATR_Table
% 40
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -