找回密码
 注册
关于网站域名变更的通知
查看: 320|回复: 1
打印 上一主题 下一主题

如何定义ARM中断函数

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-9-17 17:02 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 mytomorrow 于 2019-9-17 17:11 编辑 & ~) a' |( P; p6 ?$ \
% e+ Z' q- o' `; F4 Q$ d2 x

自己暂时总结的,不一定对,先记录下来:

ARM的中断函数是在startup code中定义的,在CODE区分配中断向量表时,及将中断函数定义出了


. e7 e2 H/ _0 u2 c. Y
  • ; 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, N7 y; j8 t* {" X

8 e7 U3 W6 ?1 W4 q, C3 ]5 l6 d3 `* D5 X( c4 m6 n7 M" N9 b
0 l. n. z' K& V
" v% z: R* F/ m: C) P
/ ~! _1 d  P: H' ^; \# ?* z
不同芯片有各自的startup code,所以定义不同。
  R2 r  @( D3 ~5 j3 |( j
( h9 K: U) D* T/ c0 M0 i) [

- B; c4 }4 ?* _1 _- a3 o
9 R9 @7 u0 S" K5 B8 a, R1 W
4 N7 d, h3 g1 }& r! e% J5 B; i
9 I/ q2 r; ?4 ~! v- E: [' F
在startup code中定义的中断函数都是[weak]属性,如果编译器在别的文件中发现相同的函数名,则在链接时用别处的地址进行链接。
6 Z& @5 o/ {8 k
% I3 F, u) J) k( G2 K1 S

% F0 I* o  a" D$ m3 L  t+ d2 e所以只要在工程的具体位置,按startup code中定义的名称直接完整该函数即可,不用在特别声明和与中断向量号联系起来。
# v( H" g/ G! V6 s
游客,如果您要查看本帖隐藏内容请回复

; o2 W9 P; a: o0 O: E. B9 d" V( s; P$ I3 p
8 ?1 ]( ~3 R4 w; x3 L! R! z* W

$ Y; l' l. S' _- T1 U8 q5 n3 b

( j* ?+ F, {8 a1 E1 s8 o8 v& v  T; I* L* A

( r; f- [0 {4 Q, T( v, e/ ~$ h" x# R- A7 k- W6 f* D
: A3 a  X! R( O( I* K; M* d

$ C- M9 y9 s/ y2 j* C4 l8 Z
9 y( M* X7 V; b& H* ^

9 v  P  `, D5 r
1 |3 M0 \6 e' b; m" ^9 Y

# \0 e  w8 V; a, h
$ x7 k1 t/ p+ `+ F

3 U- R6 {; {! {, U

该用户从未签到

2#
发表于 2019-9-17 20:54 | 只看该作者
学习一下,谢谢分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 01:42 , Processed in 0.156250 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表