; generated by ARM C/C++ Compiler, 5.03 [Build 24]
; commandline ArmCC [--list --debug -c --asm --interleave -o..\OBJ\nvic_exit.o --asm_dir=..\LIST\ --list_dir=..\LIST\ --depend=..\OBJ\nvic_exit.d --cpu=Cortex-M3 --apcs=interwork -O0 -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\CMSIS\CM3\CoreSupport -I..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x -I..\..\USER\INC -IC:\Keil\ARM\RV31\INC -IC:\Keil\ARM\CMSIS\Include -IC:\Keil\ARM\Inc\ST\STM32F10x -D__MICROLIB -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=..\OBJ\nvic_exit.crf ..\..\USER\SRC\Nvic_Exit.c]
                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  NVIC_Config PROC
;;;119    //ϵͳжϹ
;;;120    void NVIC_Config(uint32_t NVIC_PriorityGroup)
000000  b510              PUSH     {r4,lr}
;;;121    { 
000002  4604              MOV      r4,r0
;;;122    	//ȼ飺ռȼ0λ,ȼ4λ,оƬλĬΪ0
;;;123    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup);
000004  4620              MOV      r0,r4
000006  f7fffffe          BL       NVIC_PriorityGroupConfig
;;;124    	//λúƫ,оƬλĬFlah
;;;125    #ifdef  VECT_TAB_RAM  
;;;126    	NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 	//λRAM
;;;127    #else  /* VECT_TAB_FLASH  */
;;;128    	NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   //λFLASH
00000a  2100              MOVS     r1,#0
00000c  f04f6000          MOV      r0,#0x8000000
000010  f7fffffe          BL       NVIC_SetVectorTable
;;;129    #endif
;;;130    }
000014  bd10              POP      {r4,pc}
;;;131    
                          ENDP

                  GetGpioPortNumber PROC
;;;132    static u8 GetGpioPortNumber(GPIO_TypeDef* gpio_port)
000016  4602              MOV      r2,r0
;;;133    {	 
;;;134    	u8 i = 0;
000018  2100              MOVS     r1,#0
;;;135    	//
;;;136    	assert_param(IS_GPIO_PIN(gpio_port)); 
;;;137    	for(i = 0; i < 6; i ++)
00001a  bf00              NOP      
00001c  e008              B        |L1.48|
                  |L1.30|
;;;138    	{											
;;;139    		if(gpio_port == GPIO_PORT[i])
00001e  4840              LDR      r0,|L1.288|
000020  f8500021          LDR      r0,[r0,r1,LSL #2]
000024  4290              CMP      r0,r2
000026  d101              BNE      |L1.44|
;;;140    		{
;;;141    			return i;	
000028  4608              MOV      r0,r1
                  |L1.42|
;;;142    		}								
;;;143    	}
;;;144    	return 0;									//ִе
;;;145    }
00002a  4770              BX       lr
                  |L1.44|
00002c  1c48              ADDS     r0,r1,#1              ;137
00002e  b2c1              UXTB     r1,r0                 ;137
                  |L1.48|
000030  2906              CMP      r1,#6                 ;137
000032  dbf4              BLT      |L1.30|
000034  2000              MOVS     r0,#0                 ;144
000036  e7f8              B        |L1.42|
;;;146    static u8 GetGpioPinNumber(u16 gpio_pin)
                          ENDP

                  GetGpioPinNumber PROC
000038  4602              MOV      r2,r0
;;;147    {	 
;;;148    	u8 i = 0;
00003a  2100              MOVS     r1,#0
;;;149    	//
;;;150    	assert_param(IS_GPIO_ALL_PERIPH(gpio_pin));
;;;151    	for(i = 0; i < 16; i ++)
00003c  bf00              NOP      
00003e  e008              B        |L1.82|
                  |L1.64|
;;;152    	{											
;;;153    		if(gpio_pin == GPIO_Pin[i])
000040  4838              LDR      r0,|L1.292|
000042  f8300011          LDRH     r0,[r0,r1,LSL #1]
000046  4290              CMP      r0,r2
000048  d101              BNE      |L1.78|
;;;154    		{
;;;155    			return i;	
00004a  4608              MOV      r0,r1
                  |L1.76|
;;;156    		}								
;;;157    	}
;;;158    	return 0;									//ִе
;;;159    }
00004c  4770              BX       lr
                  |L1.78|
00004e  1c48              ADDS     r0,r1,#1              ;151
000050  b2c1              UXTB     r1,r0                 ;151
                  |L1.82|
000052  2910              CMP      r1,#0x10              ;151
000054  dbf4              BLT      |L1.64|
000056  2000              MOVS     r0,#0                 ;158
000058  e7f8              B        |L1.76|
;;;160    /*************************************************
                          ENDP

                  GpioInit PROC
;;;178    *************************************************/
;;;179    void GpioInit(GPIO_TypeDef* gpio_port, 
00005a  e92d43f8          PUSH     {r3-r9,lr}
;;;180    			   u16 gpio_pin,
;;;181    			   GPIOMode_TypeDef gpio_pin_mode,
;;;182    			   GPIOSpeed_TypeDef gpio_pin_speed)
;;;183    {
00005e  4607              MOV      r7,r0
000060  460d              MOV      r5,r1
000062  4616              MOV      r6,r2
000064  461c              MOV      r4,r3
;;;184    	u8 gpio_port_num = 0;
000066  f04f0800          MOV      r8,#0
;;;185    	GPIO_InitTypeDef GPIO_InitStructure;
;;;186    	
;;;187    	gpio_port_num = GetGpioPortNumber(gpio_port);
00006a  4638              MOV      r0,r7
00006c  f7fffffe          BL       GetGpioPortNumber
000070  4680              MOV      r8,r0
;;;188    	
;;;189    	RCC_APB2PeriphClockCmd(GPIO_PortClk[gpio_port_num], ENABLE);//ʹʱ
000072  492d              LDR      r1,|L1.296|
000074  f8510028          LDR      r0,[r1,r8,LSL #2]
000078  2101              MOVS     r1,#1
00007a  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;190    
;;;191    	GPIO_InitStructure.GPIO_Mode = gpio_pin_mode;
00007e  f88d6003          STRB     r6,[sp,#3]
;;;192    	GPIO_InitStructure.GPIO_Pin = gpio_pin;
000082  f8ad5000          STRH     r5,[sp,#0]
;;;193    	if(gpio_pin_speed)
000086  b10c              CBZ      r4,|L1.140|
;;;194    	{	//ģʽ,
;;;195    		GPIO_InitStructure.GPIO_Speed = gpio_pin_speed;
000088  f88d4002          STRB     r4,[sp,#2]
                  |L1.140|
;;;196    	}
;;;197    	GPIO_Init(gpio_port, &GPIO_InitStructure);	//ʼ˿
00008c  4669              MOV      r1,sp
00008e  4638              MOV      r0,r7
000090  f7fffffe          BL       GPIO_Init
;;;198    }
000094  e8bd83f8          POP      {r3-r9,pc}
;;;199    /*************************************************
                          ENDP

                  Exit_Init PROC
;;;211    
;;;212    void Exit_Init(GPIO_TypeDef* gpio_port,
000098  e92d4ffe          PUSH     {r1-r11,lr}
;;;213    		 	   u16 gpio_pin,
;;;214    			   GPIOMode_TypeDef gpio_pin_mode,
;;;215    			   EXTITrigger_TypeDef exit_type,
;;;216    			   u8 pre_pri,
;;;217    			   u8 sub_pri)
;;;218    {
00009c  4607              MOV      r7,r0
00009e  460d              MOV      r5,r1
0000a0  4690              MOV      r8,r2
0000a2  461e              MOV      r6,r3
0000a4  e9dd9a0c          LDRD     r9,r10,[sp,#0x30]
;;;219    
;;;220    	u8 gpio_port_num = 0;
0000a8  f04f0b00          MOV      r11,#0
;;;221    	u8 gpio_pin_num = 0;
0000ac  2400              MOVS     r4,#0
;;;222      	EXTI_InitTypeDef EXTI_InitStructure;
;;;223      	NVIC_InitTypeDef NVIC_InitStructure;
;;;224    
;;;225    	gpio_port_num = GetGpioPortNumber(gpio_port);
0000ae  4638              MOV      r0,r7
0000b0  f7fffffe          BL       GetGpioPortNumber
0000b4  4683              MOV      r11,r0
;;;226    	gpio_pin_num = GetGpioPinNumber(gpio_pin);
0000b6  4628              MOV      r0,r5
0000b8  f7fffffe          BL       GetGpioPinNumber
0000bc  4604              MOV      r4,r0
;;;227    	//ųʼ
;;;228    	GpioInit(gpio_port, gpio_pin, gpio_pin_mode, (GPIOSpeed_TypeDef)0);
0000be  2300              MOVS     r3,#0
0000c0  4642              MOV      r2,r8
0000c2  4629              MOV      r1,r5
0000c4  4638              MOV      r0,r7
0000c6  f7fffffe          BL       GpioInit
;;;229      	//ʹܸʱAFIO
;;;230      	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
0000ca  2101              MOVS     r1,#1
0000cc  4608              MOV      r0,r1
0000ce  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;231    	
;;;232    	///////////////////////////////////////
;;;233    	//жIOӳ䵽жԴ(EXTI Line)
;;;234        GPIO_EXTILineConfig(GPIO_PortSuorce[gpio_port_num], GPIO_PinSource[gpio_pin_num]);
0000d2  4a16              LDR      r2,|L1.300|
0000d4  5d11              LDRB     r1,[r2,r4]
0000d6  4a16              LDR      r2,|L1.304|
0000d8  f812000b          LDRB     r0,[r2,r11]
0000dc  f7fffffe          BL       GPIO_EXTILineConfig
;;;235    	//ж
;;;236        EXTI_InitStructure.EXTI_Line = EXINT_Line[gpio_pin_num];
0000e0  4814              LDR      r0,|L1.308|
0000e2  f8500024          LDR      r0,[r0,r4,LSL #2]
0000e6  9001              STR      r0,[sp,#4]
;;;237    	//Ϊж
;;;238        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
0000e8  2000              MOVS     r0,#0
0000ea  f88d0008          STRB     r0,[sp,#8]
;;;239    	//ô
;;;240    	EXTI_InitStructure.EXTI_Trigger = exit_type; 
0000ee  f88d6009          STRB     r6,[sp,#9]
;;;241    	//ʹж
;;;242        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
0000f2  2001              MOVS     r0,#1
0000f4  f88d000a          STRB     r0,[sp,#0xa]
;;;243        EXTI_Init(&EXTI_InitStructure);
0000f8  a801              ADD      r0,sp,#4
0000fa  f7fffffe          BL       EXTI_Init
;;;244    	
;;;245    	///////////////////////////////////////
;;;246    	//NVIC
;;;247        NVIC_InitStructure.NVIC_IRQChannel = Exit_IRQn[gpio_pin_num];	//ŶӦжIRQn
0000fe  480e              LDR      r0,|L1.312|
000100  5d00              LDRB     r0,[r0,r4]
000102  f88d0000          STRB     r0,[sp,#0]
;;;248    	
;;;249        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = pre_pri;	//ռȼ
000106  f88d9001          STRB     r9,[sp,#1]
;;;250        NVIC_InitStructure.NVIC_IRQChannelSubPriority = sub_pri;		//Ӧȼ
00010a  f88da002          STRB     r10,[sp,#2]
;;;251    	
;;;252        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;					//ʹIRQn
00010e  2001              MOVS     r0,#1
000110  f88d0003          STRB     r0,[sp,#3]
;;;253    	
;;;254        NVIC_Init(&NVIC_InitStructure); 
000114  4668              MOV      r0,sp
000116  f7fffffe          BL       NVIC_Init
;;;255    }
00011a  e8bd8ffe          POP      {r1-r11,pc}
;;;256    
                          ENDP

00011e  0000              DCW      0x0000
                  |L1.288|
                          DCD      GPIO_PORT
                  |L1.292|
                          DCD      GPIO_Pin
                  |L1.296|
                          DCD      GPIO_PortClk
                  |L1.300|
                          DCD      GPIO_PinSource
                  |L1.304|
                          DCD      GPIO_PortSuorce
                  |L1.308|
                          DCD      EXINT_Line
                  |L1.312|
                          DCD      Exit_IRQn

                          AREA ||.constdata||, DATA, READONLY, ALIGN=2

                  GPIO_Pin
000000  00010002          DCW      0x0001,0x0002
000004  00040008          DCW      0x0004,0x0008
000008  00100020          DCW      0x0010,0x0020
00000c  00400080          DCW      0x0040,0x0080
000010  01000200          DCW      0x0100,0x0200
000014  04000800          DCW      0x0400,0x0800
000018  10002000          DCW      0x1000,0x2000
00001c  40008000          DCW      0x4000,0x8000
                  GPIO_PortClk
                          DCD      0x00000004
                          DCD      0x00000008
                          DCD      0x00000010
                          DCD      0x00000020
                          DCD      0x00000040
                          DCD      0x00000080
                          DCD      0x00000100
                  GPIO_PortSuorce
00003c  00010203          DCB      0x00,0x01,0x02,0x03
000040  040506            DCB      0x04,0x05,0x06
                  GPIO_PinSource
000043  00                DCB      0x00
000044  01020304          DCB      0x01,0x02,0x03,0x04
000048  05060708          DCB      0x05,0x06,0x07,0x08
00004c  090a0b0c          DCB      0x09,0x0a,0x0b,0x0c
000050  0d0e0f00          DCB      0x0d,0x0e,0x0f,0x00
                  EXINT_Line
                          DCD      0x00000001
                          DCD      0x00000002
                          DCD      0x00000004
                          DCD      0x00000008
                          DCD      0x00000010
                          DCD      0x00000020
                          DCD      0x00000040
                          DCD      0x00000080
                          DCD      0x00000100
                          DCD      0x00000200
                          DCD      0x00000400
                          DCD      0x00000800
                          DCD      0x00001000
                          DCD      0x00002000
                          DCD      0x00004000
                          DCD      0x00008000
                  Exit_IRQn
000094  06070809          DCB      0x06,0x07,0x08,0x09
000098  0a171717          DCB      0x0a,0x17,0x17,0x17
00009c  17172828          DCB      0x17,0x17,0x28,0x28
0000a0  28282828          DCB      0x28,0x28,0x28,0x28

                          AREA ||.data||, DATA, ALIGN=2

                  GPIO_PORT
                          DCD      0x40010800
                          DCD      0x40010c00
                          DCD      0x40011000
                          DCD      0x40011400
                          DCD      0x40011800
                          DCD      0x40011c00
                          DCD      0x40012000
