ARM 中断函数定义

发布者:SerendipityGlow最新更新时间:2018-12-19 来源: eefocus关键字:ARM  中断函数定义 手机看文章 扫描二维码
随时随地手机看文章

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


; 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


不同芯片有各自的startup code,所以定义不同。


在startup code中定义的中断函数都是[weak]属性,如果编译器在别的文件中发现相同的函数名,则在链接时用别处的地址进行链接。


所以只要在工程的具体位置,按startup code中定义的名称直接完整该函数即可,不用在特别声明和与中断向量号联系起来。


Default_Handler PROC

                EXPORT  GPIO0_IRQHandler          [WEAK]

                EXPORT  GPIO1_IRQHandler          [WEAK]

                EXPORT  GPIO2_IRQHandler          [WEAK]

                EXPORT  GPIO3_IRQHandler          [WEAK]

                EXPORT  GPIO4_IRQHandler          [WEAK]

                EXPORT  CP_IRQHandler             [WEAK]

                EXPORT  ADC_IRQHandler            [WEAK]

                EXPORT  SSP0RXINT_IRQHandler      [WEAK]

                EXPORT  SSP0TXINT_IRQHandler      [WEAK]

                EXPORT  SSP0RORINT_IRQHandler     [WEAK]

                EXPORT  SSP0RTINT_IRQHandler      [WEAK]

                EXPORT  SSP1RXINT_IRQHandler      [WEAK]

                EXPORT  SSP1TXINT_IRQHandler      [WEAK]

                EXPORT  SSP1RORINT_IRQHandler     [WEAK]

                EXPORT  SSP1RTINT_IRQHandler      [WEAK]

                EXPORT  UART0_IRQHandler          [WEAK]

                EXPORT  UART1_IRQHandler          [WEAK]

                EXPORT  UART2_IRQHandler          [WEAK]

                EXPORT  UART3_IRQHandler          [WEAK]

                EXPORT  TIMER0_IRQHandler         [WEAK]

                EXPORT  TIMER1_IRQHandler         [WEAK]

                EXPORT  TIMER2_IRQHandler         [WEAK]

                EXPORT  TIMER3_IRQHandler         [WEAK]

                EXPORT  WDT_IRQHandler            [WEAK]

                EXPORT  I2C0_IRQHandler           [WEAK]

                EXPORT  I2C1_IRQHandler           [WEAK]

                EXPORT  SSP0_IRQHandler           [WEAK]

                EXPORT  SSP1_IRQHandler           [WEAK]

                EXPORT  TIMER01_IRQHandler        [WEAK]

                EXPORT  TIMER23_IRQHandler        [WEAK]


在具体的.c文件中


/*---------------------------------------------------------------------------------------------------------*/

/* Interrupt Handler                                                                                       */

/*---------------------------------------------------------------------------------------------------------*/

void I2C0_IRQHandler(void)

{

  uint32_t status;

 

  status = I2C0->STAT;

 

  switch (status)

  {

  /* Arbitration loss */

  case 0x38:

    if (I2CHandler[0].ArbitLossCallBackFn)

      I2CHandler[0].ArbitLossCallBackFn(status);

    break;

 

  /* Bus error */

  case 0x00:

    if (I2CHandler[0].BusErrCallBackFn)

      I2CHandler[0].BusErrCallBackFn(status);

    break;

 

  default:

    if (I2CHandler[0].I2CCallBackFn)

      I2CHandler[0].I2CCallBackFn(status);

    break;

  }

}


关键字:ARM  中断函数定义 引用地址:ARM 中断函数定义

上一篇:ARM中断向量程序实例
下一篇:初识stm32-----串口1的中断收发

推荐阅读最新更新时间:2024-03-16 16:20

ARM指令集协处理器指令
ARM 微处理器可支持多达 16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略 ARM 处理器和其他协处理器的指令。 ARM 的协处理器指令主要用于 ARM 处理器初始化 ARM 协处理器的数据处理操作,以及在ARM 处理器的寄存器和协处理器的寄存器之间传送数据,和在 ARM 协处理器的寄存器和存储器之间传送数据。 ARM 协处理器指令包括以下 5 条: CDP 协处理器数操作指令 LDC 协处理器数据加载指令 STC 协处理器数据存储指令 MCR ARM 处理器寄存器到协处理器寄存器的数据传送指令 MRC 协处理器寄存器到ARM 处理器寄存器的数据传送指令
[单片机]
ARM7与Cortex-M3的区别
1.ARM实现方法ARM Cortex-M3是一种基于ARM7v架构的最新ARM嵌入式内核,它采用哈佛结构,使用分离的指令和数据总线(冯诺伊曼结构下,数据和指令共用一条总线)。从本质上来说,哈佛结构在物理上更为复杂,但是处理速度明显加快。根据摩尔定理,复杂性并不是一件非常重要的事,而吞吐量的增加却极具价值。ARM公司对Cortex-M3的定位是:向专业嵌入式市场提供低成本、低功耗的芯片。在成本和功耗方面,Cortex-M3具有相当好的性能,ARM公司认为它特别适用于汽车和无线通信领域。和所有的ARM内核一样,ARM公司将内该设计授权给各个制造商来开发具体的芯片。迄今为止,已经有多家芯片制造商开始生产基于Cortex-M3内核的微控制
[单片机]
ARM与Linux些许问题》第一章:ARM工作模式
==================================================================================================================================== 早期的ARM核有状态(ARM或Thumb)切换(通过BX等指令修改CPSR寄存器(当前程序状态寄存器,存放条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息)中T的控制位完成程序状态的切换),现在ARM都只使用Thumb状态了。所以,我们不在讨论状态切换相关。 一、ARM七种工作模式及其应用场合(Linux操作系统使用了其中USR和SVC模式、出现异常时还
[单片机]
ARM系统代码固化的串口实现方法
  早期的嵌入式程序采用“编程—烧写—修改—烧写”的开发模式,大量的时间消耗在重复烧写芯片上,增加了开发成本和研发周期。之后发展到仿真器阶段,虽然简化了开发模式,但是由于仿真器与ARM芯片的兼容性等因素,经常会发生程序在仿真器上能正确运行,但是固化之后运行却出现问题的情况。   程序的固化是软件开发过程中重要的一环,一般可通过JATG口、网口及串口等进行烧写。相比之下,串口实现更为便捷,更值得推广。笔者在开发1C1T小灵通中继站的过程中,通过编制烧写程序,利用串口将编译后的目标代码发送给ARM处理器;由ARM处理器内部的监控程序将目标代码写入片外Flash,实现程序的在线烧写。这样不仅简化了电路设计,而且降低了开发成本,缩短了开
[单片机]
<font color='red'>ARM</font>系统代码固化的串口实现方法
arm的MMU详解(虚拟地址)
一、MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多称为覆盖块(overlay)的片段。覆盖块0首先运行,结束时他将调用另一个覆盖块。虽然覆盖块的交换是由OS完成的,但是必须先由程序员把程序先进行分割,这是一个费时费力的工作,而且相当枯燥。人们必须找到更好的办法从根本上解决这个问题。不久人们找到了一个办
[单片机]
<font color='red'>arm</font>的MMU详解(虚拟地址)
ARM收购Duolog 携手博通打造物联网芯片
  尽管在规模上不能与高达30亿美元的闪存收购活动相比肩,但ARM本周也公布了自己的收购意向。   这位处理器巨头于本周四宣称,计划买下系统芯片电子设计自动化工具及平台开发商Duolog Technologies公司。ARM表示此次收购将帮助其构建自己的产品组合,从而满足客户对于集成与管理系统IP与复杂系统芯片方案的需求。   更具体地讲,ARM公司计划利用Duolog的Socretes IP配置解决方案强化自家CoreLink Interconnect与CoreSight产品线,从移动及物联网架构调试的角度出发,实现技术改进。   此次合并议案预计将在2014年第三季度末获准通过,不过相关财务条款尚未披露。   下周将于
[网络通信]
基于ARM7的MVB_CAN网关设计
0 引言 随着网络技术和控制技术的发展,机车信息化控制技术向着更高的方向发展。为此,IEC制定出新的列车通信网路国际标准TCN(机车通信 网络),以满足列车微机控制系统中对车载数据通信网提出的新要求。 按照TCN标准,列车通信网可分为两级:第一级是WTB绞线式列车总线(Wired Train Bus),可实现车辆间的数据通信;第二级是MVB(Mul- tifunction Vehicle bus)多功能车辆总线,主要实现同一个车辆内各个功能控制单元之间的数据通信。 多功能车辆总线(MVB)是主要用于有互操作性和互换性要求的互连设备之间进行串行数据通信的一种总线,MVB以其高实时性、高可靠性及可管理性等多方面的优势而广泛的
[单片机]
基于<font color='red'>ARM</font>7的MVB_CAN网关设计
简析ARM内核和架构概念及其之间的关系
ARM产品越来越丰富,命名也越来越多。很多朋友提问: ARM内核和架构都是什么意思?内核和架构的关系是什么?比如ARMv7架构,这个架构指的是什么? 1. ARM内核:从ARM7、ARM9到Cortex-A7、A8、A9、A12、A15再到Cortex-A53、A57等,总之不同版本 ARM 有不同的想法。比如为高速度设计的Cortex A8、A9都是ARMv7a 架构;Cortex M3、M4是ARMv7m架构;前者是内核,后者是指令集的架构。 2. ARM的架构都是基于RISC指令集而架构的,而其内核只是实现这一指令集的硬件架构的基础,Thumb-2指令集架构(ISA)的子集,包含所有基本的16位 和32位Thumb-2指
[单片机]
简析<font color='red'>ARM</font>内核和架构概念及其之间的关系
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved