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

📄 smartcard.txt

📁 STM32外部SRAM用作datamemery的程序 开发环境MDK
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 934] 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..\..\SRAM -I"D:\Program Files\MDK KEIL\ARM\INC\ST\STM32F10x" -D__MICROLIB --omf_browse=.\Obj\smartcard.crf ..\..\source\smartcard.c]
                          THUMB

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

                  SC_PowerCmd PROC
000000  4a04              LDR      r2,|L1.20|
000002  2800              CMP      r0,#0
000004  f04ff04f          MOV      r1,#0x40
000008  4610              MOV      r0,r2
00000a  d001              BEQ      |L1.16|
00000c  f7fff7ff          B.W      GPIO_SetBits
                  |L1.16|
000010  f7fff7ff          B.W      GPIO_ResetBits
                          ENDP

                  |L1.20|
000014  40011000          DCD      0x40011000

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

                  USART_ByteReceive PROC
;;;792    static ErrorStatus USART_ByteReceive(u8 *Data, u32 TimeOut)
;;;793    {
000000  e92de92d          PUSH     {r4-r8,lr}
000004  4606              MOV      r6,r0
000006  460d              MOV      r5,r1
;;;794      u32 Counter = 0;
000008  2400              MOVS     r4,#0
00000a  4f0a              LDR      r7,|L2.52|
;;;795    
;;;796      while((USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET) && (Counter != TimeOut))
00000c  e000              B        |L2.16|
                  |L2.14|
;;;797      {
;;;798        Counter++;
00000e  1c64              ADDS     r4,r4,#1
                  |L2.16|
000010  2120              MOVS     r1,#0x20              ;796
000012  4638              MOV      r0,r7                 ;796
000014  f7fff7ff          BL       USART_GetFlagStatus
000018  b908              CBNZ     r0,|L2.30|
00001a  42ac              CMP      r4,r5                 ;796
00001c  d1f7              BNE      |L2.14|
                  |L2.30|
;;;799      }
;;;800    
;;;801      if(Counter != TimeOut)
00001e  42ac              CMP      r4,r5
000020  d006              BEQ      |L2.48|
;;;802      {
;;;803        *Data = (u8)USART_ReceiveData(USART3);
000022  4638              MOV      r0,r7
000024  f7fff7ff          BL       USART_ReceiveData
000028  7030              STRB     r0,[r6,#0]
;;;804        return SUCCESS;    
00002a  2001              MOVS     r0,#1
                  |L2.44|
;;;805      }
;;;806      else 
;;;807      {
;;;808        return ERROR;
;;;809      }
;;;810    }
00002c  e8bde8bd          POP      {r4-r8,pc}
                  |L2.48|
000030  2000              MOVS     r0,#0                 ;808
000032  e7fb              B        |L2.44|
;;;811    
                          ENDP

                  |L2.52|
000034  40004800          DCD      0x40004800

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

                  SC_SendData PROC
;;;321    static void SC_SendData(SC_ADPU_Commands *SC_ADPU, SC_ADPU_Responce *SC_ResponceStatus)
;;;322    {
000000  e92de92d          PUSH     {r3-r9,lr}
000004  4604              MOV      r4,r0
;;;323      u32 i = 0;
000006  2000              MOVS     r0,#0
000008  460d              MOV      r5,r1                 ;322
;;;324      u8 locData = 0;
00000a  4601              MOV      r1,r0
00000c  9000              STR      r0,[sp,#0]
                  |L3.14|
;;;325    
;;;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      |L3.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  4e70              LDR      r6,|L3.476|
00001a  7569              STRB     r1,[r5,#0x15]         ;333
00001c  2201              MOVS     r2,#1
00001e  2140              MOVS     r1,#0x40
000020  4630              MOV      r0,r6
000022  f7fff7ff          BL       USART_DMACmd
;;;338    
;;;339      /* Send header -------------------------------------------------------------*/
;;;340      SCData = SC_ADPU->Header.CLA;
000026  f8dff8df          LDR      r8,|L3.480|
00002a  7820              LDRB     r0,[r4,#0]
00002c  f888f888          STRB     r0,[r8,#0]  ; SCData
;;;341      USART_SendData(USART3, SCData);
000030  f898f898          LDRB     r1,[r8,#0]  ; SCData
000034  4630              MOV      r0,r6
000036  f7fff7ff          BL       USART_SendData
                  |L3.58|
;;;342      while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
00003a  2140              MOVS     r1,#0x40
00003c  4630              MOV      r0,r6
00003e  f7fff7ff          BL       USART_GetFlagStatus
000042  2800              CMP      r0,#0
000044  d0f9              BEQ      |L3.58|
;;;343      {
;;;344      }  
;;;345      
;;;346      SCData = SC_ADPU->Header.INS;
000046  7860              LDRB     r0,[r4,#1]
000048  f888f888          STRB     r0,[r8,#0]  ; SCData
;;;347      USART_SendData(USART3, SCData);
00004c  f898f898          LDRB     r1,[r8,#0]  ; SCData
000050  4630              MOV      r0,r6
000052  f7fff7ff          BL       USART_SendData
                  |L3.86|
;;;348      while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000056  2140              MOVS     r1,#0x40
000058  4630              MOV      r0,r6
00005a  f7fff7ff          BL       USART_GetFlagStatus
00005e  2800              CMP      r0,#0
000060  d0f9              BEQ      |L3.86|
;;;349      {
;;;350      }
;;;351       
;;;352      SCData = SC_ADPU->Header.P1;
000062  78a0              LDRB     r0,[r4,#2]
000064  f888f888          STRB     r0,[r8,#0]  ; SCData
;;;353      USART_SendData(USART3, SCData);
000068  f898f898          LDRB     r1,[r8,#0]  ; SCData
00006c  4630              MOV      r0,r6
00006e  f7fff7ff          BL       USART_SendData
                  |L3.114|
;;;354      while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000072  2140              MOVS     r1,#0x40
000074  4630              MOV      r0,r6
000076  f7fff7ff          BL       USART_GetFlagStatus
00007a  2800              CMP      r0,#0
00007c  d0f9              BEQ      |L3.114|
;;;355      {
;;;356      } 
;;;357      
;;;358      SCData = SC_ADPU->Header.P2;
00007e  78e0              LDRB     r0,[r4,#3]
000080  f888f888          STRB     r0,[r8,#0]  ; SCData
;;;359      USART_SendData(USART3, SCData);
000084  f898f898          LDRB     r1,[r8,#0]  ; SCData
000088  4630              MOV      r0,r6
00008a  f7fff7ff          BL       USART_SendData
                  |L3.142|
;;;360      while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
00008e  2140              MOVS     r1,#0x40
000090  4630              MOV      r0,r6
000092  f7fff7ff          BL       USART_GetFlagStatus
000096  2800              CMP      r0,#0
000098  d0f9              BEQ      |L3.142|
;;;361      {
;;;362      }   
;;;363    
;;;364      /* Send body length to/from SC ---------------------------------------------*/
;;;365      if(SC_ADPU->Body.LC)
00009a  7920              LDRB     r0,[r4,#4]
00009c  b168              CBZ      r0,|L3.186|
;;;366      {
;;;367        SCData = SC_ADPU->Body.LC;
00009e  f888f888          STRB     r0,[r8,#0]  ; SCData
;;;368        USART_SendData(USART3, SCData);
0000a2  f898f898          LDRB     r1,[r8,#0]  ; SCData
0000a6  4630              MOV      r0,r6
0000a8  f7fff7ff          BL       USART_SendData
                  |L3.172|
;;;369        while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
0000ac  2140              MOVS     r1,#0x40
0000ae  4630              MOV      r0,r6
0000b0  f7fff7ff          BL       USART_GetFlagStatus
0000b4  2800              CMP      r0,#0
0000b6  d0f9              BEQ      |L3.172|
0000b8  e00e              B        |L3.216|
                  |L3.186|
;;;370        {
;;;371        }     
;;;372      }
;;;373      else if(SC_ADPU->Body.LE)
0000ba  7e60              LDRB     r0,[r4,#0x19]
0000bc  b160              CBZ      r0,|L3.216|
;;;374      { 
;;;375        SCData = SC_ADPU->Body.LE;
0000be  f888f888          STRB     r0,[r8,#0]  ; SCData
;;;376        USART_SendData(USART3, SCData);
0000c2  f898f898          LDRB     r1,[r8,#0]  ; SCData
0000c6  4630              MOV      r0,r6
0000c8  f7fff7ff          BL       USART_SendData
                  |L3.204|
;;;377        while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
0000cc  2140              MOVS     r1,#0x40
0000ce  4630              MOV      r0,r6
0000d0  f7fff7ff          BL       USART_GetFlagStatus
0000d4  2800              CMP      r0,#0
0000d6  d0f9              BEQ      |L3.204|
                  |L3.216|
;;;378        {
;;;379        }     
;;;380      }
;;;381      /* Flush the USART3 DR */
;;;382      (void)USART_ReceiveData(USART3);
0000d8  46b1              MOV      r9,r6
0000da  4630              MOV      r0,r6
0000dc  f7fff7ff          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)
0000e0  f44ff44f          MOV      r7,#0x4000
0000e4  4639              MOV      r1,r7
0000e6  4668              MOV      r0,sp
0000e8  f7fff7ff          BL       USART_ByteReceive
0000ec  2801              CMP      r0,#1
0000ee  d122              BNE      |L3.310|
;;;392      {
;;;393        if(((locData & (u8)0xF0) == 0x60) || ((locData & (u8)0xF0) == 0x90))
0000f0  f89df89d          LDRB     r0,[sp,#0]
0000f4  2106              MOVS     r1,#6
0000f6  ebb1ebb1          CMP      r1,r0,LSR #4
0000fa  d003              BEQ      |L3.260|
0000fc  2109              MOVS     r1,#9
0000fe  ebb1ebb1          CMP      r1,r0,LSR #4
000102  d10a              BNE      |L3.282|
                  |L3.260|
;;;394        {
;;;395          /* SW1 received */
;;;396          SC_ResponceStatus->SW1 = locData;
000104  7528              STRB     r0,[r5,#0x14]
;;;397    
;;;398          if((USART_ByteReceive(&locData, SC_Receive_Timeout)) == SUCCESS)
000106  4639              MOV      r1,r7
000108  4668              MOV      r0,sp
00010a  f7fff7ff          BL       USART_ByteReceive
00010e  2801              CMP      r0,#1
000110  d111              BNE      |L3.310|
;;;399          {
;;;400            /* SW2 received */
;;;401            SC_ResponceStatus->SW2 = locData;
000112  f89df89d          LDRB     r0,[sp,#0]
000116  7568              STRB     r0,[r5,#0x15]
000118  e00d              B        |L3.310|
                  |L3.282|
;;;402          }
;;;403        }
;;;404        else if (((locData & (u8)0xFE) == (((u8)~(SC_ADPU->Header.INS)) & (u8)0xFE))||((locData & (u8)0xFE) == (SC_ADPU->Header.INS & (u8)0xFE)))
00011a  7862              LDRB     r2,[r4,#1]
00011c  f000f000          AND      r1,r0,#0xfe
000120  43d3              MVNS     r3,r2
000122  f3c3f3c3          UBFX     r3,r3,#1,#7
000126  ebb1ebb1          CMP      r1,r3,LSL #1
00012a  d003              BEQ      |L3.308|
00012c  f002f002          AND      r2,r2,#0xfe
000130  4291              CMP      r1,r2
000132  d100              BNE      |L3.310|
                  |L3.308|
;;;405        {
;;;406          SC_ResponceStatus->Data[0] = locData;/* ACK received */
000134  7028              STRB     r0,[r5,#0]
                  |L3.310|

⌨️ 快捷键说明

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