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

📄 smartcard.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;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      |L8.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  4e6b              LDR      r6,|L8.456|
00001a  7569              STRB     r1,[r5,#0x15]         ;333
00001c  2201              MOVS     r2,#1
00001e  2140              MOVS     r1,#0x40
000020  4630              MOV      r0,r6
000022  f7fffffe          BL       USART_DMACmd
;;;338    
;;;339      /* Send header -------------------------------------------------------------*/
;;;340      SCData = SC_ADPU->Header.CLA;
000026  4f69              LDR      r7,|L8.460|
000028  7820              LDRB     r0,[r4,#0]
00002a  7038              STRB     r0,[r7,#0]
;;;341      USART_SendData(USART3, SCData);
00002c  7839              LDRB     r1,[r7,#0]  ; SCData
00002e  4630              MOV      r0,r6
000030  f7fffffe          BL       USART_SendData
                  |L8.52|
;;;342      while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000034  2140              MOVS     r1,#0x40
000036  4630              MOV      r0,r6
000038  f7fffffe          BL       USART_GetFlagStatus
00003c  2800              CMP      r0,#0
00003e  d0f9              BEQ      |L8.52|
;;;343      {
;;;344      }  
;;;345      
;;;346      SCData = SC_ADPU->Header.INS;
000040  7860              LDRB     r0,[r4,#1]
000042  7038              STRB     r0,[r7,#0]
;;;347      USART_SendData(USART3, SCData);
000044  7839              LDRB     r1,[r7,#0]  ; SCData
000046  4630              MOV      r0,r6
000048  f7fffffe          BL       USART_SendData
                  |L8.76|
;;;348      while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
00004c  2140              MOVS     r1,#0x40
00004e  4630              MOV      r0,r6
000050  f7fffffe          BL       USART_GetFlagStatus
000054  2800              CMP      r0,#0
000056  d0f9              BEQ      |L8.76|
;;;349      {
;;;350      }
;;;351       
;;;352      SCData = SC_ADPU->Header.P1;
000058  78a0              LDRB     r0,[r4,#2]
00005a  7038              STRB     r0,[r7,#0]
;;;353      USART_SendData(USART3, SCData);
00005c  7839              LDRB     r1,[r7,#0]  ; SCData
00005e  4630              MOV      r0,r6
000060  f7fffffe          BL       USART_SendData
                  |L8.100|
;;;354      while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000064  2140              MOVS     r1,#0x40
000066  4630              MOV      r0,r6
000068  f7fffffe          BL       USART_GetFlagStatus
00006c  2800              CMP      r0,#0
00006e  d0f9              BEQ      |L8.100|
;;;355      {
;;;356      } 
;;;357      
;;;358      SCData = SC_ADPU->Header.P2;
000070  78e0              LDRB     r0,[r4,#3]
000072  7038              STRB     r0,[r7,#0]
;;;359      USART_SendData(USART3, SCData);
000074  7839              LDRB     r1,[r7,#0]  ; SCData
000076  4630              MOV      r0,r6
000078  f7fffffe          BL       USART_SendData
                  |L8.124|
;;;360      while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
00007c  2140              MOVS     r1,#0x40
00007e  4630              MOV      r0,r6
000080  f7fffffe          BL       USART_GetFlagStatus
000084  2800              CMP      r0,#0
000086  d0f9              BEQ      |L8.124|
;;;361      {
;;;362      }   
;;;363    
;;;364      /* Send body length to/from SC ---------------------------------------------*/
;;;365      if(SC_ADPU->Body.LC)
000088  7920              LDRB     r0,[r4,#4]
00008a  b158              CBZ      r0,|L8.164|
;;;366      {
;;;367        SCData = SC_ADPU->Body.LC;
00008c  7038              STRB     r0,[r7,#0]
;;;368        USART_SendData(USART3, SCData);
00008e  7839              LDRB     r1,[r7,#0]  ; SCData
000090  4630              MOV      r0,r6
000092  f7fffffe          BL       USART_SendData
                  |L8.150|
;;;369        while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000096  2140              MOVS     r1,#0x40
000098  4630              MOV      r0,r6
00009a  f7fffffe          BL       USART_GetFlagStatus
00009e  2800              CMP      r0,#0
0000a0  d0f9              BEQ      |L8.150|
0000a2  e00c              B        |L8.190|
                  |L8.164|
;;;370        {
;;;371        }     
;;;372      }
;;;373      else if(SC_ADPU->Body.LE)
0000a4  7e60              LDRB     r0,[r4,#0x19]
0000a6  b150              CBZ      r0,|L8.190|
;;;374      { 
;;;375        SCData = SC_ADPU->Body.LE;
0000a8  7038              STRB     r0,[r7,#0]
;;;376        USART_SendData(USART3, SCData);
0000aa  7839              LDRB     r1,[r7,#0]  ; SCData
0000ac  4630              MOV      r0,r6
0000ae  f7fffffe          BL       USART_SendData
                  |L8.178|
;;;377        while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
0000b2  2140              MOVS     r1,#0x40
0000b4  4630              MOV      r0,r6
0000b6  f7fffffe          BL       USART_GetFlagStatus
0000ba  2800              CMP      r0,#0
0000bc  d0f9              BEQ      |L8.178|
                  |L8.190|
;;;378        {
;;;379        }     
;;;380      }
;;;381      /* Flush the USART3 DR */
;;;382      (void)USART_ReceiveData(USART3);
0000be  46b2              MOV      r10,r6
0000c0  4630              MOV      r0,r6
0000c2  f7fffffe          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)
0000c6  f44f4980          MOV      r9,#0x4000
0000ca  4649              MOV      r1,r9
0000cc  4668              MOV      r0,sp
0000ce  f7fffffe          BL       USART_ByteReceive
0000d2  2801              CMP      r0,#1
0000d4  d122              BNE      |L8.284|
;;;392      {
;;;393        if(((locData & (u8)0xF0) == 0x60) || ((locData & (u8)0xF0) == 0x90))
0000d6  f89d0000          LDRB     r0,[sp,#0]
0000da  2106              MOVS     r1,#6
0000dc  ebb11f10          CMP      r1,r0,LSR #4
0000e0  d003              BEQ      |L8.234|
0000e2  2109              MOVS     r1,#9
0000e4  ebb11f10          CMP      r1,r0,LSR #4
0000e8  d10a              BNE      |L8.256|
                  |L8.234|
;;;394        {
;;;395          /* SW1 received */
;;;396          SC_ResponceStatus->SW1 = locData;
0000ea  7528              STRB     r0,[r5,#0x14]
;;;397    
;;;398          if((USART_ByteReceive(&locData, SC_Receive_Timeout)) == SUCCESS)
0000ec  4649              MOV      r1,r9
0000ee  4668              MOV      r0,sp
0000f0  f7fffffe          BL       USART_ByteReceive
0000f4  2801              CMP      r0,#1
0000f6  d111              BNE      |L8.284|
;;;399          {
;;;400            /* SW2 received */
;;;401            SC_ResponceStatus->SW2 = locData;
0000f8  f89d0000          LDRB     r0,[sp,#0]
0000fc  7568              STRB     r0,[r5,#0x15]
0000fe  e00d              B        |L8.284|
                  |L8.256|
;;;402          }
;;;403        }
;;;404        else if (((locData & (u8)0xFE) == (((u8)~(SC_ADPU->Header.INS)) & (u8)0xFE))||((locData & (u8)0xFE) == (SC_ADPU->Header.INS & (u8)0xFE)))
000100  7862              LDRB     r2,[r4,#1]
000102  f00001fe          AND      r1,r0,#0xfe
000106  43d3              MVNS     r3,r2
000108  f3c30346          UBFX     r3,r3,#1,#7
00010c  ebb10f43          CMP      r1,r3,LSL #1
000110  d003              BEQ      |L8.282|
000112  f00202fe          AND      r2,r2,#0xfe
000116  4291              CMP      r1,r2
000118  d100              BNE      |L8.284|
                  |L8.282|
;;;405        {
;;;406          SC_ResponceStatus->Data[0] = locData;/* ACK received */
00011a  7028              STRB     r0,[r5,#0]
                  |L8.284|
;;;407        }
;;;408      }
;;;409    
;;;410      /* If no status bytes received ---------------------------------------------*/
;;;411      if(SC_ResponceStatus->SW1 == 0x00)
00011c  7d28              LDRB     r0,[r5,#0x14]
00011e  2800              CMP      r0,#0
000120  d14c              BNE      |L8.444|
;;;412      {
;;;413        /* Send body data to SC--------------------------------------------------*/
;;;414        if (SC_ADPU->Body.LC)
000122  7920              LDRB     r0,[r4,#4]
000124  b1f8              CBZ      r0,|L8.358|
000126  46b8              MOV      r8,r7                 ;340
;;;415        {
;;;416          for(i = 0; i < SC_ADPU->Body.LC; i++)
000128  2600              MOVS     r6,#0
00012a  4657              MOV      r7,r10                ;337
00012c  e00f              B        |L8.334|
                  |L8.302|
;;;417          {
;;;418            SCData = SC_ADPU->Body.Data[i];
00012e  19a0              ADDS     r0,r4,r6
000130  7941              LDRB     r1,[r0,#5]
000132  f8881000          STRB     r1,[r8,#0]
;;;419            
;;;420            USART_SendData(USART3, SCData);
000136  f8981000          LDRB     r1,[r8,#0]  ; SCData
00013a  4638              MOV      r0,r7
00013c  f7fffffe          BL       USART_SendData
                  |L8.320|
;;;421            while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
000140  2140              MOVS     r1,#0x40
000142  4638              MOV      r0,r7
000144  f7fffffe          BL       USART_GetFlagStatus
000148  2800              CMP      r0,#0
00014a  d0f9              BEQ      |L8.320|
00014c  1c76              ADDS     r6,r6,#1              ;416
                  |L8.334|
00014e  7920              LDRB     r0,[r4,#4]            ;416
000150  42b0              CMP      r0,r6                 ;416
000152  d8ec              BHI      |L8.302|
;;;422            {
;;;423            } 
;;;424          }
;;;425          /* Flush the USART3 DR */
;;;426          (void)USART_ReceiveData(USART3);
000154  4638              MOV      r0,r7
000156  f7fffffe          BL       USART_ReceiveData
;;;427          /* Disable the DMA Receive (Reset DMAR bit only) */  
;;;428          USART_DMACmd(USART3, USART_DMAReq_Rx, DISABLE);
00015a  2200              MOVS     r2,#0
00015c  2140              MOVS     r1,#0x40
00015e  4638              MOV      r0,r7
000160  f7fffffe          BL       USART_DMACmd
000164  e011              B        |L8.394|
                  |L8.358|
;;;429        }
;;;430    
;;;431        /* Or receive body data from SC ------------------------------------------*/
;;;432        else if (SC_ADPU->Body.LE)
000166  7e60              LDRB     r0,[r4,#0x19]
000168  b178              CBZ      r0,|L8.394|
;;;433        {
;;;434          for(i = 0; i < SC_ADPU->Body.LE; i++)
00016a  2600              MOVS     r6,#0
00016c  464f              MOV      r7,r9                 ;391
00016e  e009              B        |L8.388|
                  |L8.368|
;;;435          {
;;;436            if(USART_ByteReceive(&locData, SC_Receive_Timeout) == SUCCESS)
000170  4639              MOV      r1,r7
000172  4668              MOV      r0,sp
000174  f7fffffe          BL       USART_ByteReceive
000178  2801              CMP      r0,#1
00017a  d102              BNE      |L8.386|
;;;437            {
;;;438              SC_ResponceStatus->Data[i] = locData;
00017c  f89d0000          LDRB     r0,[sp,#0]
000180  55a8              STRB     r0,[r5,r6]
                  |L8.386|
000182  1c76              ADDS     r6,r6,#1              ;434
                  |L8.388|
000184  7e60              LDRB     r0,[r4,#0x19]         ;434
000186  42b0              CMP      r0,r6                 ;434
000188  d8f2              BHI      |L8.368|
                  |L8.394|
;;;439            }
;;;440          }
;;;441        }
;;;442        /* Wait SW1 --------------------------------------------------------------*/
;;;443        i = 0;
00018a  2400              MOVS     r4,#0
00018c  464e              MOV      r6,r9                 ;391
                  |L8.398|
;;;444        while(i < 10)
;;;445        {
;;;446          if(USART_ByteReceive(&locData, SC_Receive_Timeout) == SUCCESS)
00018e  4631              MOV      r1,r6
000190  4668              MOV      r0,sp
000192  f7fffffe          BL       USART_ByteReceive
000196  2801              CMP      r0,#1
000198  d103              BNE      |L8.418|
;;;447          {
;;;448            SC_ResponceStatus->SW1 = locData;
00019a  f89d0000          LDRB     r0,[sp,#0]

⌨️ 快捷键说明

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