谁学过51和ARM,这两个定时器计数器的中断处理函数的主要区别在哪里?特别是ARM,中断处理函数怎没理解?求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁学过51和ARM,这两个定时器计数器的中断处理函数的主要区别在哪里?特别是ARM,中断处理函数怎没理解?求相关的知识,希望对你有一定的参考价值。

谢谢了!!!

所说的中断处理函数,是你进入中断执行的指令代码ISR,也叫中断服务程序,这个和你的应用是相关的,在51和ARM中没有太大的区别。
有区别的是进入中断,以及中断向量,中断返回。
51定时器中断向量固定为0x000B,0x001B,0x002B(如果有的话)
而ARM中断地址和向量是需要你设定VectAddr,和定时器中断号的。
不知道我有没有答非所问。
参考技术A 来自我的空间:

………………
如果中断不能进入,查看一下CPSR中的I位,如果是1,说明CPSR中断标志禁止中断,所以要将I清0,解决办法是利用一个软件中断,进入管理模式,将SPSR的I清0,返回前将SPSR复制到CPSR中。具体做法有待以后解决。本来是想用内嵌汇编的,但是考虑到用户模式不能对CPSR修改。或者修改一下启动代码。

VICDefVectAddr是非向量IRQ的中断例程地址(与此相似的16个向量IRQ的中断例程地址VICVectAddr0~15),中断触发后,VICDefVectAddr(同样,如果是向量IRQ,相应的VICDefVectAddr0~15)中的值自动进入VICVectAddr,所以PC指向VICVectAddr后就进入相应的中断例程。

那么PC为什么会指向VICVectAddr呢?与C51相似的是,ARM的IRQ触发后,PC会跳到0x00000018地址处,查看Startup里的异常向量表,在地址0x00000018处有这样一条指令: LDR PC, [PC, #-0x0FF0],计算一下 0x00000018+8-0x0FF0=0xFFFFF030,(+8是因为三级流水线),0xFFFFF030就是VICVectAddr的地址。

观察一下异常向量表,和C51的中断向量表比较一下,是不是有相似之处:
ARM:
Vectors LDR PC, Reset_Addr ;0x00000000复位
LDR PC, Undef_Addr ;0x00000004未定义异常
LDR PC, SWI_Addr ;0x00000008软件中断
LDR PC, PAbt_Addr ;0x0000000C预取指中止
LDR PC, DAbt_Addr ;0x00000010数据中止
NOP ;0x00000014保留
; LDR PC, IRQ_Addr
LDR PC, [PC, #-0x0FF0] ;0x00000018中断
LDR PC, FIQ_Addr ;0x0000001C快速中断

C51:
ORG 0003H
SJMP INT0
ORG 000BH
SJMP TIME0
ORG 0013H
SJMP INT1
ORG 001BH
SJMP TIME1
ORG 0023H
SJMP SERIAL

………………

arm7的捕获和中断有啥区别呢

参考技术A 中断没发生时不消耗CPU资源,捕获发生时可以中断也可以不中断。
不中断不消耗CPU,中断消耗CPU资源。其中捕获引脚电平的变化导致自动读取TC值到捕获寄存器。如果设有中断,就会申请CPU资源进一步处理捕获的值。追问

为什么arm7要把捕获放到定时器上,他的作用和外部中断一样,这不是重复了吗

追答

当然是捕获时间了,和外部中断不一样,这里的中断和外部中断相似,但不一样,arm的优点就是中断源比较多,如果此时用了外部中断就少了一个外部中断,定时器是一个外设,最好用它自己的中断,一般外设都分配有中断。以便外设处理好外部事物后向CPU申请处理后续工作。

追问

定时器不是cpu自带的吗 不是自己的外设吧

追答

定时器当然是外部设备了

追问

arm的定时器是外部设备吗 不是集成cpu中的吗 不懂 可以仔细解释下吗

追答

书上说的,除了CPU和内存其余都是外部设备,因为这些设备的频率一般比CPU低。

本回答被提问者采纳

以上是关于谁学过51和ARM,这两个定时器计数器的中断处理函数的主要区别在哪里?特别是ARM,中断处理函数怎没理解?求的主要内容,如果未能解决你的问题,请参考以下文章

单片机综合实验 - 02 | 中断与定时/计数器实验

51单片机定时器问题

51单片机中断程序大全

51单片机定时器中断

c51单片机中断程序中的interrupt1,2,3是由啥决定的?

51单片机学习笔记6 -- 定时器中断