从Flash和SRAM中触发中断的过程示例(一)

2013-09-24 10:29:34来源: 互联网

使用LPC2106的Timer 1 进行的简单的中断处理。示例代码中Timer1分为FIQ和IRQ,用户可以从Flash或者SRAM中运行这些代码。

  示例展示了ARM构架中中断是如何操作的。提供的代码表示了向量IRQ(中断请求)和FIQ(快速中断)两种情况。中断向量位于FLASH地址中的 0x00-0x1C。如果需要从SRAM中运行,则中断向量需要被remapped to 0x40000000-0x4000000C。这可以通过Memory Map register来做到。这些代码用ADS1.2开发,从FLASH中运行。提供了从SRAM中运行代码的不同之处。中断服务程序(ISR)使用C语言编写IRQ,用汇编来编写FIQ。

  示例使用下面的样式排列:

  1. TIMER1 被配置为触发IRQ中断,代码从FLASH中运行;

  2. 代码从SRAM中运行所需要的改变和增加;

  3. TIMER1被配置为触发FIQ中断,代码从FLASH中运行;

  4. 代码从SRAM中运行所需要的改变和增加。

  TIMER1 被配置为触发一个IRQ中断,代码从FLASH中运行

  这个示例包含下述文件:

  1. 中断向量表(ivt.s)

  2. 启动用的汇编代码(init.s)

  3. 主C文件

  只包含了相关的文件。在不同的交叉编译环境下,C文件不用改变太多,而汇编文件需要改变。

  中断向量表

  这些代码应该被连接到0x0。

  ;***********************************************************

  ; 汇编指令

  ;*************************************************************

  AREA IVT,CODE ;新的代码段

  CODE32 ;ARM 代码

  IMPORT start ;导入外部函数。Start标志不应该在这个段内定义

  ENTRY ;定义程序入口

  ;*********************************************************************

  LDR PC,=START

  LDR PC,Underfined_Addr

  LDR PC,SWI_Addr

  LDR PC,Prefetch_Addr

  LDR PC,abort_Addr

  在 0x14用户应当插入一个标识(checksum),这个标识允许bootloader决定是否允许在FLASH中存放用户代码。当前大多数FLASH编程工具(debuggers and isp utility)有这个内在性能,所以用户不用担心。如果工具没有提供这个功能,这个值需要自己计算,而且应当被插入到0x14。在 LPC2104/5/6的用户手册中的FLASH编程的章节中可以找到checksum相关计算的细节。

  DCD ………..

  LDR PC,[PC,#=0Xff0]

  LDR PC,FIQ_Addr

  Undefined_Addr DCD Undefined_Handler

  SWI_Addr DCD SWI_Handler

  Prefetch_Addr DCD Prefetch_Handler

  Abort_Addr DCD Abort_Handler

  FIQ_Addr DCD FIQ_Handler

  ;********************************************************************

  ; 意外处理

  ;*******************************************************************

  下面虚拟的操作在本例子中不做任何有用的操作。这里写下来仅仅是为了完整性

  Undefined_Handler

  B Undefined_Handler

  SWI_Handler

  B SWI_Handler

  Prefetch_Handler

  B Pretetch_Handler

  Abort_Handler

  B Abort_Handler

  FIQ_Handler

  B FIQ_Handler

  END

  复位时,本例子执行的第一条指令是:

  LDR PC,=start

  将转移到汇编启动代码,允许中断,建立IRQ的堆栈指针核管理员模式。

  中断向量的假肢就是IRQ中断

  LDR PC,[PC,#=0Xff0]

  这条指令加载到PC,PC地址将从VIC向量地址寄存器(0Xffff f030)转到ISR,并在这里执行转移。其余的向量都是虚拟的中断操作。

关键字:Flash  SRAM  触发中断

编辑:神话 引用地址:http://www.eeworld.com.cn/mndz/2013/0924/article_19436.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
Flash
SRAM
触发中断

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved