以定时器中断为例,我们作为用户需要完成的任务:1定时器的初始化,各种寄存器赋值2使能中断(cpsr和中断控制器),然后将服务程序地址赋给pISR_TIMER1(为什么赋给它,后面讨论)3当然是编写具体的中断服务程序。其他启动代码帮助我们完成了。程序执行过程中,中断发生了,我们看看处理器如何找到我们的服务程序的(这不是天然的,是经过n道工序,没有无缘无故的爱)。
(1),中断发生,arm跳到0x0000 0018执行此处指令,这是硬件决定的。这里放置了一个跳转指令:b HandlerIRQ ;handler for IRQ interrupt
(2)继续找,HandlerFIQ HANDLER HandleFIQ,这是什么呢,他是一个宏,我把它翻译过来:
HandlerFIQ
sub sp,sp,#4 ;decrement sp(to store jump address)
stmfd sp!,{r0} ;PUSH the work register to stack(lr does t push because it return to original address)
ldr r0,= HandleFIQ;load the address of HandleXXX to r0
ldr r0,[r0] ;load the contents(service routine start address) of HandleXXX
str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack
ldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR)
有兴趣的可以看下,它最终将pc赋值HandleFIQ的值
(3)那么HandleFIQ那里储存了什么呢?arm在启动时做了这样的赋值
ldr r0,=HandleIRQ
ldr r1,=IsrIRQ
str r1,[r0]
可见现在(2)中pc值为IsrIRQ所代表的地址。
(4)现在来到了IsrIRQ。详细看下:
IsrIRQ
sub sp,sp,#4 ;reserved for PC
stmfd sp!,{r8-r9}
ldr r9,=INTOFFSET
ldr r9,[r9]
ldr r8,=HandleEINT0
add r8,r8,r9,lsl #2
ldr r8,[r8]
str r8,[sp,#8]
ldmfd sp!,{r8-r9,pc}
这段代码,首先计算服务程序的地址,然后跳过去。但是INTOFFSET和 HandleEINT0两个东西然人费解。INTOFFSET寄存器的功能则很简单,它的作用只是用于表明哪个中断正在被处理。下面是该寄存器各位详细功能列表
HandleEINT0其实就是中断是量表的首地址(区分于arm的异常向量表),而上面所说的pISR_TIMER1就是有中断向量表得到的存放实际的中断处理函数的地址
#define pISR_TIMER1 (*(unsigned *)(_ISR_STARTADDRESS+0x4c))
其实这个地址就应该是add r8,r8,r9,lsl #2中最终得到的r8。
关键字:中断向量
引用地址:
2440中断向量的理解
推荐阅读最新更新时间:2024-03-16 14:50
S3C2440 输入子系统学习笔记 第一节
接触S3C2440已经有一段时间了,可是总是没有去坚持学习,刚毕业的我深受到自身技能的缺乏和工作中的压力,决定痛改前非,坚持每天下班都去学习,在这里我不敢说自己能把2440学完,因为技术永无止境。但是我相信我能一直坚持下去。我是一个热爱思考,并且将思考的东西通过各种方法实现,我要做我思想的造物主。考虑到每个章节知识容量不一的问题,博客从今天开始不定时更新,前期会根据韦东山老师的视频教程目录来更新,如果有写得不好的地方请大家指点指点。 好了废话不多说,进入正题。 本博客的起点是韦东山老师的第2期的学习视频。 在第一期视频中,我们学到了简单的驱动结构,比如 LED驱动, 按键驱动等,但是这些驱动仅仅适合我们平时使用,没有
[单片机]
TQ2440裸跑—流水灯
还记得我接触单片机的时候就迫不及待的想去玩板子吧,第一程序点亮LED灯挺有印象的,点亮之后就做流水灯,那么ARM9的也一样,一开始裸跑的肯定是LED灯,下面介绍LED流水灯。程序都是我自己编的,调试过然后烧进学习板成功运行。但也许有些地方冗余的还请指正,献上程序 首先就是关于ADS1.2的使用,这里不罗嗦怎么弄,头文件启动代码那些也自己添加 #include 2440addr.h void deley()//延时程序 { int i,j; for(i=0;i 1000;i++) for(j=0;j 1000;j++) ; } void Main(void) { rGPBCON=0x15400;//这是
[单片机]
基于S3C2440的测试系统数字稳压电源设计
0 引言 直流稳压电源是一种比较常见的电子设备,一直被广泛地应用在电子电路、实验教学、科学研究等诸多领域。近年来,嵌入式技术发展极为迅速,出现了以单片机、嵌入式ARM为核心的高集成度处理器,并在自动化、通信等领域得到了广泛应用。电源行业也开始采用内部集成资源丰富的嵌入式控制器来实现数字稳压电源的控制系统。数字稳压电源是用脉宽调制波(PWM)来控制MOS管等开关器件的开通和关闭,从而实现电压电流的稳定输出。数字稳压电源还具备自诊断功能,能实现过压过流保护、故障警告等。 相比之前的模拟电源,数字稳压电源大大减少了在模拟电源中常见的误差、老化、温度漂移、非线性不易补偿等诸多问题,提高了电源的灵活性和适应性。将SAMSUNG公司的嵌
[单片机]
mini2440开发板FTP上传文件的问题
用了一个多月的ubuntu了感觉不错,还是不用虚拟机开发简单。今天切回windows,在VM虚拟机上,用FTP向开发板传输文件,竟然传不了,以前用虚拟机安装fedora9可以传的。但是现在不能了,情况是可以ping 通开发板,但在windows上用ftp 192.168.1.230 (这个是我开发板的ip) 老是出现未知错误,在linux上也连不上开发板。后来发现windows防火墙没关,以为是这个问题,后来发现不是。搞了一个晚上,头都大了。最后终于发现问题了。现在发现遇到问题一定要仔细分析,一定是有原因的。不要瞎着急,乱操作。下面说明一下配置的注意事项: 1:windows防火墙 和linux防火墙 首先都确保关闭 2:笔记
[单片机]
Micro2440 Nboot ADS 移植到Keil5编译通过
由于项目需要开发老版本S3C2440,由于时间有限系统当然跑WinCE6.0,软件兼容性好 当然安装开发工具等等一大堆是相当头疼,之前做STM32特别多,个人电脑一大堆都是32的BSP包,keil用的特别顺手,这次开发2440需要用到友善提供的Nboot,由于ADS软件兼容行特差问题太多不想折腾了,将Nboot移植到keil5上, 步骤1: 需要下载keil下ARM9的支持包,给上逻辑 http://www2.keil.com/mdk5/legacy,下载Legacy support for Arm7, Arm9 & Cortex-R devices安装即可。 步骤2: 将所有Nboot文件拷贝到keil工程下,如
[单片机]
基于S3C2440的Linux内核移植和yaffs2文件系统制作--编译内核
1.3.4、编译内核 编译内核需要遵守以下步骤: 1、make dep make dep的意思就是说:如果你使用程序A(比如支持特殊设备),而A需用到B(比如B是A的一 个模块/子程序)。而你在做make config的时候将一个设备的驱动 由内核支持改为module,或取消支持,这将可能影响到B的一个参数的设置,需重新编译B,重新编译或连接A....如果程序数量非常多, 你是很难手工完全做好此工作的。make dep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要编译。所以,你要make dep。 2、make clean 清除一些以前留下的文件,比如以前编译生成的目标文
[单片机]
S3C2440-IIS放音
S3C2440A的Inter-IC Sound(IIS)总线接口作为一个编解码接口连接外部8/16位立体声音频解码IC用于迷你碟机和可携式应用。IIS总线接口支持IIS总线数据格式和MSB-justified数据格式。该接口对FIFO的访问采用了DMA模式取代了中断。它可以在同一时间接受和发送数据。S3C2440一共有5个引脚用于IIS:IISDO,IISDI,IISSCLK,IISLRCK和CDCLK。前两个信号用于数字音频信号的输入输出,另外3个引脚都与音频信号的频率有关,可见要用好IIS,就要把信号频率设置正确。IISSCLK为串行时钟,每一个时钟信号传送一位音频信号,因此IISSCLK的频率=声道数*采样频率*采样位数,如采
[单片机]
s3c2440学习之路-001 汇编点亮led
1. 原理分析 2. 主要流程 3. 源码 4. dis文件分析 硬件平台:jz2440 软件平台:Ubuntu16.04 arm-linux-gcc-3.4.5 1.原理分析 点亮LED最简单的方法就是给二极管正负极接上电,中间串一个电阻 图1 点亮LED 由于2440芯片Pin脚的驱动能力不够,所以无法直接用Pin脚来点亮LED,只能把Pin脚连接到LED的负极,充当开关的作用。 当Pin脚为高电平时,LED两端无电压差,LED灭 当Pin脚为低电平时,LED两端有电压差,LED亮 图2 2440连接LED 2.主要流程 2.1原理图介绍 这里只介绍LED1, LED1负极与2440的GPF4相连,中
[单片机]