⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smartcard.txt

📁 STM32外部SRAM用作datamemery的程序 开发环境MDK
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;407        }
;;;408      }
;;;409    
;;;410      /* If no status bytes received ---------------------------------------------*/
;;;411      if(SC_ResponceStatus->SW1 == 0x00)
000136  7d28              LDRB     r0,[r5,#0x14]
000138  2800              CMP      r0,#0
00013a  d148              BNE      |L3.462|
;;;412      {
;;;413        /* Send body data to SC--------------------------------------------------*/
;;;414        if (SC_ADPU->Body.LC)
00013c  7920              LDRB     r0,[r4,#4]
00013e  b1e8              CBZ      r0,|L3.380|
;;;415        {
;;;416          for(i = 0; i < SC_ADPU->Body.LC; i++)
000140  2600              MOVS     r6,#0
000142  e00f              B        |L3.356|
                  |L3.324|
;;;417          {
;;;418            SCData = SC_ADPU->Body.Data[i];
000144  19a0              ADDS     r0,r4,r6
000146  7940              LDRB     r0,[r0,#5]
000148  f888f888          STRB     r0,[r8,#0]  ; SCData
;;;419            
;;;420            USART_SendData(USART3, SCData);
00014c  f898f898          LDRB     r1,[r8,#0]  ; SCData
000150  4648              MOV      r0,r9
000152  f7fff7ff          BL       USART_SendData
                  |L3.342|
;;;421            while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000156  2140              MOVS     r1,#0x40
000158  4648              MOV      r0,r9
00015a  f7fff7ff          BL       USART_GetFlagStatus
00015e  2800              CMP      r0,#0
000160  d0f9              BEQ      |L3.342|
000162  1c76              ADDS     r6,r6,#1              ;416
                  |L3.356|
000164  7920              LDRB     r0,[r4,#4]            ;416
000166  42b0              CMP      r0,r6                 ;416
000168  d8ec              BHI      |L3.324|
;;;422            {
;;;423            } 
;;;424          }
;;;425          /* Flush the USART3 DR */
;;;426          (void)USART_ReceiveData(USART3);
00016a  4648              MOV      r0,r9
00016c  f7fff7ff          BL       USART_ReceiveData
;;;427          /* Disable the DMA Receive (Reset DMAR bit only) */  
;;;428          USART_DMACmd(USART3, USART_DMAReq_Rx, DISABLE);
000170  2200              MOVS     r2,#0
000172  2140              MOVS     r1,#0x40
000174  4648              MOV      r0,r9
000176  f7fff7ff          BL       USART_DMACmd
00017a  e010              B        |L3.414|
                  |L3.380|
;;;429        }
;;;430    
;;;431        /* Or receive body data from SC ------------------------------------------*/
;;;432        else if (SC_ADPU->Body.LE)
00017c  7e60              LDRB     r0,[r4,#0x19]
00017e  b170              CBZ      r0,|L3.414|
;;;433        {
;;;434          for(i = 0; i < SC_ADPU->Body.LE; i++)
000180  2600              MOVS     r6,#0
000182  e009              B        |L3.408|
                  |L3.388|
;;;435          {
;;;436            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|
;;;437            {
;;;438              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              ;434
                  |L3.408|
000198  7e60              LDRB     r0,[r4,#0x19]         ;434
00019a  42b0              CMP      r0,r6                 ;434
00019c  d8f2              BHI      |L3.388|
                  |L3.414|
;;;439            }
;;;440          }
;;;441        }
;;;442        /* Wait SW1 --------------------------------------------------------------*/
;;;443        i = 0;
00019e  2400              MOVS     r4,#0
                  |L3.416|
;;;444        while(i < 10)
;;;445        {
;;;446          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|
;;;447          {
;;;448            SC_ResponceStatus->SW1 = locData;
0001ac  f89df89d          LDRB     r0,[sp,#0]
0001b0  7528              STRB     r0,[r5,#0x14]
;;;449            i = 11;
0001b2  e002              B        |L3.442|
                  |L3.436|
;;;450          }
;;;451          else
;;;452          {
;;;453            i++;
0001b4  1c64              ADDS     r4,r4,#1
0001b6  2c0a              CMP      r4,#0xa               ;444
0001b8  d3f2              BCC      |L3.416|
                  |L3.442|
;;;454          }
;;;455        }
;;;456        /* Wait SW2 ------------------------------------------------------------*/   
;;;457        i = 0;
0001ba  2400              MOVS     r4,#0
                  |L3.444|
;;;458        while(i < 10)
;;;459        {
;;;460          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|
;;;461          {
;;;462            SC_ResponceStatus->SW2 = locData;
0001c8  f89df89d          LDRB     r0,[sp,#0]
0001cc  7568              STRB     r0,[r5,#0x15]
                  |L3.462|
;;;463            i = 11;
;;;464          }
;;;465          else
;;;466          {
;;;467            i++;
;;;468          }
;;;469        }
;;;470      }
;;;471    }
0001ce  e8bde8bd          POP      {r3-r9,pc}
                  |L3.466|
0001d2  1c64              ADDS     r4,r4,#1              ;467
0001d4  2c0a              CMP      r4,#0xa               ;458
0001d6  d3f1              BCC      |L3.444|
0001d8  e7f9              B        |L3.462|
;;;472    
                          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
;;;552    static u8 SC_decode_Answer2reset(u8 *card)
;;;553    {
000000  e92de92d          PUSH     {r4-r8,lr}
;;;554      u32 i = 0, flag = 0, buf = 0, protocol = 0;
;;;555    
;;;556      SC_A2R.TS = card[0];  /* Initial character */
000004  4c3b              LDR      r4,|L4.244|
000006  7802              LDRB     r2,[r0,#0]
000008  7022              STRB     r2,[r4,#0]  ; SC_A2R
;;;557      SC_A2R.T0 = card[1];  /* Format character */
00000a  7842              LDRB     r2,[r0,#1]
00000c  2100              MOVS     r1,#0                 ;554
00000e  7062              STRB     r2,[r4,#1]  ; SC_A2R
;;;558    
;;;559      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                 ;554
;;;560    
;;;561      if ((SC_A2R.T0 & (u8)0x80) == 0x80)
00001a  0615              LSLS     r5,r2,#24
00001c  d500              BPL      |L4.32|
;;;562      {
;;;563        flag = 1;
00001e  2301              MOVS     r3,#1
                  |L4.32|
000020  f002f002          AND      r6,r2,#0xf0
                  |L4.36|
;;;564      }
;;;565    
;;;566      for (i = 0; i < 4; i++)
;;;567      {
;;;568        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              ;566
000036  f884f884          STRB     r2,[r4,#0x2a]  ; SC_A2R
00003a  2904              CMP      r1,#4                 ;566
00003c  d3f2              BCC      |L4.36|
;;;569      }
;;;570    
;;;571      for (i = 0; i < SC_A2R.Tlength; i++)
00003e  2100              MOVS     r1,#0
000040  e004              B        |L4.76|
                  |L4.66|
;;;572      {
;;;573        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              ;571
                  |L4.76|
00004c  f894f894          LDRB     r2,[r4,#0x2a]         ;571  ; SC_A2R
000050  428a              CMP      r2,r1                 ;571
000052  d8f6              BHI      |L4.66|
;;;574      }
;;;575    
;;;576      protocol = SC_A2R.T[SC_A2R.Tlength - 1] & (u8)0x0F;
000054  4e27              LDR      r6,|L4.244|
000056  f894f894          LDRB     r1,[r4,#0x2a]  ; SC_A2R
00005a  1c76              ADDS     r6,r6,#1
00005c  5d89              LDRB     r1,[r1,r6]
00005e  f001f001          AND      r7,r1,#0xf
;;;577    
;;;578      while (flag)
000062  e032              B        |L4.202|
                  |L4.100|
;;;579      {
;;;580        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|
;;;581        {
;;;582          flag = 1;
00006e  2301              MOVS     r3,#1
000070  e000              B        |L4.116|
                  |L4.114|
;;;583        }
;;;584        else
;;;585        {
;;;586          flag = 0;
000072  2300              MOVS     r3,#0
                  |L4.116|
;;;587        }
;;;588    
;;;589        buf = SC_A2R.Tlength;
;;;590        SC_A2R.Tlength = 0;
000074  2100              MOVS     r1,#0
000076  f884f884          STRB     r1,[r4,#0x2a]  ; SC_A2R
00007a  eb04eb04          ADD      lr,r4,r2
;;;591    
;;;592        for (i = 0; i < 4; i++)
;;;593        {
;;;594          SC_A2R.Tlength = SC_A2R.Tlength + (((SC_A2R.T[buf - 1] & (u8)0xF0) >> (4 + i)) & (u8)0x1);
00007e  bf00              NOP      
                  |L4.128|
000080  f89ef89e          LDRB     r8,[lr,#1]
000084  1d0d              ADDS     r5,r1,#4
000086  f008f008          AND      r8,r8,#0xf0
00008a  fa28fa28          LSR      r8,r8,r5
00008e  f894f894          LDRB     r12,[r4,#0x2a]  ; SC_A2R
000092  f008f008          AND      r5,r8,#1
000096  4465              ADD      r5,r5,r12
000098  1c49              ADDS     r1,r1,#1              ;592
00009a  f884f884          STRB     r5,[r4,#0x2a]  ; SC_A2R
00009e  2904              CMP      r1,#4                 ;592
0000a0  d3ee              BCC      |L4.128|
;;;595        }
;;;596    	
;;;597        for (i = 0;i < SC_A2R.Tlength; i++)
0000a2  2100              MOVS     r1,#0
0000a4  e008              B        |L4.184|
                  |L4.166|
;;;598        {
;;;599          SC_A2R.T[buf + i] = card[i + 2 + buf];
0000a6  188d              ADDS     r5,r1,r2
0000a8  eb02eb02          ADD      r12,r2,r1
0000ac  4405              ADD      r5,r5,r0
0000ae  78ad              LDRB     r5,[r5,#2]
0000b0  44a4              ADD      r12,r12,r4
0000b2  f88cf88c          STRB     r5,[r12,#2]
0000b6  1c49              ADDS     r1,r1,#1              ;597
                  |L4.184|
0000b8  f894f894          LDRB     r5,[r4,#0x2a]         ;597  ; SC_A2R
0000bc  428d              CMP      r5,r1                 ;597
0000be  d8f2              BHI      |L4.166|
;;;600        }
;;;601        SC_A2R.Tlength += (u8)buf;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -