; generated by ARM C/C++ Compiler, RVCT4.0 [Build 728]
; commandline ArmCC [--debug -c --asm --interleave -o..\OBJ\nvic_exit.o --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\INC -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  4841              LDR      r0,|L1.292|
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  4839              LDR      r0,|L1.296|
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  4604              MOV      r4,r0
000060  460d              MOV      r5,r1
000062  4617              MOV      r7,r2
000064  4698              MOV      r8,r3
;;;184    	u8 gpio_port_num = 0;
000066  2600              MOVS     r6,#0
;;;185    	GPIO_InitTypeDef GPIO_InitStructure;
;;;186    	
;;;187    	gpio_port_num = GetGpioPortNumber(gpio_port);
000068  4620              MOV      r0,r4
00006a  f7fffffe          BL       GetGpioPortNumber
00006e  4606              MOV      r6,r0
;;;188    	
;;;189    	RCC_APB2PeriphClockCmd(GPIO_PortClk[gpio_port_num], ENABLE);//ʹʱ
000070  492e              LDR      r1,|L1.300|
000072  f8510026          LDR      r0,[r1,r6,LSL #2]
000076  2101              MOVS     r1,#1
000078  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;190    
;;;191    	GPIO_InitStructure.GPIO_Mode = gpio_pin_mode;
00007c  f88d7003          STRB     r7,[sp,#3]
;;;192    	GPIO_InitStructure.GPIO_Pin = gpio_pin;
000080  f8ad5000          STRH     r5,[sp,#0]
;;;193    	if(gpio_pin_speed)
000084  f1b80f00          CMP      r8,#0
000088  d001              BEQ      |L1.142|
;;;194    	{	//ģʽ,
;;;195    		GPIO_InitStructure.GPIO_Speed = gpio_pin_speed;
00008a  f88d8002          STRB     r8,[sp,#2]
                  |L1.142|
;;;196    	}
;;;197    	GPIO_Init(gpio_port, &GPIO_InitStructure);	//ʼ˿
00008e  4669              MOV      r1,sp
000090  4620              MOV      r0,r4
000092  f7fffffe          BL       GPIO_Init
;;;198    }
000096  e8bd83f8          POP      {r3-r9,pc}
;;;199    /*************************************************
                          ENDP

                  Exit_Init PROC
;;;211    
;;;212    void Exit_Init(GPIO_TypeDef* gpio_port,
00009a  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    {
00009e  4604              MOV      r4,r0
0000a0  460d              MOV      r5,r1
0000a2  4616              MOV      r6,r2
0000a4  461f              MOV      r7,r3
0000a6  e9dd890c          LDRD     r8,r9,[sp,#0x30]
;;;219    
;;;220    	u8 gpio_port_num = 0;
0000aa  f04f0a00          MOV      r10,#0
;;;221    	u8 gpio_pin_num = 0;
0000ae  46d3              MOV      r11,r10
;;;222      	EXTI_InitTypeDef EXTI_InitStructure;
;;;223      	NVIC_InitTypeDef NVIC_InitStructure;
;;;224    
;;;225    	gpio_port_num = GetGpioPortNumber(gpio_port);
0000b0  4620              MOV      r0,r4
0000b2  f7fffffe          BL       GetGpioPortNumber
0000b6  4682              MOV      r10,r0
;;;226    	gpio_pin_num = GetGpioPinNumber(gpio_pin);
0000b8  4628              MOV      r0,r5
0000ba  f7fffffe          BL       GetGpioPinNumber
0000be  4683              MOV      r11,r0
;;;227    	//ųʼ
;;;228    	GpioInit(gpio_port, gpio_pin, gpio_pin_mode, (GPIOSpeed_TypeDef)0);
0000c0  2300              MOVS     r3,#0
0000c2  4632              MOV      r2,r6
0000c4  4629              MOV      r1,r5
0000c6  4620              MOV      r0,r4
0000c8  f7fffffe          BL       GpioInit
;;;229      	//ʹܸʱAFIO
;;;230      	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
0000cc  2101              MOVS     r1,#1
0000ce  4608              MOV      r0,r1
0000d0  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;231    	
;;;232    	///////////////////////////////////////
;;;233    	//жIOӳ䵽жԴ(EXTI Line)
;;;234        GPIO_EXTILineConfig(GPIO_PortSuorce[gpio_port_num], GPIO_PinSource[gpio_pin_num]);
0000d4  4a16              LDR      r2,|L1.304|
0000d6  f812100b          LDRB     r1,[r2,r11]
0000da  4a16              LDR      r2,|L1.308|
0000dc  f812000a          LDRB     r0,[r2,r10]
0000e0  f7fffffe          BL       GPIO_EXTILineConfig
;;;235    	//ж
;;;236        EXTI_InitStructure.EXTI_Line = EXINT_Line[gpio_pin_num];
0000e4  4814              LDR      r0,|L1.312|
0000e6  f850002b          LDR      r0,[r0,r11,LSL #2]
0000ea  9001              STR      r0,[sp,#4]
;;;237    	//Ϊж
;;;238        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
0000ec  2000              MOVS     r0,#0
0000ee  f88d0008          STRB     r0,[sp,#8]
;;;239    	//ô
;;;240    	EXTI_InitStructure.EXTI_Trigger = exit_type; 
0000f2  f88d7009          STRB     r7,[sp,#9]
;;;241    	//ʹж
;;;242        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
0000f6  2001              MOVS     r0,#1
0000f8  f88d000a          STRB     r0,[sp,#0xa]
;;;243        EXTI_Init(&EXTI_InitStructure);
0000fc  a801              ADD      r0,sp,#4
0000fe  f7fffffe          BL       EXTI_Init
;;;244    	
;;;245    	///////////////////////////////////////
;;;246    	//NVIC
;;;247        NVIC_InitStructure.NVIC_IRQChannel = Exit_IRQn[gpio_pin_num];	//ŶӦжIRQn
000102  480e              LDR      r0,|L1.316|
000104  f810000b          LDRB     r0,[r0,r11]
000108  f88d0000          STRB     r0,[sp,#0]
;;;248    	
;;;249        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = pre_pri;	//ռȼ
00010c  f88d8001          STRB     r8,[sp,#1]
;;;250        NVIC_InitStructure.NVIC_IRQChannelSubPriority = sub_pri;		//Ӧȼ
000110  f88d9002          STRB     r9,[sp,#2]
;;;251    	
;;;252        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;					//ʹIRQn
000114  2001              MOVS     r0,#1
000116  f88d0003          STRB     r0,[sp,#3]
;;;253    	
;;;254        NVIC_Init(&NVIC_InitStructure); 
00011a  4668              MOV      r0,sp
00011c  f7fffffe          BL       NVIC_Init
;;;255    }
000120  e8bd8ffe          POP      {r1-r11,pc}
;;;256    
                          ENDP

                  |L1.292|
                          DCD      GPIO_PORT
                  |L1.296|
                          DCD      GPIO_Pin
                  |L1.300|
                          DCD      GPIO_PortClk
                  |L1.304|
                          DCD      GPIO_PinSource
                  |L1.308|
                          DCD      GPIO_PortSuorce
                  |L1.312|
                          DCD      EXINT_Line
                  |L1.316|
                          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
