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

如何定义ARM中断函数

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 mytomorrow 于 2019-9-17 17:11 编辑
1 C. H6 J  b8 D# w7 _
0 N( {! Z* }/ i; _  N

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

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

+ k5 H! l( F/ ]: [) 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, READONLY1 ]+ q) ~3 Y' m
( \  J% o7 i# D6 Y: g5 M+ P
6 j0 c- v& F8 r3 _* ~3 y! ^( R

9 h9 N1 `  o7 J5 M- y2 `1 v/ w- z2 |: d: h
$ o6 Y4 s5 C, W2 r
不同芯片有各自的startup code,所以定义不同。
' d1 a: E* o: f- u# H! K4 a7 N! \- p4 x! y; V7 c4 n
% m# S$ ]- z0 I7 S5 D

8 u3 n5 D4 j; |3 T; m! C
% O/ k; r$ |& ?  `8 S2 D( {& d- H
2 n- P4 E( Z" F3 @
在startup code中定义的中断函数都是[weak]属性,如果编译器在别的文件中发现相同的函数名,则在链接时用别处的地址进行链接。9 a3 w8 T  V5 p7 g+ Q& p
% \9 \+ y  t2 z. L3 R$ n1 _
! e! D. B- }  P) ~7 j1 a! b
所以只要在工程的具体位置,按startup code中定义的名称直接完整该函数即可,不用在特别声明和与中断向量号联系起来。$ T) V& g4 _( \& X( @
游客,如果您要查看本帖隐藏内容请回复

# p0 u+ ?( ]+ U1 Y) w
& U. \! z# z7 D( r+ ~- u% |2 M& \9 E1 @/ ]* e% T7 r

( |) b7 u9 D6 R, @* n  ~5 @
9 Q* ]7 ^. X6 u& Q) q9 j. f7 U/ P

) p) y5 C% N. i( a3 x

  C9 p8 Q: l4 D' N; A/ y  b( W
2 r' V$ S0 M  ]2 L, m
3 l/ p$ d4 U! T. Z- n- \  R6 \
5 B7 Y" g; x% v8 M  B7 W
+ c4 k4 k  c3 ^% W% X

% N8 K& H) ^' G

: V5 q" R- G" r& C1 W+ \- j/ }
: y5 x9 T: t: L% q6 _* o) i5 i

  A# ^' K; \$ I0 f$ I! Z! X1 H& l' o; _( g2 c; u

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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