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

📄 smartcard.txt

📁 基于cortex arm stm32f103RB的智能卡(SmartCard)程序。编译通过
💻 TXT
📖 第 1 页 / 共 4 页
字号:
000182  e009              B        |L3.408|
                  |L3.388|
;;;427          {
;;;428            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|
;;;429            {
;;;430              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
                  |L3.408|
000198  7e60              LDRB     r0,[r4,#0x19]
00019a  42b0              CMP      r0,r6
00019c  d8f2              BHI      |L3.388|
                  |L3.414|
;;;431            }
;;;432          }
;;;433        }
;;;434        /* Wait SW1 --------------------------------------------------------------*/
;;;435        i = 0;
00019e  2400              MOVS     r4,#0
                  |L3.416|
;;;436        while(i < 10)
;;;437        {
;;;438          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|
;;;439          {
;;;440            SC_ResponceStatus->SW1 = locData;
0001ac  f89df89d          LDRB     r0,[sp,#0]
0001b0  7528              STRB     r0,[r5,#0x14]
;;;441            i = 11;
0001b2  e002              B        |L3.442|
                  |L3.436|
;;;442          }
;;;443          else
;;;444          {
;;;445            i++;
0001b4  1c64              ADDS     r4,r4,#1
0001b6  2c0a              CMP      r4,#0xa
0001b8  d3f2              BCC      |L3.416|
                  |L3.442|
;;;446          }
;;;447        }
;;;448        /* Wait SW2 ------------------------------------------------------------*/   
;;;449        i = 0;
0001ba  2400              MOVS     r4,#0
                  |L3.444|
;;;450        while(i < 10)
;;;451        {
;;;452          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|
;;;453          {
;;;454            SC_ResponceStatus->SW2 = locData;
0001c8  f89df89d          LDRB     r0,[sp,#0]
0001cc  7568              STRB     r0,[r5,#0x15]
                  |L3.462|
;;;455            i = 11;
;;;456          }
;;;457          else
;;;458          {
;;;459            i++;
;;;460          }
;;;461        }
;;;462      }
;;;463    }
0001ce  e8bde8bd          POP      {r3-r9,pc}
                  |L3.466|
0001d2  1c64              ADDS     r4,r4,#1
0001d4  2c0a              CMP      r4,#0xa
0001d6  d3f1              BCC      |L3.444|
0001d8  e7f9              B        |L3.462|
                          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
;;;544    static u8 SC_decode_Answer2reset(u8 *card)
;;;545    {
000000  e92de92d          PUSH     {r4-r8,lr}
;;;546      u32 i = 0, flag = 0, buf = 0, protocol = 0;
;;;547    
;;;548      SC_A2R.TS = card[0];  /* Initial character */
000004  4c3a              LDR      r4,|L4.240|
000006  7802              LDRB     r2,[r0,#0]
000008  7022              STRB     r2,[r4,#0]  ; SC_A2R
;;;549      SC_A2R.T0 = card[1];  /* Format character */
00000a  7842              LDRB     r2,[r0,#1]
00000c  2100              MOVS     r1,#0
00000e  7062              STRB     r2,[r4,#1]  ; SC_A2R
;;;550    
;;;551      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
;;;552    
;;;553      if ((SC_A2R.T0 & (u8)0x80) == 0x80)
00001a  0615              LSLS     r5,r2,#24
00001c  d500              BPL      |L4.32|
;;;554      {
;;;555        flag = 1;
00001e  2301              MOVS     r3,#1
                  |L4.32|
000020  f002f002          AND      r6,r2,#0xf0
                  |L4.36|
;;;556      }
;;;557    
;;;558      for (i = 0; i < 4; i++)
;;;559      {
;;;560        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
000036  f884f884          STRB     r2,[r4,#0x2a]  ; SC_A2R
00003a  2904              CMP      r1,#4
00003c  d3f2              BCC      |L4.36|
;;;561      }
;;;562    
;;;563      for (i = 0; i < SC_A2R.Tlength; i++)
00003e  2100              MOVS     r1,#0
000040  e004              B        |L4.76|
                  |L4.66|
;;;564      {
;;;565        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
                  |L4.76|
00004c  f894f894          LDRB     r2,[r4,#0x2a]  ; SC_A2R
000050  428a              CMP      r2,r1
000052  d8f6              BHI      |L4.66|
;;;566      }
;;;567    
;;;568      protocol = SC_A2R.T[SC_A2R.Tlength - 1] & (u8)0x0F;
000054  4e26              LDR      r6,|L4.240|
000056  f894f894          LDRB     r1,[r4,#0x2a]  ; SC_A2R
00005a  1c76              ADDS     r6,r6,#1
00005c  5d89              LDRB     r1,[r1,r6]
00005e  f001f001          AND      r5,r1,#0xf
;;;569    
;;;570      while (flag)
000062  e032              B        |L4.202|
                  |L4.100|
;;;571      {
;;;572        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|
;;;573        {
;;;574          flag = 1;
00006e  2301              MOVS     r3,#1
000070  e000              B        |L4.116|
                  |L4.114|
;;;575        }
;;;576        else
;;;577        {
;;;578          flag = 0;
000072  2300              MOVS     r3,#0
                  |L4.116|
;;;579        }
;;;580    
;;;581        buf = SC_A2R.Tlength;
;;;582        SC_A2R.Tlength = 0;
000074  2100              MOVS     r1,#0
000076  f884f884          STRB     r1,[r4,#0x2a]  ; SC_A2R
00007a  eb04eb04          ADD      r12,r4,r2
                  |L4.126|
;;;583    
;;;584        for (i = 0; i < 4; i++)
;;;585        {
;;;586          SC_A2R.Tlength = SC_A2R.Tlength + (((SC_A2R.T[buf - 1] & (u8)0xF0) >> (4 + i)) & (u8)0x1);
00007e  f89cf89c          LDRB     r7,[r12,#1]
000082  f101f101          ADD      r8,r1,#4
000086  f007f007          AND      r7,r7,#0xf0
00008a  fa27fa27          LSR      r7,r7,r8
00008e  f894f894          LDRB     lr,[r4,#0x2a]  ; SC_A2R
000092  f007f007          AND      r7,r7,#1
000096  4477              ADD      r7,r7,lr
000098  1c49              ADDS     r1,r1,#1
00009a  f884f884          STRB     r7,[r4,#0x2a]  ; SC_A2R
00009e  2904              CMP      r1,#4
0000a0  d3ed              BCC      |L4.126|
;;;587        }
;;;588    	
;;;589        for (i = 0;i < SC_A2R.Tlength; i++)
0000a2  2100              MOVS     r1,#0
0000a4  e008              B        |L4.184|
                  |L4.166|
;;;590        {
;;;591          SC_A2R.T[buf + i] = card[i + 2 + buf];
0000a6  188f              ADDS     r7,r1,r2
0000a8  eb02eb02          ADD      r12,r2,r1
0000ac  4407              ADD      r7,r7,r0
0000ae  78bf              LDRB     r7,[r7,#2]
0000b0  44a4              ADD      r12,r12,r4
0000b2  f88cf88c          STRB     r7,[r12,#2]
0000b6  1c49              ADDS     r1,r1,#1
                  |L4.184|
0000b8  f894f894          LDRB     r7,[r4,#0x2a]  ; SC_A2R
0000bc  428f              CMP      r7,r1
0000be  d8f2              BHI      |L4.166|
;;;592        }
;;;593        SC_A2R.Tlength += (u8)buf;
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
0000cc  d1ca              BNE      |L4.100|
;;;594      }
;;;595    
;;;596      for (i = 0; i < SC_A2R.Hlength; i++)
0000ce  2100              MOVS     r1,#0
0000d0  e007              B        |L4.226|
                  |L4.210|
;;;597      {
;;;598        SC_A2R.H[i] = card[i + 2 + SC_A2R.Tlength];
0000d2  f894f894          LDRB     r2,[r4,#0x2a]  ; SC_A2R
0000d6  1813              ADDS     r3,r2,r0
0000d8  1c8a              ADDS     r2,r1,#2
0000da  5c9a              LDRB     r2,[r3,r2]
0000dc  1863              ADDS     r3,r4,r1
0000de  759a              STRB     r2,[r3,#0x16]
0000e0  1c49              ADDS     r1,r1,#1
                  |L4.226|
0000e2  f894f894          LDRB     r2,[r4,#0x2b]  ; SC_A2R
0000e6  428a              CMP      r2,r1
0000e8  d8f3              BHI      |L4.210|
;;;599      }
;;;600    
;;;601      return (u8)protocol;
0000ea  b2e8              UXTB     r0,r5
;;;602    }
0000ec  e8bde8bd          POP      {r4-r8,pc}
                          ENDP

                  |L4.240|
0000f0  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
;;;611    static void SC_Init(void)
;;;612    {
000000  e92de92d          PUSH     {r4-r8,lr}
000004  b088              SUB      sp,sp,#0x20
;;;613      GPIO_InitTypeDef GPIO_InitStructure;
;;;614      USART_InitTypeDef USART_InitStructure;
;;;615      
;;;616      /* Enable GPIOB, GPIOD and GPIOE clocks */
;;;617      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD |
000006  2101              MOVS     r1,#1
000008  2068              MOVS     r0,#0x68
00000a  f7fff7ff          BL       RCC_APB2PeriphClockCmd
;;;618                             RCC_APB2Periph_GPIOE, ENABLE);
;;;619                             
;;;620      /* Enable USART3 clock */
;;;621      RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
00000e  2101              MOVS     r1,#1
000010  0488              LSLS     r0,r1,#18
000012  f7fff7ff          BL       RCC_APB1PeriphClockCmd
;;;622                               
;;;623      /* Configure USART3 CK(PB.12) as alternate function push-pull */
;;;624      GPIO_InitStructure.GPIO_Pin = SC_CLK;
000016  f44ff44f          MOV      r6,#0x1000
00001a  f8adf8ad          STRH     r6,[sp,#0x1c]
;;;625      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
00001e  2018              MOVS     r0,#0x18
000020  f88df88d          STRB     r0,[sp,#0x1f]
;;;626      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000024  2003              MOVS     r0,#3
;;;627      GPIO_Init(GPIOB, &GPIO_InitStructure);
000026  4f35              LDR      r7,|L6.252|
000028  f88df88d          STRB     r0,[sp,#0x1e]
00002c  a907              ADD      r1,sp,#0x1c
00002e  4638              MOV      r0,r7
000030  f7fff7ff          BL       GPIO_Init
;;;628      
;;;629      /* Configure USART3 Tx (PB.10) as alternate function open-drain */
;;;630      GPIO_InitStructure.GPIO_Pin = SC_IO;
000034  10b5              ASRS     r5,r6,#2
000036  f8adf8ad          STRH     r5,[sp,#0x1c]
;;;631      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
00003a  201c              MOVS     r0,#0x1c
00003c  f88df88d          STRB     r0,[sp,#0x1f]
;;;632      GPIO_Init(GPIOB, &GPIO_InitStructure);
000040  a907              ADD      r1,sp,#0x1c
000042  4638              MOV      r0,r7
000044  f7fff7ff          BL       GPIO_Init
;;;633    
;;;634      /* Configure Smartcard Reset  */
;;;635      GPIO_InitStructure.GPIO_Pin = SC_RESET;
000048  006c              LSLS     r4,r5,#1
00004a  f8adf8ad          STRH     r4,[sp,#0x1c]
;;;636      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
00004e  2010              MOVS     r0,#0x10
000050  f88df88d          STRB     r0,[sp,#0x1f]
;;;637      GPIO_Init(GPIOB, &GPIO_InitStructure);
000054  a907              ADD      r1,sp,#0x1c
000056  4638              MOV      r0,r7
000058  f7fff7ff          BL       GPIO_Init
;;;638    
;;;639      /* Configure Smartcard 3/5V  */
;;;640      GPIO_InitStructure.GPIO_Pin = SC_3_5V;
;;;641      GPIO_Init(GPIOD, &GPIO_InitStructure);
00005c  f8dff8df          LDR      r8,|L6.256|
000060  f8adf8ad          STRH     r4,[sp,#0x1c]
000064  a907              ADD      r1,sp,#0x1c
000066  4640              MOV      r0,r8
000068  f7fff7ff          BL       GPIO_Init
;;;642    
;;;643      /* Configure Smartcard CMDVCC  */
;;;644      GPIO_InitStructure.GPIO_Pin = SC_CMDVCC;
00006c  2080              MOVS     r0,#0x80
00006e  f8adf8ad          STRH     r0,[sp,#0x1c]
;;;645      GPIO_Init(GPIOE, &GPIO_InitStructure);
000072  a907              ADD      r1,sp,#0x1c
000074  4823              LDR      r0,|L6.260|
000076  f7fff7ff          BL       GPIO_Init
;;;646        

⌨️ 快捷键说明

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