📄 stm32f10x_exti.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 903] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\stm32f10x_exti.o --depend=.\Obj\stm32f10x_exti.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\stm32f10x_exti.crf ..\..\..\FWLib\library\src\stm32f10x_exti.c]
THUMB
AREA ||i.EXTI_DeInit||, CODE, READONLY, ALIGN=2
EXTI_DeInit PROC
;;;37 {
;;;38 EXTI->IMR = 0x00000000;
000000 4804 LDR r0,|L1.20|
000002 2100 MOVS r1,#0
000004 6001 STR r1,[r0,#0]
;;;39 EXTI->EMR = 0x00000000;
000006 6041 STR r1,[r0,#4]
;;;40 EXTI->RTSR = 0x00000000;
000008 6081 STR r1,[r0,#8]
;;;41 EXTI->FTSR = 0x00000000;
00000a 60c1 STR r1,[r0,#0xc]
;;;42 EXTI->PR = 0x0007FFFF;
00000c 4902 LDR r1,|L1.24|
00000e 6141 STR r1,[r0,#0x14]
;;;43 }
000010 4770 BX lr
ENDP
000012 0000 DCW 0x0000
|L1.20|
000014 40010400 DCD 0x40010400
|L1.24|
000018 0007ffff DCD 0x0007ffff
AREA ||i.EXTI_Init||, CODE, READONLY, ALIGN=2
EXTI_Init PROC
;;;55 void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)
;;;56 {
000000 b530 PUSH {r4,r5,lr}
;;;57 /* Check the parameters */
;;;58 assert_param(IS_EXTI_MODE(EXTI_InitStruct->EXTI_Mode));
;;;59 assert_param(IS_EXTI_TRIGGER(EXTI_InitStruct->EXTI_Trigger));
;;;60 assert_param(IS_EXTI_LINE(EXTI_InitStruct->EXTI_Line));
;;;61 assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->EXTI_LineCmd));
;;;62
;;;63 if (EXTI_InitStruct->EXTI_LineCmd != DISABLE)
000002 4c18 LDR r4,|L2.100|
000004 7901 LDRB r1,[r0,#4]
000006 7985 LDRB r5,[r0,#6]
000008 190a ADDS r2,r1,r4
00000a f8d2f8d2 LDR r1,[r2,#0x400]
00000e 6803 LDR r3,[r0,#0]
000010 b325 CBZ r5,|L2.92|
;;;64 {
;;;65 *(u32 *)(EXTI_BASE + (u32)EXTI_InitStruct->EXTI_Mode)|= EXTI_InitStruct->EXTI_Line;
000012 4319 ORRS r1,r1,r3
;;;66
;;;67 /* Clear Rising Falling edge configuration */
;;;68 EXTI->RTSR &= ~EXTI_InitStruct->EXTI_Line;
000014 f8c2f8c2 STR r1,[r2,#0x400]
000018 f8d4f8d4 LDR r1,[r4,#0x408]
00001c 6802 LDR r2,[r0,#0]
00001e 4391 BICS r1,r1,r2
000020 f8c4f8c4 STR r1,[r4,#0x408]
;;;69 EXTI->FTSR &= ~EXTI_InitStruct->EXTI_Line;
000024 f8d4f8d4 LDR r1,[r4,#0x40c]
000028 6802 LDR r2,[r0,#0]
00002a 4391 BICS r1,r1,r2
00002c f8c4f8c4 STR r1,[r4,#0x40c]
;;;70
;;;71 /* Select the trigger for the selected external interrupts */
;;;72 if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling)
000030 7941 LDRB r1,[r0,#5]
000032 2910 CMP r1,#0x10
000034 d10a BNE |L2.76|
000036 f504f504 ADD r4,r4,#0x408
;;;73 {
;;;74 /* Rising Falling edge */
;;;75 EXTI->RTSR |= EXTI_InitStruct->EXTI_Line;
00003a 6821 LDR r1,[r4,#0]
00003c 6802 LDR r2,[r0,#0]
00003e 4311 ORRS r1,r1,r2
000040 6021 STR r1,[r4,#0]
;;;76 EXTI->FTSR |= EXTI_InitStruct->EXTI_Line;
000042 6861 LDR r1,[r4,#4]
000044 6800 LDR r0,[r0,#0]
000046 4301 ORRS r1,r1,r0
000048 6061 STR r1,[r4,#4]
;;;77 }
;;;78 else
;;;79 {
;;;80 *(u32 *)(EXTI_BASE + (u32)EXTI_InitStruct->EXTI_Trigger)|= EXTI_InitStruct->EXTI_Line;
;;;81 }
;;;82 }
;;;83 else
;;;84 {
;;;85 /* Disable the selected external lines */
;;;86 *(u32 *)(EXTI_BASE + (u32)EXTI_InitStruct->EXTI_Mode)&= ~EXTI_InitStruct->EXTI_Line;
;;;87 }
;;;88 }
00004a bd30 POP {r4,r5,pc}
|L2.76|
00004c 4421 ADD r1,r1,r4
00004e f8d1f8d1 LDR r2,[r1,#0x400]
000052 6800 LDR r0,[r0,#0]
000054 4302 ORRS r2,r2,r0
000056 f8c1f8c1 STR r2,[r1,#0x400]
00005a bd30 POP {r4,r5,pc}
|L2.92|
00005c 4399 BICS r1,r1,r3
00005e f8c2f8c2 STR r1,[r2,#0x400]
000062 bd30 POP {r4,r5,pc}
ENDP
|L2.100|
000064 40010000 DCD 0x40010000
AREA ||i.EXTI_StructInit||, CODE, READONLY, ALIGN=1
EXTI_StructInit PROC
;;;99 {
;;;100 EXTI_InitStruct->EXTI_Line = EXTI_LineNone;
000000 2100 MOVS r1,#0
;;;101 EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt;
000002 6001 STR r1,[r0,#0]
000004 7101 STRB r1,[r0,#4]
;;;102 EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling;
000006 220c MOVS r2,#0xc
000008 7142 STRB r2,[r0,#5]
;;;103 EXTI_InitStruct->EXTI_LineCmd = DISABLE;
00000a 7181 STRB r1,[r0,#6]
;;;104 }
00000c 4770 BX lr
ENDP
AREA ||i.EXTI_GenerateSWInterrupt||, CODE, READONLY, ALIGN=2
EXTI_GenerateSWInterrupt PROC
;;;116 void EXTI_GenerateSWInterrupt(u32 EXTI_Line)
;;;117 {
000000 4a02 LDR r2,|L4.12|
;;;118 /* Check the parameters */
;;;119 assert_param(IS_EXTI_LINE(EXTI_Line));
;;;120
;;;121 EXTI->SWIER |= EXTI_Line;
000002 6811 LDR r1,[r2,#0]
000004 4301 ORRS r1,r1,r0
000006 6011 STR r1,[r2,#0]
;;;122 }
000008 4770 BX lr
ENDP
00000a 0000 DCW 0x0000
|L4.12|
00000c 40010410 DCD 0x40010410
AREA ||i.EXTI_GetFlagStatus||, CODE, READONLY, ALIGN=2
EXTI_GetFlagStatus PROC
;;;134 {
;;;135 FlagStatus bitstatus = RESET;
000000 4903 LDR r1,|L5.16|
000002 4602 MOV r2,r0
;;;136
;;;137 /* Check the parameters */
;;;138 assert_param(IS_GET_EXTI_LINE(EXTI_Line));
;;;139
;;;140 if ((EXTI->PR & EXTI_Line) != (u32)RESET)
000004 6809 LDR r1,[r1,#0]
000006 2000 MOVS r0,#0
000008 4211 TST r1,r2
00000a d000 BEQ |L5.14|
;;;141 {
;;;142 bitstatus = SET;
00000c 2001 MOVS r0,#1
|L5.14|
;;;143 }
;;;144 else
;;;145 {
;;;146 bitstatus = RESET;
;;;147 }
;;;148 return bitstatus;
;;;149 }
00000e 4770 BX lr
ENDP
|L5.16|
000010 40010414 DCD 0x40010414
AREA ||i.EXTI_ClearFlag||, CODE, READONLY, ALIGN=2
EXTI_ClearFlag PROC
;;;160 void EXTI_ClearFlag(u32 EXTI_Line)
;;;161 {
000000 4901 LDR r1,|L6.8|
;;;162 /* Check the parameters */
;;;163 assert_param(IS_EXTI_LINE(EXTI_Line));
;;;164
;;;165 EXTI->PR = EXTI_Line;
000002 6008 STR r0,[r1,#0]
;;;166 }
000004 4770 BX lr
ENDP
000006 0000 DCW 0x0000
|L6.8|
000008 40010414 DCD 0x40010414
AREA ||i.EXTI_GetITStatus||, CODE, READONLY, ALIGN=2
EXTI_GetITStatus PROC
;;;178 {
;;;179 ITStatus bitstatus = RESET;
000000 4b05 LDR r3,|L7.24|
000002 4601 MOV r1,r0
;;;180 u32 enablestatus = 0;
;;;181
;;;182 /* Check the parameters */
;;;183 assert_param(IS_GET_EXTI_LINE(EXTI_Line));
;;;184
;;;185 enablestatus = EXTI->IMR & EXTI_Line;
000004 681a LDR r2,[r3,#0]
000006 2000 MOVS r0,#0
;;;186
;;;187 if (((EXTI->PR & EXTI_Line) != (u32)RESET) && enablestatus)
000008 695b LDR r3,[r3,#0x14]
00000a 400a ANDS r2,r2,r1
00000c 420b TST r3,r1
00000e d002 BEQ |L7.22|
000010 2a00 CMP r2,#0
000012 d000 BEQ |L7.22|
;;;188 {
;;;189 bitstatus = SET;
000014 2001 MOVS r0,#1
|L7.22|
;;;190 }
;;;191 else
;;;192 {
;;;193 bitstatus = RESET;
;;;194 }
;;;195 return bitstatus;
;;;196 }
000016 4770 BX lr
ENDP
|L7.24|
000018 40010400 DCD 0x40010400
AREA ||i.EXTI_ClearITPendingBit||, CODE, READONLY, ALIGN=2
EXTI_ClearITPendingBit PROC
;;;207 void EXTI_ClearITPendingBit(u32 EXTI_Line)
;;;208 {
000000 4901 LDR r1,|L8.8|
;;;209 /* Check the parameters */
;;;210 assert_param(IS_EXTI_LINE(EXTI_Line));
;;;211
;;;212 EXTI->PR = EXTI_Line;
000002 6008 STR r0,[r1,#0]
;;;213 }
000004 4770 BX lr
ENDP
000006 0000 DCW 0x0000
|L8.8|
000008 40010414 DCD 0x40010414
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -