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

📄 smartcard.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] 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..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\source\smartcard.c]
                          THUMB

                          AREA ||i.SC_AnswerReq||, CODE, READONLY, ALIGN=1

                  SC_AnswerReq PROC
;;;482    *******************************************************************************/
;;;483    static void SC_AnswerReq(SC_State *SCstate, u8 *card, u8 length)
000000  e92d43f8          PUSH     {r3-r9,lr}
;;;484    {
000004  4607              MOV      r7,r0
;;;485      u8 Data = 0;
000006  2000              MOVS     r0,#0
;;;486      u32 i = 0;
000008  4605              MOV      r5,r0
;;;487    
;;;488      switch(*SCstate)
00000a  9000              STR      r0,[sp,#0]
00000c  7838              LDRB     r0,[r7,#0]
00000e  460c              MOV      r4,r1                 ;484
000010  4616              MOV      r6,r2                 ;484
000012  f04f0903          MOV      r9,#3
;;;489      {
;;;490        case SC_RESET_LOW:
;;;491          /* Check responce with reset low ---------------------------------------*/
;;;492          for (i = 0; i < length; i++)
;;;493          {
;;;494            if((USART_ByteReceive(&Data, SC_Receive_Timeout)) == SUCCESS)
000016  f44f4880          MOV      r8,#0x4000
00001a  2801              CMP      r0,#1                 ;488
00001c  d018              BEQ      |L1.80|
00001e  2802              CMP      r0,#2                 ;488
000020  d022              BEQ      |L1.104|
000022  2803              CMP      r0,#3                 ;488
000024  d008              BEQ      |L1.56|
000026  2805              CMP      r0,#5                 ;488
;;;495            {
;;;496              card[i] = Data;
;;;497            }
;;;498          }
;;;499          if(card[0])
;;;500          {
;;;501            (*SCstate) = SC_ACTIVE;
;;;502            SC_Reset(Bit_SET);
;;;503          }
;;;504          else
;;;505          {
;;;506            (*SCstate) = SC_RESET_HIGH;
;;;507          }
;;;508        break;
;;;509    
;;;510        case SC_RESET_HIGH:
;;;511          /* Check responce with reset high --------------------------------------*/
;;;512          SC_Reset(Bit_SET); /* Reset High */
;;;513      
;;;514          while(length--)
;;;515          {
;;;516            if((USART_ByteReceive(&Data, SC_Receive_Timeout)) == SUCCESS)
;;;517            {
;;;518              *card++ = Data; /* Receive data for timeout = SC_Receive_Timeout */
;;;519            }       
;;;520          }
;;;521          if(card[0])
;;;522          {
;;;523            (*SCstate) = SC_ACTIVE;
;;;524          }
;;;525          else
;;;526          {
;;;527            (*SCstate) = SC_POWER_OFF;
;;;528          }
;;;529        break;
;;;530    
;;;531        case SC_ACTIVE:
;;;532        break;
;;;533        
;;;534        case SC_POWER_OFF:
;;;535          /* Close Connection if no answer received ------------------------------*/
;;;536          SC_Reset(Bit_SET); /* Reset high - a bit is used as level shifter from 3.3 to 5 V */
;;;537          SC_PowerCmd(DISABLE);
;;;538        break;
;;;539    
;;;540        default:
;;;541          (*SCstate) = SC_RESET_LOW;
000028  f04f0001          MOV      r0,#1
00002c  d137              BNE      |L1.158|
00002e  f7fffffe          BL       SC_Reset
000032  2000              MOVS     r0,#0                 ;537
000034  f7fffffe          BL       SC_PowerCmd
                  |L1.56|
;;;542      }
;;;543    }
000038  e8bd83f8          POP      {r3-r9,pc}
                  |L1.60|
00003c  4641              MOV      r1,r8                 ;494
00003e  4668              MOV      r0,sp                 ;494
000040  f7fffffe          BL       USART_ByteReceive
000044  2801              CMP      r0,#1                 ;494
000046  d102              BNE      |L1.78|
000048  f89d0000          LDRB     r0,[sp,#0]            ;496
00004c  5560              STRB     r0,[r4,r5]            ;496
                  |L1.78|
00004e  1c6d              ADDS     r5,r5,#1              ;492
                  |L1.80|
000050  42b5              CMP      r5,r6                 ;492
000052  d3f3              BCC      |L1.60|
000054  7820              LDRB     r0,[r4,#0]            ;499
000056  b128              CBZ      r0,|L1.100|
000058  f8879000          STRB     r9,[r7,#0]            ;501
00005c  2001              MOVS     r0,#1                 ;502
00005e  f7fffffe          BL       SC_Reset
000062  e7e9              B        |L1.56|
                  |L1.100|
000064  2002              MOVS     r0,#2                 ;506
000066  e016              B        |L1.150|
                  |L1.104|
000068  2001              MOVS     r0,#1                 ;512
00006a  f7fffffe          BL       SC_Reset
00006e  4645              MOV      r5,r8                 ;494
000070  e009              B        |L1.134|
                  |L1.114|
000072  4629              MOV      r1,r5                 ;516
000074  4668              MOV      r0,sp                 ;516
000076  f7fffffe          BL       USART_ByteReceive
00007a  2801              CMP      r0,#1                 ;516
00007c  d103              BNE      |L1.134|
00007e  f89d0000          LDRB     r0,[sp,#0]            ;518
000082  f8040b01          STRB     r0,[r4],#1            ;518
                  |L1.134|
000086  0030              MOVS     r0,r6                 ;514
000088  f1a60601          SUB      r6,r6,#1              ;514
00008c  b2f6              UXTB     r6,r6                 ;514
00008e  d1f0              BNE      |L1.114|
000090  7820              LDRB     r0,[r4,#0]            ;521
000092  b110              CBZ      r0,|L1.154|
000094  4648              MOV      r0,r9                 ;523
                  |L1.150|
000096  7038              STRB     r0,[r7,#0]            ;506
000098  e7ce              B        |L1.56|
                  |L1.154|
00009a  2005              MOVS     r0,#5                 ;527
00009c  e7fb              B        |L1.150|
                  |L1.158|
00009e  e7fa              B        |L1.150|
;;;544    
                          ENDP


                          AREA ||i.SC_Handler||, CODE, READONLY, ALIGN=2

                  SC_Handler PROC
;;;61     *******************************************************************************/
;;;62     void SC_Handler(SC_State *SCState, SC_ADPU_Commands *SC_ADPU, SC_ADPU_Responce *SC_Response)
000000  e92d41f0          PUSH     {r4-r8,lr}
;;;63     {
000004  4605              MOV      r5,r0
000006  4608              MOV      r0,r1
000008  4611              MOV      r1,r2
;;;64       u32 i = 0;
;;;65     
;;;66       switch(*SCState)
00000a  782a              LDRB     r2,[r5,#0]
00000c  2400              MOVS     r4,#0                 ;64
00000e  2605              MOVS     r6,#5
000010  4f33              LDR      r7,|L2.224|
000012  2a06              CMP      r2,#6
000014  d262              BCS      |L2.220|
000016  e8dff002          TBB      [pc,r2]
00001a  0323              DCB      0x03,0x23
00001c  61384246          DCB      0x61,0x38,0x42,0x46
;;;67       {
;;;68         case SC_POWER_ON:
;;;69           if (SC_ADPU->Header.INS == SC_GET_A2R)
000020  7840              LDRB     r0,[r0,#1]
000022  2800              CMP      r0,#0
000024  d12f              BNE      |L2.134|
;;;70           {
;;;71             /* Smartcard intialization ------------------------------------------*/
;;;72             SC_Init();
000026  f7fffffe          BL       SC_Init
;;;73     
;;;74             /* Reset Data from SC buffer -----------------------------------------*/
;;;75             for (i = 0; i < 40; i++)
;;;76             {
;;;77               SC_ATR_Table[i] = 0;
00002a  482e              LDR      r0,|L2.228|
00002c  2100              MOVS     r1,#0                 ;64
                  |L2.46|
00002e  5501              STRB     r1,[r0,r4]
000030  1c64              ADDS     r4,r4,#1              ;75
000032  2c28              CMP      r4,#0x28              ;75
000034  d3fb              BCC      |L2.46|
;;;78             }
;;;79             
;;;80             /* Reset SC_A2R Structure --------------------------------------------*/
;;;81             SC_A2R.TS = 0;
000036  4a2b              LDR      r2,|L2.228|
000038  3a2c              SUBS     r2,r2,#0x2c
00003a  7011              STRB     r1,[r2,#0]
;;;82             SC_A2R.T0 = 0;
00003c  7051              STRB     r1,[r2,#1]
;;;83             for (i = 0; i < SETUP_LENGTH; i++)
00003e  2000              MOVS     r0,#0
                  |L2.64|
;;;84             {
;;;85               SC_A2R.T[i] = 0;
000040  1813              ADDS     r3,r2,r0
000042  1c40              ADDS     r0,r0,#1              ;83
000044  7099              STRB     r1,[r3,#2]
000046  2814              CMP      r0,#0x14              ;83
000048  d3fa              BCC      |L2.64|
;;;86             }
;;;87             for (i = 0; i < HIST_LENGTH; i++)
00004a  2000              MOVS     r0,#0
                  |L2.76|
;;;88             {
;;;89               SC_A2R.H[i] = 0;
00004c  1813              ADDS     r3,r2,r0
00004e  1c40              ADDS     r0,r0,#1              ;87
000050  7599              STRB     r1,[r3,#0x16]
000052  2814              CMP      r0,#0x14              ;87
000054  d3fa              BCC      |L2.76|
;;;90             }
;;;91             SC_A2R.Tlength = 0;
000056  f8021f2a          STRB     r1,[r2,#0x2a]!
;;;92             SC_A2R.Hlength = 0;
00005a  7051              STRB     r1,[r2,#1]
;;;93             
;;;94             /* Next State --------------------------------------------------------*/
;;;95             *SCState = SC_RESET_LOW;
00005c  2001              MOVS     r0,#1
00005e  e01c              B        |L2.154|
;;;96           }
;;;97         break;
;;;98     
;;;99         case SC_RESET_LOW:
;;;100          if(SC_ADPU->Header.INS == SC_GET_A2R)
000060  7840              LDRB     r0,[r0,#1]
000062  2800              CMP      r0,#0
000064  d10f              BNE      |L2.134|
000066  2180              MOVS     r1,#0x80
000068  4638              MOV      r0,r7
00006a  f7fffffe          BL       GPIO_ReadInputDataBit
;;;101          {
;;;102            /* If card is detected then Power ON, Card Reset and wait for an answer) */
;;;103            if (SC_Detect())
00006e  b3a8              CBZ      r0,|L2.220|
000070  e004              B        |L2.124|
                  |L2.114|
;;;104            {
;;;105              while(((*SCState) != SC_POWER_OFF) && ((*SCState) != SC_ACTIVE))
;;;106              {
;;;107                SC_AnswerReq(SCState, &SC_ATR_Table[0], 40); /* Check for answer to reset */
000072  2228              MOVS     r2,#0x28
000074  491b              LDR      r1,|L2.228|
000076  4628              MOV      r0,r5
000078  f7fffffe          BL       SC_AnswerReq
                  |L2.124|
00007c  7828              LDRB     r0,[r5,#0]            ;105
00007e  2805              CMP      r0,#5                 ;105
000080  d001              BEQ      |L2.134|
000082  2803              CMP      r0,#3                 ;105
000084  d1f5              BNE      |L2.114|
                  |L2.134|
;;;108              }
;;;109            }
;;;110            else
;;;111            {
;;;112              (*SCState) = SC_POWER_OFF;
;;;113            } 
;;;114          }
;;;115        break;
;;;116    
;;;117        case SC_ACTIVE:
;;;118          if (SC_ADPU->Header.INS == SC_GET_A2R)
;;;119          {
;;;120            if(SC_decode_Answer2reset(&SC_ATR_Table[0]) == T0_PROTOCOL)
;;;121            {
;;;122              (*SCState) = SC_ACTIVE_ON_T0;
;;;123            }
;;;124            else
;;;125            {
;;;126              (*SCState) = SC_POWER_OFF; 
;;;127            }
;;;128          }
;;;129        break;
;;;130    
;;;131        case SC_ACTIVE_ON_T0:
;;;132          SC_SendData(SC_ADPU, SC_Response);
;;;133        break;
;;;134    
;;;135        case SC_POWER_OFF:
;;;136          SC_DeInit(); /* Disable Smartcard interface */
;;;137        break;
;;;138    
;;;139        default: (*SCState) = SC_POWER_OFF;
;;;140      }
;;;141    }
000086  e8bd81f0          POP      {r4-r8,pc}
00008a  7840              LDRB     r0,[r0,#1]            ;118
00008c  2800              CMP      r0,#0                 ;118
00008e  d1fa              BNE      |L2.134|
000090  4814              LDR      r0,|L2.228|
000092  f7fffffe          BL       SC_decode_Answer2reset
000096  bb08              CBNZ     r0,|L2.220|
000098  2004              MOVS     r0,#4                 ;122
                  |L2.154|
00009a  7028              STRB     r0,[r5,#0]            ;95
00009c  e7f3              B        |L2.134|

⌨️ 快捷键说明

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