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

📄 smartcard.txt

📁 STM32外部SRAM用作datamemery的程序 开发环境MDK
💻 TXT
📖 第 1 页 / 共 5 页
字号:
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                 ;578
0000cc  d1ca              BNE      |L4.100|
;;;602      }
;;;603    
;;;604      for (i = 0; i < SC_A2R.Hlength; i++)
0000ce  2100              MOVS     r1,#0
0000d0  e008              B        |L4.228|
;;;605      {
;;;606        SC_A2R.H[i] = card[i + 2 + SC_A2R.Tlength];
0000d2  bf00              NOP      
                  |L4.212|
0000d4  f894f894          LDRB     r3,[r4,#0x2a]  ; SC_A2R
0000d8  1c8a              ADDS     r2,r1,#2
0000da  4403              ADD      r3,r3,r0
0000dc  5c9a              LDRB     r2,[r3,r2]
0000de  1863              ADDS     r3,r4,r1
0000e0  759a              STRB     r2,[r3,#0x16]
0000e2  1c49              ADDS     r1,r1,#1              ;604
                  |L4.228|
0000e4  f894f894          LDRB     r2,[r4,#0x2b]         ;604  ; SC_A2R
0000e8  428a              CMP      r2,r1                 ;604
0000ea  d8f3              BHI      |L4.212|
;;;607      }
;;;608    
;;;609      return (u8)protocol;
0000ec  b2f8              UXTB     r0,r7
;;;610    }
0000ee  e8bde8bd          POP      {r4-r8,pc}
;;;611    
                          ENDP

0000f2  0000              DCW      0x0000
                  |L4.244|
0000f4  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
;;;619    static void SC_Init(void)
;;;620    {
000000  e92de92d          PUSH     {r4-r8,lr}
000004  b088              SUB      sp,sp,#0x20
;;;621      GPIO_InitTypeDef GPIO_InitStructure;
;;;622      USART_InitTypeDef USART_InitStructure;
;;;623      USART_ClockInitTypeDef USART_ClockInitStructure;  
;;;624      
;;;625      /* Enable GPIO_3_5V, GPIORESET and GPIO_CMDVCC clocks */
;;;626      RCC_APB2PeriphClockCmd(RCC_APB2Periph_3_5V | RCC_APB2Periph_RESET |
000006  2101              MOVS     r1,#1
000008  2018              MOVS     r0,#0x18
00000a  f7fff7ff          BL       RCC_APB2PeriphClockCmd
;;;627                             RCC_APB2Periph_CMDVCC, ENABLE);
;;;628                             
;;;629      /* Enable USART3 clock */
;;;630      RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
00000e  2101              MOVS     r1,#1
000010  0488              LSLS     r0,r1,#18
000012  f7fff7ff          BL       RCC_APB1PeriphClockCmd
;;;631                               
;;;632      /* Configure USART3 CK(PB.12) as alternate function push-pull */
;;;633      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
000016  f44ff44f          MOV      r5,#0x1000
00001a  f8adf8ad          STRH     r5,[sp,#0x1c]
;;;634      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
00001e  2018              MOVS     r0,#0x18
000020  f88df88d          STRB     r0,[sp,#0x1f]
;;;635      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000024  2003              MOVS     r0,#3
;;;636      GPIO_Init(GPIOB, &GPIO_InitStructure);
000026  4f3c              LDR      r7,|L6.280|
000028  f88df88d          STRB     r0,[sp,#0x1e]         ;635
00002c  a907              ADD      r1,sp,#0x1c
00002e  4638              MOV      r0,r7
000030  f7fff7ff          BL       GPIO_Init
;;;637      
;;;638      /* Configure USART3 Tx (PB.10) as alternate function open-drain */
;;;639      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
000034  10ae              ASRS     r6,r5,#2
000036  f8adf8ad          STRH     r6,[sp,#0x1c]
;;;640      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
00003a  201c              MOVS     r0,#0x1c
00003c  f88df88d          STRB     r0,[sp,#0x1f]
;;;641      GPIO_Init(GPIOB, &GPIO_InitStructure);
000040  a907              ADD      r1,sp,#0x1c
000042  4638              MOV      r0,r7
000044  f7fff7ff          BL       GPIO_Init
;;;642    
;;;643      /* Configure Smartcard Reset  */
;;;644      GPIO_InitStructure.GPIO_Pin = SC_RESET;
000048  106c              ASRS     r4,r5,#1
00004a  f8adf8ad          STRH     r4,[sp,#0x1c]
;;;645      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
00004e  2010              MOVS     r0,#0x10
000050  f88df88d          STRB     r0,[sp,#0x1f]
;;;646      GPIO_Init(GPIO_RESET, &GPIO_InitStructure);
000054  a907              ADD      r1,sp,#0x1c
000056  4638              MOV      r0,r7
000058  f7fff7ff          BL       GPIO_Init
;;;647    
;;;648      /* Configure Smartcard 3/5V  */
;;;649      GPIO_InitStructure.GPIO_Pin = SC_3_5V;
00005c  2001              MOVS     r0,#1
00005e  f8adf8ad          STRH     r0,[sp,#0x1c]
;;;650      GPIO_Init(GPIO_3_5V, &GPIO_InitStructure);
000062  a907              ADD      r1,sp,#0x1c
000064  4638              MOV      r0,r7
000066  f7fff7ff          BL       GPIO_Init
;;;651    
;;;652      /* Configure Smartcard CMDVCC  */
;;;653      GPIO_InitStructure.GPIO_Pin = SC_CMDVCC;
00006a  2040              MOVS     r0,#0x40
00006c  f8adf8ad          STRH     r0,[sp,#0x1c]
;;;654      GPIO_Init(GPIO_CMDVCC, &GPIO_InitStructure);
000070  a907              ADD      r1,sp,#0x1c
000072  482a              LDR      r0,|L6.284|
000074  f7fff7ff          BL       GPIO_Init
;;;655        
;;;656    /* USART3 configuration ------------------------------------------------------*/
;;;657      /* USART3 configured as follow:
;;;658            - Word Length = 9 Bits
;;;659            - 0.5 Stop Bit
;;;660            - Even parity
;;;661            - BaudRate = 9677 baud
;;;662            - Hardware flow control disabled (RTS and CTS signals)
;;;663            - Tx and Rx enabled
;;;664            - USART Clock enabled
;;;665      */
;;;666    
;;;667      /* USART Clock set to 3.6 MHz (PCLK1 (36 MHZ) / 10) */
;;;668      USART_SetPrescaler(USART3, 0x05);
000078  f8dff8df          LDR      r8,|L6.288|
00007c  2105              MOVS     r1,#5
00007e  4640              MOV      r0,r8
000080  f7fff7ff          BL       USART_SetPrescaler
;;;669      
;;;670      /* USART Guard Time set to 16 Bit */
;;;671      USART_SetGuardTime(USART3, 16);
000084  2110              MOVS     r1,#0x10
000086  4640              MOV      r0,r8
000088  f7fff7ff          BL       USART_SetGuardTime
;;;672      
;;;673      USART_ClockInitStructure.USART_Clock = USART_Clock_Enable;
00008c  f8adf8ad          STRH     r4,[sp,#4]
;;;674      USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
000090  2400              MOVS     r4,#0
;;;675      USART_ClockInitStructure.USART_CPHA = USART_CPHA_1Edge;
000092  f8adf8ad          STRH     r4,[sp,#8]
;;;676      USART_ClockInitStructure.USART_LastBit = USART_LastBit_Enable;
000096  1128              ASRS     r0,r5,#4
000098  f8adf8ad          STRH     r0,[sp,#0xa]
00009c  f8adf8ad          STRH     r4,[sp,#6]            ;674
;;;677      USART_ClockInit(USART3, &USART_ClockInitStructure);
0000a0  a901              ADD      r1,sp,#4
0000a2  4640              MOV      r0,r8
0000a4  f7fff7ff          BL       USART_ClockInit
;;;678    
;;;679    
;;;680      USART_InitStructure.USART_BaudRate = 9677;
0000a8  f242f242          MOV      r0,#0x25cd
;;;681      USART_InitStructure.USART_WordLength = USART_WordLength_9b;
0000ac  9003              STR      r0,[sp,#0xc]
0000ae  f8adf8ad          STRH     r5,[sp,#0x10]
;;;682      USART_InitStructure.USART_StopBits = USART_StopBits_1_5;
0000b2  f44ff44f          MOV      r0,#0x3000
0000b6  f8adf8ad          STRH     r0,[sp,#0x12]
;;;683      USART_InitStructure.USART_Parity = USART_Parity_Even;
0000ba  f8adf8ad          STRH     r6,[sp,#0x14]
;;;684      USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
0000be  200c              MOVS     r0,#0xc
0000c0  f8adf8ad          STRH     r0,[sp,#0x16]
;;;685      USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
0000c4  f8adf8ad          STRH     r4,[sp,#0x18]
;;;686      USART_Init(USART3, &USART_InitStructure); 
0000c8  a903              ADD      r1,sp,#0xc
0000ca  4640              MOV      r0,r8
0000cc  f7fff7ff          BL       USART_Init
;;;687    
;;;688      /* Enable the USART3 Parity Error Interrupt */
;;;689      USART_ITConfig(USART3, USART_IT_PE, ENABLE);
0000d0  2201              MOVS     r2,#1
0000d2  2128              MOVS     r1,#0x28
0000d4  4640              MOV      r0,r8
0000d6  f7fff7ff          BL       USART_ITConfig
;;;690    
;;;691      /* Enable the USART3 Framing Error Interrupt */
;;;692      USART_ITConfig(USART3, USART_IT_ERR, ENABLE);
0000da  2201              MOVS     r2,#1
0000dc  2160              MOVS     r1,#0x60
0000de  4640              MOV      r0,r8
0000e0  f7fff7ff          BL       USART_ITConfig
;;;693    
;;;694      /* Enable USART3 */
;;;695      USART_Cmd(USART3, ENABLE);
0000e4  2101              MOVS     r1,#1
0000e6  4640              MOV      r0,r8
0000e8  f7fff7ff          BL       USART_Cmd
;;;696    
;;;697      /* Enable the NACK Transmission */
;;;698      USART_SmartCardNACKCmd(USART3, ENABLE);
0000ec  2101              MOVS     r1,#1
0000ee  4640              MOV      r0,r8
0000f0  f7fff7ff          BL       USART_SmartCardNACKCmd
;;;699    
;;;700      /* Enable the Smartcard Interface */
;;;701      USART_SmartCardCmd(USART3, ENABLE);
0000f4  2101              MOVS     r1,#1
0000f6  4640              MOV      r0,r8
0000f8  f7fff7ff          BL       USART_SmartCardCmd
;;;702      
;;;703      /* Set RSTIN HIGH */  
;;;704      SC_Reset(Bit_SET);
0000fc  2001              MOVS     r0,#1
0000fe  f7fff7ff          BL       SC_Reset
000102  2101              MOVS     r1,#1
000104  4638              MOV      r0,r7
000106  f7fff7ff          BL       GPIO_SetBits
;;;705      
;;;706      /* Select 5V */ 
;;;707      SC_VoltageConfig(SC_Voltage_5V);
;;;708      
;;;709      /* Disable CMDVCC */
;;;710      SC_PowerCmd(DISABLE);
00010a  2000              MOVS     r0,#0
00010c  f7fff7ff          BL       SC_PowerCmd
;;;711    }
000110  b008              ADD      sp,sp,#0x20
000112  e8bde8bd          POP      {r4-r8,pc}
;;;712    
                          ENDP

000116  0000              DCW      0x0000
                  |L6.280|
000118  40010c00          DCD      0x40010c00
                  |L6.284|
00011c  40011000          DCD      0x40011000
                  |L6.288|
000120  40004800          DCD      0x40004800

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

                  SC_Handler PROC
;;;62     void SC_Handler(SC_State *SCState, SC_ADPU_Commands *SC_ADPU, SC_ADPU_Responce *SC_Response)
;;;63     {
000000  e92de92d          PUSH     {r4-r8,lr}
000004  4605              MOV      r5,r0
;;;64       u32 i = 0;
;;;65     
;;;66       switch(*SCState)
000006  782b              LDRB     r3,[r5,#0]
000008  4608              MOV      r0,r1                 ;63
00000a  2400              MOVS     r4,#0                 ;64
00000c  2605              MOVS     r6,#5
00000e  4f34              LDR      r7,|L7.224|
000010  4611              MOV      r1,r2                 ;63
000012  2b06              CMP      r3,#6
000014  d262              BCS      |L7.220|
000016  e8dfe8df          TBB      [pc,r3]
00001a  03236138          DCB      0x03,0x23,0x61,0x38
00001e  4246              DCB      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      |L7.134|
;;;70           {
;;;71             /* Smartcard intialization ------------------------------------------*/
;;;72             SC_Init();
000026  f7fff7ff          BL       SC_Init
00002a  482e              LDR      r0,|L7.228|
00002c  2100              MOVS     r1,#0
                  |L7.46|
;;;73     
;;;74             /* Reset Data from SC buffer -----------------------------------------*/
;;;75             for (i = 0; i < 40; i++)
;;;76             {
;;;77               SC_ATR_Table[i] = 0;

⌨️ 快捷键说明

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