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

📄 main.txt

📁 基于cortex arm stm32f103RB的智能卡(SmartCard)程序。编译通过
💻 TXT
📖 第 1 页 / 共 3 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 903] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\main.o --depend=.\Obj\main.d --device=DARMSTM --apcs=interwork -O2 -I..\..\..\FWLib\library\inc -I..\..\include -IC:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB -DVECT_TAB_FLASH --omf_browse=.\Obj\main.crf ..\..\source\main.c]
                          THUMB

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

                  Delay PROC
000000  b510              PUSH     {r4,lr}
000002  4c08              LDR      r4,|L1.36|
000004  6060              STR      r0,[r4,#4]  ; TimingDelay
000006  2001              MOVS     r0,#1
000008  f7fff7ff          BL       SysTick_CounterCmd
                  |L1.12|
00000c  6860              LDR      r0,[r4,#4]  ; TimingDelay
00000e  2800              CMP      r0,#0
000010  d1fc              BNE      |L1.12|
000012  1e80              SUBS     r0,r0,#2
000014  f7fff7ff          BL       SysTick_CounterCmd
000018  e8bde8bd          POP      {r4,lr}
00001c  2000              MOVS     r0,#0
00001e  f7fff7ff          B.W      SysTick_CounterCmd
                          ENDP

000022  0000              DCW      0x0000
                  |L1.36|
000024  00000000          DCD      ||.data||

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

                  SysTick_Config PROC
000000  b510              PUSH     {r4,lr}
000002  2004              MOVS     r0,#4
000004  f7fff7ff          BL       SysTick_CLKSourceConfig
000008  4803              LDR      r0,|L2.24|
00000a  f7fff7ff          BL       SysTick_SetReload
00000e  e8bde8bd          POP      {r4,lr}
000012  2001              MOVS     r0,#1
000014  f7fff7ff          B.W      SysTick_ITConfig
                          ENDP

                  |L2.24|
000018  000afc80          DCD      0x000afc80

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

                  main PROC
;;;57     int main(void)
;;;58     {
000000  e92de92d          PUSH     {r1-r11,lr}
;;;59       SC_State SCState = SC_POWER_OFF;
000004  2005              MOVS     r0,#5
;;;60     
;;;61     #ifdef DEBUG
;;;62       debug();
;;;63     #endif
;;;64          
;;;65       /* System Clocks Configuration */
;;;66       RCC_Configuration();
000006  9002              STR      r0,[sp,#8]
000008  f7fff7ff          BL       RCC_Configuration
00000c  2100              MOVS     r1,#0
00000e  f04ff04f          MOV      r0,#0x8000000
000012  f7fff7ff          BL       NVIC_SetVectorTable
000016  f44ff44f          MOV      r0,#0x600
00001a  f7fff7ff          BL       NVIC_PriorityGroupConfig
00001e  2028              MOVS     r0,#0x28
000020  f7fff7ff          BL       NVIC_ClearIRQChannelPendingBit
000024  2028              MOVS     r0,#0x28
000026  f88df88d          STRB     r0,[sp,#4]
00002a  2400              MOVS     r4,#0
00002c  f88df88d          STRB     r4,[sp,#5]
000030  f88df88d          STRB     r4,[sp,#6]
000034  2501              MOVS     r5,#1
000036  f88df88d          STRB     r5,[sp,#7]
00003a  a801              ADD      r0,sp,#4
00003c  f7fff7ff          BL       NVIC_Init
000040  2027              MOVS     r0,#0x27
000042  f88df88d          STRB     r0,[sp,#4]
000046  f88df88d          STRB     r5,[sp,#5]
00004a  a801              ADD      r0,sp,#4
00004c  f7fff7ff          BL       NVIC_Init
;;;67            
;;;68       /* NVIC configuration */
;;;69       NVIC_Configuration();
;;;70     
;;;71       /* SysTick configuration */
;;;72       SysTick_Config();
000050  f7fff7ff          BL       SysTick_Config
000054  f44ff44f          MOV      r0,#0x3c0
000058  f8adf8ad          STRH     r0,[sp,#4]
00005c  2003              MOVS     r0,#3
00005e  f88df88d          STRB     r0,[sp,#6]
000062  2010              MOVS     r0,#0x10
000064  f88df88d          STRB     r0,[sp,#7]
000068  a901              ADD      r1,sp,#4
00006a  48cc              LDR      r0,|L3.924|
00006c  f7fff7ff          BL       GPIO_Init
000070  03ae              LSLS     r6,r5,#14
000072  f8adf8ad          STRH     r6,[sp,#4]
000076  2004              MOVS     r0,#4
000078  f88df88d          STRB     r0,[sp,#7]
00007c  a901              ADD      r1,sp,#4
00007e  48c8              LDR      r0,|L3.928|
000080  f7fff7ff          BL       GPIO_Init
000084  210e              MOVS     r1,#0xe
000086  2004              MOVS     r0,#4
000088  f7fff7ff          BL       GPIO_EXTILineConfig
00008c  4630              MOV      r0,r6
00008e  f7fff7ff          BL       EXTI_ClearITPendingBit
000092  f88df88d          STRB     r4,[sp,#4]
000096  2008              MOVS     r0,#8
000098  f88df88d          STRB     r0,[sp,#5]
00009c  9600              STR      r6,[sp,#0]
00009e  f88df88d          STRB     r5,[sp,#6]
0000a2  4668              MOV      r0,sp
0000a4  f7fff7ff          BL       EXTI_Init
0000a8  f8dff8df          LDR      r11,|L3.932|
0000ac  4fbe              LDR      r7,|L3.936|
0000ae  f04ff04f          MOV      r8,#0xa4
0000b2  f04ff04f          MOV      r9,#2
0000b6  26a0              MOVS     r6,#0xa0
0000b8  f44ff44f          MOV      r10,#0x9000
0000bc  f1abf1ab          SUB      r5,r11,#0x1a
                  |L3.192|
;;;73     
;;;74       /* Configure the GPIO ports */
;;;75       GPIO_Configuration();
;;;76     
;;;77       /* Configure the EXTI Controller */
;;;78       EXTI_Configuration();
;;;79       
;;;80     /*-------------------------------- Idle task ---------------------------------*/
;;;81       while(1)
;;;82       {
;;;83         /* Loop while no Smartcard is detected */  
;;;84         while(CardInserted == 0)
0000c0  68b8              LDR      r0,[r7,#8]  ; CardInserted
0000c2  2800              CMP      r0,#0
0000c4  d0fc              BEQ      |L3.192|
;;;85         {
;;;86         }
;;;87            
;;;88         /* Start SC Demo ---------------------------------------------------------*/
;;;89         
;;;90         /* Wait A2R --------------------------------------------------------------*/
;;;91         SCState = SC_POWER_ON;
;;;92     
;;;93         SC_ADPU.Header.CLA = 0x00;
0000c6  9402              STR      r4,[sp,#8]
0000c8  702c              STRB     r4,[r5,#0]  ; SC_ADPU
;;;94         SC_ADPU.Header.INS = SC_GET_A2R;
0000ca  706c              STRB     r4,[r5,#1]  ; SC_ADPU
;;;95         SC_ADPU.Header.P1 = 0x00;
0000cc  70ac              STRB     r4,[r5,#2]  ; SC_ADPU
;;;96         SC_ADPU.Header.P2 = 0x00;
0000ce  70ec              STRB     r4,[r5,#3]  ; SC_ADPU
;;;97         SC_ADPU.Body.LC = 0x00;
0000d0  712c              STRB     r4,[r5,#4]  ; SC_ADPU
                  |L3.210|
;;;98        
;;;99         while(SCState != SC_ACTIVE_ON_T0) 
;;;100        {
;;;101          SC_Handler(&SCState, &SC_ADPU, &SC_Responce);
0000d2  4ab4              LDR      r2,|L3.932|
0000d4  a802              ADD      r0,sp,#8
0000d6  f1a2f1a2          SUB      r1,r2,#0x1a
0000da  f7fff7ff          BL       SC_Handler
0000de  f89df89d          LDRB     r0,[sp,#8]
0000e2  2804              CMP      r0,#4
0000e4  d1f5              BNE      |L3.210|
;;;102        }
;;;103    
;;;104        /* Apply the Procedure Type Selection (PTS) */
;;;105        SC_PTSConfig();
0000e6  f7fff7ff          BL       SC_PTSConfig
;;;106    
;;;107        /* Inserts delay(400ms) for Smartcard clock resynchronisation */
;;;108        Delay(40);
0000ea  2028              MOVS     r0,#0x28
0000ec  f7fff7ff          BL       Delay
;;;109    
;;;110        /* Select MF -------------------------------------------------------------*/    
;;;111        SC_ADPU.Header.CLA = SC_CLA_GSM11;
0000f0  702e              STRB     r6,[r5,#0]  ; SC_ADPU
;;;112        SC_ADPU.Header.INS = SC_SELECT_FILE;
0000f2  f885f885          STRB     r8,[r5,#1]  ; SC_ADPU
;;;113        SC_ADPU.Header.P1 = 0x00;
0000f6  70ac              STRB     r4,[r5,#2]  ; SC_ADPU
;;;114        SC_ADPU.Header.P2 = 0x00;
0000f8  70ec              STRB     r4,[r5,#3]  ; SC_ADPU
;;;115        SC_ADPU.Body.LC = 0x02;
0000fa  f885f885          STRB     r9,[r5,#4]  ; SC_ADPU
;;;116    
;;;117        for(i = 0; i < SC_ADPU.Body.LC; i++)
0000fe  4bab              LDR      r3,|L3.940|
000100  613c              STR      r4,[r7,#0x10]  ; i
                  |L3.258|
;;;118        {
;;;119          SC_ADPU.Body.Data[i] = MasterRoot[i];
000102  6938              LDR      r0,[r7,#0x10]  ; i
000104  5c19              LDRB     r1,[r3,r0]
000106  182a              ADDS     r2,r5,r0
000108  7151              STRB     r1,[r2,#5]
00010a  1c40              ADDS     r0,r0,#1
00010c  6138              STR      r0,[r7,#0x10]  ; i
00010e  7929              LDRB     r1,[r5,#4]  ; SC_ADPU
000110  4281              CMP      r1,r0
000112  d8f6              BHI      |L3.258|
000114  e003              B        |L3.286|
                  |L3.278|
;;;120        }
;;;121        while(i < LCmax) 
;;;122        {    
;;;123          SC_ADPU.Body.Data[i++] = 0;
000116  1829              ADDS     r1,r5,r0
000118  714c              STRB     r4,[r1,#5]
00011a  1c40              ADDS     r0,r0,#1
00011c  6138              STR      r0,[r7,#0x10]  ; i
                  |L3.286|
00011e  2814              CMP      r0,#0x14
000120  d3f9              BCC      |L3.278|
;;;124        }
;;;125        SC_ADPU.Body.LE = 0;
;;;126    
;;;127        SC_Handler(&SCState, &SC_ADPU, &SC_Responce);
000122  4aa0              LDR      r2,|L3.932|
000124  766c              STRB     r4,[r5,#0x19]  ; SC_ADPU
000126  f1a2f1a2          SUB      r1,r2,#0x1a
00012a  a802              ADD      r0,sp,#8
00012c  f7fff7ff          BL       SC_Handler
;;;128    
;;;129        /* Get Response on MF ----------------------------------------------------*/    
;;;130        if(SC_Responce.SW1 == SC_DF_SELECTED)
000130  f89bf89b          LDRB     r0,[r11,#0x14]  ; SC_Responce
000134  289f              CMP      r0,#0x9f
000136  d10e              BNE      |L3.342|
;;;131        {
;;;132          SC_ADPU.Header.CLA = SC_CLA_GSM11;
000138  702e              STRB     r6,[r5,#0]  ; SC_ADPU
;;;133          SC_ADPU.Header.INS = SC_GET_RESPONCE;
00013a  20c0              MOVS     r0,#0xc0
00013c  7068              STRB     r0,[r5,#1]  ; SC_ADPU
;;;134          SC_ADPU.Header.P1 = 0x00;
00013e  70ac              STRB     r4,[r5,#2]  ; SC_ADPU
;;;135          SC_ADPU.Header.P2 = 0x00;
000140  70ec              STRB     r4,[r5,#3]  ; SC_ADPU
;;;136          SC_ADPU.Body.LC = 0x00;
000142  712c              STRB     r4,[r5,#4]  ; SC_ADPU
;;;137          SC_ADPU.Body.LE = SC_Responce.SW2;
000144  f89bf89b          LDRB     r0,[r11,#0x15]  ; SC_Responce
;;;138    
;;;139          SC_Handler(&SCState, &SC_ADPU, &SC_Responce);
000148  4a96              LDR      r2,|L3.932|
00014a  7668              STRB     r0,[r5,#0x19]  ; SC_ADPU
00014c  f1a2f1a2          SUB      r1,r2,#0x1a
000150  a802              ADD      r0,sp,#8
000152  f7fff7ff          BL       SC_Handler
                  |L3.342|
;;;140        }
;;;141    
;;;142        /* Select ICCID ----------------------------------------------------------*/    
;;;143        if(((SC_Responce.SW1 << 8) | (SC_Responce.SW2)) == SC_OP_TERMINATED)
000156  f8bbf8bb          LDRH     r0,[r11,#0x14]  ; SC_Responce
00015a  ba40              REV16    r0,r0
00015c  4550              CMP      r0,r10
00015e  d126              BNE      |L3.430|
;;;144        {
;;;145          /* Check if the CHV1 is enabled */   
;;;146          if((SC_Responce.Data[13] & 0x80) == 0x00)
000160  f89bf89b          LDRB     r0,[r11,#0xd]  ; SC_Responce
000164  0600              LSLS     r0,r0,#24
000166  d401              BMI      |L3.364|
;;;147          {
;;;148            CHV1Status = 0x01;
000168  2001              MOVS     r0,#1
00016a  60f8              STR      r0,[r7,#0xc]  ; CHV1Status
                  |L3.364|

⌨️ 快捷键说明

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