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

📄 smartcard.txt

📁 STM32外部SRAM用作datamemery的程序 开发环境MDK
💻 TXT
📖 第 1 页 / 共 5 页
字号:
00002e  5501              STRB     r1,[r0,r4]
000030  1c64              ADDS     r4,r4,#1              ;75
000032  2c28              CMP      r4,#0x28              ;75
000034  d3fb              BCC      |L7.46|
;;;78             }
;;;79             
;;;80             /* Reset SC_A2R Structure --------------------------------------------*/
;;;81             SC_A2R.TS = 0;
000036  4a2b              LDR      r2,|L7.228|
000038  3a2c              SUBS     r2,r2,#0x2c
00003a  7011              STRB     r1,[r2,#0]  ; SC_A2R
;;;82             SC_A2R.T0 = 0;
00003c  7051              STRB     r1,[r2,#1]  ; SC_A2R
;;;83             for (i = 0; i < SETUP_LENGTH; i++)
00003e  2000              MOVS     r0,#0
                  |L7.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      |L7.64|
;;;86             }
;;;87             for (i = 0; i < HIST_LENGTH; i++)
00004a  2000              MOVS     r0,#0
                  |L7.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      |L7.76|
;;;90             }
;;;91             SC_A2R.Tlength = 0;
000056  f802f802          STRB     r1,[r2,#0x2a]!  ; SC_A2R
;;;92             SC_A2R.Hlength = 0;
00005a  7051              STRB     r1,[r2,#1]  ; SC_A2R
;;;93             
;;;94             /* Next State --------------------------------------------------------*/
;;;95             *SCState = SC_RESET_LOW;
00005c  2001              MOVS     r0,#1
00005e  e01c              B        |L7.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      |L7.134|
000066  2180              MOVS     r1,#0x80
000068  4638              MOV      r0,r7
00006a  f7fff7ff          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,|L7.220|
000070  e004              B        |L7.124|
                  |L7.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,|L7.228|
000076  4628              MOV      r0,r5
000078  f7fff7ff          BL       SC_AnswerReq
                  |L7.124|
00007c  7828              LDRB     r0,[r5,#0]            ;105
00007e  2805              CMP      r0,#5                 ;105
000080  d001              BEQ      |L7.134|
000082  2803              CMP      r0,#3                 ;105
000084  d1f5              BNE      |L7.114|
                  |L7.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  e8bde8bd          POP      {r4-r8,pc}
00008a  7840              LDRB     r0,[r0,#1]            ;118
00008c  2800              CMP      r0,#0                 ;118
00008e  d1fa              BNE      |L7.134|
000090  4814              LDR      r0,|L7.228|
000092  f7fff7ff          BL       SC_decode_Answer2reset
000096  bb08              CBNZ     r0,|L7.220|
000098  2004              MOVS     r0,#4                 ;122
                  |L7.154|
00009a  7028              STRB     r0,[r5,#0]            ;95
00009c  e7f3              B        |L7.134|
00009e  e8bde8bd          POP      {r4-r8,lr}            ;132
0000a2  f7fff7ff          B.W      SC_SendData
0000a6  2001              MOVS     r0,#1                 ;132
0000a8  f7fff7ff          BL       SC_PowerCmd
0000ac  480e              LDR      r0,|L7.232|
0000ae  f7fff7ff          BL       USART_DeInit
0000b2  4c0e              LDR      r4,|L7.236|
0000b4  4620              MOV      r0,r4                 ;132
0000b6  f7fff7ff          BL       GPIO_DeInit
0000ba  4620              MOV      r0,r4                 ;132
0000bc  f7fff7ff          BL       GPIO_DeInit
0000c0  4638              MOV      r0,r7                 ;132
0000c2  f7fff7ff          BL       GPIO_DeInit
0000c6  2100              MOVS     r1,#0                 ;132
0000c8  2018              MOVS     r0,#0x18              ;132
0000ca  f7fff7ff          BL       RCC_APB2PeriphClockCmd
0000ce  e8bde8bd          POP      {r4-r8,lr}            ;132
0000d2  2100              MOVS     r1,#0                 ;132
0000d4  f44ff44f          MOV      r0,#0x40000           ;132
0000d8  f7fff7ff          B.W      RCC_APB1PeriphClockCmd
                  |L7.220|
0000dc  702e              STRB     r6,[r5,#0]            ;139
0000de  e7d2              B        |L7.134|
;;;142    
                          ENDP

                  |L7.224|
0000e0  40011000          DCD      0x40011000
                  |L7.228|
0000e4  0000002c          DCD      ||.bss||+0x2c
                  |L7.232|
0000e8  40004800          DCD      0x40004800
                  |L7.236|
0000ec  40010c00          DCD      0x40010c00

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

                  SC_ParityErrorHandler PROC
;;;187    void SC_ParityErrorHandler(void)
;;;188    {
000000  b510              PUSH     {r4,lr}
;;;189      USART_SendData(USART3, SCData);
000002  4806              LDR      r0,|L8.28|
000004  7801              LDRB     r1,[r0,#0]  ; SCData
000006  4c06              LDR      r4,|L8.32|
000008  4620              MOV      r0,r4
00000a  f7fff7ff          BL       USART_SendData
                  |L8.14|
;;;190      while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
00000e  2140              MOVS     r1,#0x40
000010  4620              MOV      r0,r4
000012  f7fff7ff          BL       USART_GetFlagStatus
000016  2800              CMP      r0,#0
000018  d0f9              BEQ      |L8.14|
;;;191      {
;;;192      } 
;;;193    }
00001a  bd10              POP      {r4,pc}
;;;194    
                          ENDP

                  |L8.28|
00001c  00000000          DCD      ||.data||
                  |L8.32|
000020  40004800          DCD      0x40004800

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

                  SC_PTSConfig PROC
;;;202    void SC_PTSConfig(void)
;;;203    {
000000  e92de92d          PUSH     {r4-r9,lr}
000004  b08d              SUB      sp,sp,#0x34
;;;204      RCC_ClocksTypeDef RCC_ClocksStatus;
;;;205      u32 workingbaudrate = 0, apbclock = 0;
;;;206      u8 locData = 0, PTSConfirmStatus = 1;
000006  2600              MOVS     r6,#0
000008  2401              MOVS     r4,#1
;;;207      USART_InitTypeDef USART_InitStructure;
;;;208      USART_ClockInitTypeDef USART_ClockInitStructure;
;;;209    
;;;210      /* Reconfigure the USART Baud Rate -------------------------------------------*/
;;;211      RCC_GetClocksFreq(&RCC_ClocksStatus);
00000a  a808              ADD      r0,sp,#0x20
00000c  9607              STR      r6,[sp,#0x1c]
00000e  f7fff7ff          BL       RCC_GetClocksFreq
;;;212      apbclock = RCC_ClocksStatus.PCLK1_Frequency;
000012  4961              LDR      r1,|L9.408|
;;;213      apbclock /= ((USART3->GTPR & (u16)0x00FF) * 2);
000014  980a              LDR      r0,[sp,#0x28]
000016  8809              LDRH     r1,[r1,#0]
;;;214    
;;;215      /* Enable the DMA Receive (Set DMAR bit only) to enable interrupt generation
;;;216         in case of a framing error FE */  
;;;217      USART_DMACmd(USART3, USART_DMAReq_Rx, ENABLE);
000018  f8dff8df          LDR      r9,|L9.408|
00001c  0609              LSLS     r1,r1,#24             ;213
00001e  0dc9              LSRS     r1,r1,#23             ;213
000020  fbb0fbb0          UDIV     r5,r0,r1              ;213
000024  f1a9f1a9          SUB      r9,r9,#0x18
000028  2201              MOVS     r2,#1
00002a  2140              MOVS     r1,#0x40
00002c  4648              MOV      r0,r9
00002e  f7fff7ff          BL       USART_DMACmd
;;;218      
;;;219      if((SC_A2R.T0 & (u8)0x10) == 0x10)
000032  4f5a              LDR      r7,|L9.412|
000034  7878              LDRB     r0,[r7,#1]  ; SC_A2R
000036  06c0              LSLS     r0,r0,#27
000038  d57e              BPL      |L9.312|
;;;220      {
;;;221        if(SC_A2R.T[0] != 0x11)
00003a  78b8              LDRB     r0,[r7,#2]  ; SC_A2R
00003c  2811              CMP      r0,#0x11
00003e  d07b              BEQ      |L9.312|
;;;222        {
;;;223          /* Send PTSS */
;;;224          SCData = 0xFF;
000040  f8dff8df          LDR      r8,|L9.416|
000044  20ff              MOVS     r0,#0xff
000046  f888f888          STRB     r0,[r8,#0]  ; SCData
;;;225          USART_SendData(USART3, SCData);
00004a  f898f898          LDRB     r1,[r8,#0]  ; SCData
00004e  4648              MOV      r0,r9
000050  f7fff7ff          BL       USART_SendData
                  |L9.84|
;;;226          while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000054  2140              MOVS     r1,#0x40
000056  4648              MOV      r0,r9
000058  f7fff7ff          BL       USART_GetFlagStatus
00005c  2800              CMP      r0,#0
00005e  d0f9              BEQ      |L9.84|
;;;227          {
;;;228          }
;;;229    
;;;230          /* Send PTS0 */
;;;231          SCData = 0x10;
000060  2010              MOVS     r0,#0x10
000062  f888f888          STRB     r0,[r8,#0]  ; SCData
;;;232          USART_SendData(USART3, SCData);
000066  f898f898          LDRB     r1,[r8,#0]  ; SCData
00006a  4648              MOV      r0,r9
00006c  f7fff7ff          BL       USART_SendData
                  |L9.112|
;;;233          while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000070  2140              MOVS     r1,#0x40
000072  4648              MOV      r0,r9
000074  f7fff7ff          BL       USART_GetFlagStatus
000078  2800              CMP      r0,#0
00007a  d0f9              BEQ      |L9.112|
;;;234          {
;;;235          }
;;;236    
;;;237          /* Send PTS1 */
;;;238          SCData = SC_A2R.T[0]; 
00007c  78b8              LDRB     r0,[r7,#2]  ; SC_A2R
00007e  f888f888          STRB     r0,[r8,#0]  ; SCData
;;;239          USART_SendData(USART3, SCData);
000082  f898f898          LDRB     r1,[r8,#0]  ; SCData
000086  4648              MOV      r0,r9
000088  f7fff7ff          BL       USART_SendData
                  |L9.140|
;;;240          while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
00008c  2140              MOVS     r1,#0x40
00008e  4648              MOV      r0,r9
000090  f7fff7ff          BL       USART_GetFlagStatus
000094  2800              CMP      r0,#0
000096  d0f9              BEQ      |L9.140|
;;;241          {
;;;242          }
;;;243    
;;;244          /* Send PCK */

⌨️ 快捷键说明

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