您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网 > 电子技术应用 > 嵌入式技术 > 嵌入式操作系统 >

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

2011年09月28日 11:29 本站整理 作者:叶子 用户评论(0
在SRAM中运行上述代码所需要进行的改变和增加

  链接需要按照如下方法配置:中断向量表(ivt.s)需要链接到SRAM的底部(0x40000000)。确定相关的中断向量位于0x40000000-0x4000003F。其他的文件链接到代码内部,可以存放在SRAM中。

  而且,中断向量需要被remapped to SRAM。使用MEMAP寄存器,配置它为用户RAM模式可以实现。

  Int main()

  {

  ………………….

  初始化 MEMAP

  MEMAP = 0x2;

  ………………………..

  }

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

  例子包含下面的文件:

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

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

  3. 主C文件

  本应用笔记只提到了相关的文件。如果使用其他的交叉编译环境,C文件可以保存大部分不动,汇编文件需要更改。

  中断向量表

  这些代码应当被链接到0x0。这样中断向量和FIQ ISR就被提供给了ARM核。

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

  汇编指令

  ********************************************************************

  AREA IVT,CODE ;新的代码段

  CODE32

  IMPORT start

  T1_IR EQU 0Xe0008000

  ENTRY

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

  LDR PC,=start

  LDR PC,Undefined_Addr

  LDR PC,SWI_Addr

  LDR PC,Prefetch_Addr

  LDR PC,Abort_Addr

  DCD ;标识

  LDR PC,IRQ_Addr

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

  FIQ ISR已经自己存放在了 0x1C,取代了放置在这里的LDR 指令

  ******************************************************************

  ;清 TIMER1 中断

  MOV R8,#0x1

  LDR R9,=T1_IR

  STR R8,[R9]

  后面的用户应当增加更多的代码在这里。

  ;返回到C main

  SUBS PC,R14,#0x04

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

  Undefined_Addr DCD Undefined_Handler

  SWI_Addr DCD SWI_Handler

  Pregetch_Addr DCD Pregetch_Handler

  Abort_Addr DCD Abort_Handler

  IRQ_Addr DCD IRQ_Handler

非常好我支持^.^

(0) 0%

不好我反对

(0) 0%

( 发表人:叶子 )

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!