中断及触摸屏.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验四 中断实验 一、实验目的 1、了解中断的作用; 2、掌握嵌入式系统中断的处理流程; 3、掌握ARM中断编程。 二、实验内容 1、编写中断处理程序,处理外部中断; 2、实验各种外部中断触发方式。 三、实验设备 1、硬件: DM2410实验板; 测控与显示扩展板; PC机; JTAG仿真器; 2、软件: PC机操作系统(WINDOWS 2000); ARM Developer Suite v1.2; Multi-ICE V2.2.5(Build1319); 四、基础知识 1、了解ADS集成开发环境的基本功能; 2、了解I/O口的设置相关知识。 3、了解中断的作用以及基本处理过程; (三)实验说明: S3C2410处理器的中断处理与其他CPU的处理模式基本上是一致的,只是由于它引入了几种不同的处理器模式,使中断处理变得更加容易。其典型的步骤如下: 1)保存现场:当系统出现中断时,处理器首先要做的就是保存现场,这一过程包括:保存当前的PC值到lr中,保存当前的程序运行状态到spsr中。值得注意的就是由于ARM采用三级流水线结构,当时的PC值实际上等于当前指令地址加上8(ARM指令时),所以返回时还需将保存的PC值减4; 2)模式切换:当处理器完成现场保护后,就进入中断模式,并将PC值置为一个固定的值0这就是IRQ模式的中断入口地址。在中断模式下,有2个独立的寄存器R13、R14,这样可以便于中断程序使用自己特有的堆栈。但这样随之而来产生了一个问题,也就是堆栈溢出保护的问题,需要我们认真的估计堆栈的大小,同时在中断处理时也要尽量减少函数调用的层次,否则将产生一些不可预知的错误; 3)获取中断源:所有的IRQ中断都从0始执行,通常在该地址处放一条跳转指令,进一步跳到我们的中断程序中; 4)处理中断:在中断程序中需要进一步获取中断源,即谁引发了该中断,然后通过查表获取相应中断的程序入口,并调用对应的函数; 5)中断返回,保护现场:在返回时需要恢复处理器模式,包括恢复中断处理用到的所有寄存器、恢复被中断的程序运行状态到CPSR,并跳转到被中断的主程序。 中断的入口代码(汇编代码): …… b HandlerIRQ HandlerIQR sub sp,sp,#4 ; 为中断分发例程入口地址预留堆栈空间 stmfd sp!,{r0} ; 保存r0 sdr r0,=HandleIRQ ; 将中断分发例程入口地址指针保存到r0中 sdr r0,[r0] ; 将中断分发例程入口地址保存到r0中 str r0,[sp,#4] ; 将中断分发例程入口地址保存到预留的堆栈空间 ldmfd sp!,{r0,pc} ; 将r0和中断分发例程入口地址出栈,也实现了一个跳转 上述代码实现了从FLASH中跳到了RAM的中断入口,然后有从中断入口跳到中断分发例程入口。因此,必须在HandleIRQ地址处保存正确的分发例程入口地址,使用如下代码后, IsrIRQ就是中断分发例程: …… ; Setup IRQ handler ldr r0,=HandleIRQ ;This routine is needed ldr r1,=IsrIRQ ;if there isnt subs pc,lr,#4 at 0x18, 0x1c str r1,[r0] IsrIRQ采用汇编语言编写,通过读取INTOFFSET寄存器获取产生中断的中断源的偏移,然后根据该偏移值获取该中断对应与中断向量表中的偏移,最后从中断向量表中获取中断服务函数入口地址,再跳转到该地址处执行,代码如下: …… IsrIRQ sub sp,sp,#4 ; reserved for PC stmfd sp!,{r8-r9} ldr r9,=INTOFFSET ; 将中断偏移寄存器地址送到r9中 ldr r9,[r9] ; 将INTOFFSET寄存器的值送到r9 ldr r8,=HandleEINT0 ; Load the ISR vector base address to r8 add r8,r8,r9,lsl #2 ; get the ISR vector r8=r8+r9*4 ldr r8,[r8] ; Load the ISR address str r8,[sp,#8]

文档评论(0)

187****5045 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档