EDA365电子论坛网
标题: 如何定义ARM中断函数 [打印本页]
作者: mytomorrow 时间: 2019-9-17 17:02
标题: 如何定义ARM中断函数
本帖最后由 mytomorrow 于 2019-9-17 17:11 编辑
0 k& N$ b# J7 M8 q7 F/ W6 z
4 V* H* q" N- s3 _# i3 p( q' T自己暂时总结的,不一定对,先记录下来:
ARM的中断函数是在startup code中定义的,在CODE区分配中断向量表时,及将中断函数定义出了
* P' h Q& j( j# q* b5 S# R
- ; Vector Table Mapped to Address 0 at Reset
-
- AREA RESET, DATA, READONLY
- EXPORT __Vectors
-
- __Vectors DCD __initial_sp ; Top of Stack
- DCD Reset_Handler ; Reset Handler
- DCD NMI_Handler ; NMI Handler
- DCD HardFault_Handler ; Hard Fault Handler
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD SVC_Handler ; SVCall Handler
- DCD 0 ; Reserved
- DCD 0 ; Reserved
- DCD PendSV_Handler ; PendSV Handler
- DCD SysTick_Handler ; SysTick Handler
-
- ; External Interrupts
- DCD GPIO0_IRQHandler ; GPIO P0 Interrupt
- DCD GPIO1_IRQHandler ; GPIO P1 Interrupt
- DCD GPIO2_IRQHandler ; GPIO P2 Interrupt
- DCD GPIO3_IRQHandler ; GPIO P3 Interrupt
- DCD GPIO4_IRQHandler ; GPIO P4 Interrupt
- DCD CP_IRQHandler ; Capture/PWM
- DCD ADC_IRQHandler ; A/D Converter
- DCD Reserved_IRQHandler ; Reserved
- DCD Reserved_IRQHandler ; Reserved
- DCD Reserved_IRQHandler ; Reserved
- DCD Reserved_IRQHandler ; Reserved
- DCD Reserved_IRQHandler ; Reserved
- DCD Reserved_IRQHandler ; Reserved
- DCD Reserved_IRQHandler ; Reserved
- DCD Reserved_IRQHandler ; Reserved
- DCD UART0_IRQHandler ; UART0
- DCD UART1_IRQHandler ; UART1
- DCD UART2_IRQHandler ; UART2
- DCD UART3_IRQHandler ; UART3
- DCD TIMER0_IRQHandler ; Timer0
- DCD TIMER1_IRQHandler ; Timer1
- DCD TIMER2_IRQHandler ; Timer2
- DCD TIMER3_IRQHandler ; Timer3
- DCD WDT_IRQHandler ; Watchdog timer
- DCD I2C0_IRQHandler ; I2C0
- DCD I2C1_IRQHandler ; I2C1
- DCD SSP0_IRQHandler ; SSP0
- DCD SSP1_IRQHandler ; SSP1
- DCD TIMER01_IRQHandler ; Timer0 & Timer1
- DCD TIMER23_IRQHandler ; Timer2 & Timer3
- DCD Reserved_IRQHandler ; Reserved
- DCD Reserved_IRQHandler ; Reserved
-
-
- AREA |.text|, CODE, READONLY( Z$ K; a' ]/ {+ F9 F4 y
. |7 G4 F# {2 _' R7 Z2 b
+ s) b. s$ }3 ^1 v+ I0 Q4 W; m3 h0 T5 m
3 N, {9 h8 ]: `5 F! ~. J# a, Q7 F$ d3 P
不同芯片有各自的startup code,所以定义不同。
% `3 o: {6 c1 \& Z3 k- W
K( [: B! D, I& @9 v1 _- j
9 ^( \6 v% C0 J) a - X; e8 Q. a9 k' i3 M
9 ~. t5 J2 i" m1 k- @( Z
4 U( {" W, @% n. m. m
在startup code中定义的中断函数都是[weak]属性,如果编译器在别的文件中发现相同的函数名,则在链接时用别处的地址进行链接。* R3 k! H& ^" O* x% \- F0 B
0 w( _5 H1 G U% b8 D/ @3 | D. I, n+ w( C
所以只要在工程的具体位置,按startup code中定义的名称直接完整该函数即可,不用在特别声明和与中断向量号联系起来。+ I9 Z; o6 l1 f5 l6 U* Q
8 Q, f; c5 S$ A' \: A' o
# o( X8 q0 g4 ^9 s
( I0 ]8 T. L# z
) p2 Y7 t5 K! K' J' a( Q3 `% u$ U
; o% }* h) T: `; _% }
& @8 a- O1 E. t/ R/ X/ I. D& i1 h8 _) H) j+ W0 t( u$ A4 Q
, J( @4 t; n4 ` J* ? |6 D& [
S9 u" D9 P9 H7 C3 w( c' C/ }/ q, Q0 b, i! [$ Q k. u
( i: s! u4 S2 l/ ]" g3 N6 A
! a( N& n/ K1 c+ x' c, r7 g( L6 K F8 b& e' F3 O7 B: i B
, O# y/ p* U2 O# R) F# P1 V5 }% e7 Z. Y
* ^ H: g: I4 W) ?; w7 j
作者: wu68aq 时间: 2019-9-17 20:54
学习一下,谢谢分享。
| 欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) |
Powered by Discuz! X3.2 |