📄 smartcard.txt
字号:
;;;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 |L8.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 4e6b LDR r6,|L8.456|
00001a 7569 STRB r1,[r5,#0x15] ;333
00001c 2201 MOVS r2,#1
00001e 2140 MOVS r1,#0x40
000020 4630 MOV r0,r6
000022 f7fffffe BL USART_DMACmd
;;;338
;;;339 /* Send header -------------------------------------------------------------*/
;;;340 SCData = SC_ADPU->Header.CLA;
000026 4f69 LDR r7,|L8.460|
000028 7820 LDRB r0,[r4,#0]
00002a 7038 STRB r0,[r7,#0]
;;;341 USART_SendData(USART3, SCData);
00002c 7839 LDRB r1,[r7,#0] ; SCData
00002e 4630 MOV r0,r6
000030 f7fffffe BL USART_SendData
|L8.52|
;;;342 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000034 2140 MOVS r1,#0x40
000036 4630 MOV r0,r6
000038 f7fffffe BL USART_GetFlagStatus
00003c 2800 CMP r0,#0
00003e d0f9 BEQ |L8.52|
;;;343 {
;;;344 }
;;;345
;;;346 SCData = SC_ADPU->Header.INS;
000040 7860 LDRB r0,[r4,#1]
000042 7038 STRB r0,[r7,#0]
;;;347 USART_SendData(USART3, SCData);
000044 7839 LDRB r1,[r7,#0] ; SCData
000046 4630 MOV r0,r6
000048 f7fffffe BL USART_SendData
|L8.76|
;;;348 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
00004c 2140 MOVS r1,#0x40
00004e 4630 MOV r0,r6
000050 f7fffffe BL USART_GetFlagStatus
000054 2800 CMP r0,#0
000056 d0f9 BEQ |L8.76|
;;;349 {
;;;350 }
;;;351
;;;352 SCData = SC_ADPU->Header.P1;
000058 78a0 LDRB r0,[r4,#2]
00005a 7038 STRB r0,[r7,#0]
;;;353 USART_SendData(USART3, SCData);
00005c 7839 LDRB r1,[r7,#0] ; SCData
00005e 4630 MOV r0,r6
000060 f7fffffe BL USART_SendData
|L8.100|
;;;354 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000064 2140 MOVS r1,#0x40
000066 4630 MOV r0,r6
000068 f7fffffe BL USART_GetFlagStatus
00006c 2800 CMP r0,#0
00006e d0f9 BEQ |L8.100|
;;;355 {
;;;356 }
;;;357
;;;358 SCData = SC_ADPU->Header.P2;
000070 78e0 LDRB r0,[r4,#3]
000072 7038 STRB r0,[r7,#0]
;;;359 USART_SendData(USART3, SCData);
000074 7839 LDRB r1,[r7,#0] ; SCData
000076 4630 MOV r0,r6
000078 f7fffffe BL USART_SendData
|L8.124|
;;;360 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
00007c 2140 MOVS r1,#0x40
00007e 4630 MOV r0,r6
000080 f7fffffe BL USART_GetFlagStatus
000084 2800 CMP r0,#0
000086 d0f9 BEQ |L8.124|
;;;361 {
;;;362 }
;;;363
;;;364 /* Send body length to/from SC ---------------------------------------------*/
;;;365 if(SC_ADPU->Body.LC)
000088 7920 LDRB r0,[r4,#4]
00008a b158 CBZ r0,|L8.164|
;;;366 {
;;;367 SCData = SC_ADPU->Body.LC;
00008c 7038 STRB r0,[r7,#0]
;;;368 USART_SendData(USART3, SCData);
00008e 7839 LDRB r1,[r7,#0] ; SCData
000090 4630 MOV r0,r6
000092 f7fffffe BL USART_SendData
|L8.150|
;;;369 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000096 2140 MOVS r1,#0x40
000098 4630 MOV r0,r6
00009a f7fffffe BL USART_GetFlagStatus
00009e 2800 CMP r0,#0
0000a0 d0f9 BEQ |L8.150|
0000a2 e00c B |L8.190|
|L8.164|
;;;370 {
;;;371 }
;;;372 }
;;;373 else if(SC_ADPU->Body.LE)
0000a4 7e60 LDRB r0,[r4,#0x19]
0000a6 b150 CBZ r0,|L8.190|
;;;374 {
;;;375 SCData = SC_ADPU->Body.LE;
0000a8 7038 STRB r0,[r7,#0]
;;;376 USART_SendData(USART3, SCData);
0000aa 7839 LDRB r1,[r7,#0] ; SCData
0000ac 4630 MOV r0,r6
0000ae f7fffffe BL USART_SendData
|L8.178|
;;;377 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
0000b2 2140 MOVS r1,#0x40
0000b4 4630 MOV r0,r6
0000b6 f7fffffe BL USART_GetFlagStatus
0000ba 2800 CMP r0,#0
0000bc d0f9 BEQ |L8.178|
|L8.190|
;;;378 {
;;;379 }
;;;380 }
;;;381 /* Flush the USART3 DR */
;;;382 (void)USART_ReceiveData(USART3);
0000be 46b2 MOV r10,r6
0000c0 4630 MOV r0,r6
0000c2 f7fffffe 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)
0000c6 f44f4980 MOV r9,#0x4000
0000ca 4649 MOV r1,r9
0000cc 4668 MOV r0,sp
0000ce f7fffffe BL USART_ByteReceive
0000d2 2801 CMP r0,#1
0000d4 d122 BNE |L8.284|
;;;392 {
;;;393 if(((locData & (u8)0xF0) == 0x60) || ((locData & (u8)0xF0) == 0x90))
0000d6 f89d0000 LDRB r0,[sp,#0]
0000da 2106 MOVS r1,#6
0000dc ebb11f10 CMP r1,r0,LSR #4
0000e0 d003 BEQ |L8.234|
0000e2 2109 MOVS r1,#9
0000e4 ebb11f10 CMP r1,r0,LSR #4
0000e8 d10a BNE |L8.256|
|L8.234|
;;;394 {
;;;395 /* SW1 received */
;;;396 SC_ResponceStatus->SW1 = locData;
0000ea 7528 STRB r0,[r5,#0x14]
;;;397
;;;398 if((USART_ByteReceive(&locData, SC_Receive_Timeout)) == SUCCESS)
0000ec 4649 MOV r1,r9
0000ee 4668 MOV r0,sp
0000f0 f7fffffe BL USART_ByteReceive
0000f4 2801 CMP r0,#1
0000f6 d111 BNE |L8.284|
;;;399 {
;;;400 /* SW2 received */
;;;401 SC_ResponceStatus->SW2 = locData;
0000f8 f89d0000 LDRB r0,[sp,#0]
0000fc 7568 STRB r0,[r5,#0x15]
0000fe e00d B |L8.284|
|L8.256|
;;;402 }
;;;403 }
;;;404 else if (((locData & (u8)0xFE) == (((u8)~(SC_ADPU->Header.INS)) & (u8)0xFE))||((locData & (u8)0xFE) == (SC_ADPU->Header.INS & (u8)0xFE)))
000100 7862 LDRB r2,[r4,#1]
000102 f00001fe AND r1,r0,#0xfe
000106 43d3 MVNS r3,r2
000108 f3c30346 UBFX r3,r3,#1,#7
00010c ebb10f43 CMP r1,r3,LSL #1
000110 d003 BEQ |L8.282|
000112 f00202fe AND r2,r2,#0xfe
000116 4291 CMP r1,r2
000118 d100 BNE |L8.284|
|L8.282|
;;;405 {
;;;406 SC_ResponceStatus->Data[0] = locData;/* ACK received */
00011a 7028 STRB r0,[r5,#0]
|L8.284|
;;;407 }
;;;408 }
;;;409
;;;410 /* If no status bytes received ---------------------------------------------*/
;;;411 if(SC_ResponceStatus->SW1 == 0x00)
00011c 7d28 LDRB r0,[r5,#0x14]
00011e 2800 CMP r0,#0
000120 d14c BNE |L8.444|
;;;412 {
;;;413 /* Send body data to SC--------------------------------------------------*/
;;;414 if (SC_ADPU->Body.LC)
000122 7920 LDRB r0,[r4,#4]
000124 b1f8 CBZ r0,|L8.358|
000126 46b8 MOV r8,r7 ;340
;;;415 {
;;;416 for(i = 0; i < SC_ADPU->Body.LC; i++)
000128 2600 MOVS r6,#0
00012a 4657 MOV r7,r10 ;337
00012c e00f B |L8.334|
|L8.302|
;;;417 {
;;;418 SCData = SC_ADPU->Body.Data[i];
00012e 19a0 ADDS r0,r4,r6
000130 7941 LDRB r1,[r0,#5]
000132 f8881000 STRB r1,[r8,#0]
;;;419
;;;420 USART_SendData(USART3, SCData);
000136 f8981000 LDRB r1,[r8,#0] ; SCData
00013a 4638 MOV r0,r7
00013c f7fffffe BL USART_SendData
|L8.320|
;;;421 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000140 2140 MOVS r1,#0x40
000142 4638 MOV r0,r7
000144 f7fffffe BL USART_GetFlagStatus
000148 2800 CMP r0,#0
00014a d0f9 BEQ |L8.320|
00014c 1c76 ADDS r6,r6,#1 ;416
|L8.334|
00014e 7920 LDRB r0,[r4,#4] ;416
000150 42b0 CMP r0,r6 ;416
000152 d8ec BHI |L8.302|
;;;422 {
;;;423 }
;;;424 }
;;;425 /* Flush the USART3 DR */
;;;426 (void)USART_ReceiveData(USART3);
000154 4638 MOV r0,r7
000156 f7fffffe BL USART_ReceiveData
;;;427 /* Disable the DMA Receive (Reset DMAR bit only) */
;;;428 USART_DMACmd(USART3, USART_DMAReq_Rx, DISABLE);
00015a 2200 MOVS r2,#0
00015c 2140 MOVS r1,#0x40
00015e 4638 MOV r0,r7
000160 f7fffffe BL USART_DMACmd
000164 e011 B |L8.394|
|L8.358|
;;;429 }
;;;430
;;;431 /* Or receive body data from SC ------------------------------------------*/
;;;432 else if (SC_ADPU->Body.LE)
000166 7e60 LDRB r0,[r4,#0x19]
000168 b178 CBZ r0,|L8.394|
;;;433 {
;;;434 for(i = 0; i < SC_ADPU->Body.LE; i++)
00016a 2600 MOVS r6,#0
00016c 464f MOV r7,r9 ;391
00016e e009 B |L8.388|
|L8.368|
;;;435 {
;;;436 if(USART_ByteReceive(&locData, SC_Receive_Timeout) == SUCCESS)
000170 4639 MOV r1,r7
000172 4668 MOV r0,sp
000174 f7fffffe BL USART_ByteReceive
000178 2801 CMP r0,#1
00017a d102 BNE |L8.386|
;;;437 {
;;;438 SC_ResponceStatus->Data[i] = locData;
00017c f89d0000 LDRB r0,[sp,#0]
000180 55a8 STRB r0,[r5,r6]
|L8.386|
000182 1c76 ADDS r6,r6,#1 ;434
|L8.388|
000184 7e60 LDRB r0,[r4,#0x19] ;434
000186 42b0 CMP r0,r6 ;434
000188 d8f2 BHI |L8.368|
|L8.394|
;;;439 }
;;;440 }
;;;441 }
;;;442 /* Wait SW1 --------------------------------------------------------------*/
;;;443 i = 0;
00018a 2400 MOVS r4,#0
00018c 464e MOV r6,r9 ;391
|L8.398|
;;;444 while(i < 10)
;;;445 {
;;;446 if(USART_ByteReceive(&locData, SC_Receive_Timeout) == SUCCESS)
00018e 4631 MOV r1,r6
000190 4668 MOV r0,sp
000192 f7fffffe BL USART_ByteReceive
000196 2801 CMP r0,#1
000198 d103 BNE |L8.418|
;;;447 {
;;;448 SC_ResponceStatus->SW1 = locData;
00019a f89d0000 LDRB r0,[sp,#0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -