arm的中断处理程序

[复制链接]
 楼主| 箫笑 发表于 2009-1-17 21:14 | 显示全部楼层 |阅读模式
之前用惯了C51,用interrupt很方便,初初使用arm,不知道该怎么写了,<br /><br />看了别人汇编写的bootloader,发现它在SDRAM里做了一个中断地址表,然后获取中断处理程序的地址值写到这个地址表里,通过跳转来完成。<br /><br />如:<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,&nbsp;=HandleIRQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Setup&nbsp;IRQ&nbsp;handler<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r1,&nbsp;=IsrService&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r1,&nbsp;[r0]&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ISR_STARTADDRESS&nbsp;&nbsp;<br />HandleUndef&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;4<br />HandleSWI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;4<br />HandlePabort&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;4<br />HandleDabort&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;4<br />HandleIRQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;4<br />HandleFIQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;4<br /><br />HandleADC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;4<br />HandleRTC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;4<br />HandleUTXD1&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;......<br /><br />如果我是用C写的中断处理程序,也是要通过这种方式把它的地址值放到上面的表里吗?但是C写的处理函数怎么能得到它的地址所在呢?而且每个用到的中断都要如此设置一次??
阿南 发表于 2009-1-17 21:37 | 显示全部楼层

楼主可以先一个C语言的中断服务程序看看

而且还要去分析一下启动代码中的中断处理过程<br />做了这两个工作,差不多对ARM的中断就理解了
tc9148 发表于 2009-1-17 23:27 | 显示全部楼层

我的理解

SDRAM中的中断表是虚拟的,flash中的中断响应后,就跳到这个虚拟的中断表执行相应程序,<br />
ehoosee 发表于 2009-1-26 10:05 | 显示全部楼层

你的例程是对的

然后再在C语言里把函数内容定义好就行了。
 楼主| 箫笑 发表于 2009-2-2 17:59 | 显示全部楼层

这个基本明白了

MAP那些个地址表是留着四个字节空间用来保存相应的中断处理地址的。<br />在芯片的C语言头文件里将这些地址像定义寄存器一样给它一个名字,在中断初始化的地方把真正的处理函数地址填进这个地址表里去就行了。<br /><br />有个觉得不方便的是,在汇编文件里用EQU指定开始地址_ISR_STARTADDRESS符号,而在C语言里要用define,必须得保证两个地方的_ISR_STARTADDRESS是同一个值。<br />想知道在汇编文件里EQU给定的_ISR_STARTADDRESS符号怎样能在C语言里使用吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

368

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

78

主题

368

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部