RAM7中断重映射

来源:互联网 发布:外贸电商cms 编辑:程序博客网 时间:2024/05/30 02:24

地址重映射及中断向量表的转移

  ARM7处理器在复位后从地址0读取第一条指令并执行,因此系统上电后地址0必须是非易失的 ROM/FLASH,这样才能保证处理器有正确可用的指令。为了加快对中断的处理以及实现在不同操作系统模式下对中断的处理,这就需要重新映射中断向量表、Bootblock和SRAM空间的一小部分。ARM具有非常灵活的存储器地址分配特性。ARM处理器的地址重映射机制有两种情况:

  ①由专门的寄存器完成重映射(Remap),只需对相应的Remap寄存器相应位设置即可。

以LPC2368为例:

MEMMAP          EQU     0xE01FC040      ; Memory Mapping Control
                IF      :DEF:REMAP
                LDR     R0, =MEMMAP
                IF      :DEF:RAM_MODE
                MOV     R1, #2                  ;映射到RAM
                ELSE
                MOV     R1, #0                  ;映射到Boot ROM
                ENDIF
                STR     R1, [R0]
                ENDIF

  ②没有专门的Remap控制寄存器需要重新改写用于控制存储器起始地址的块(Bank)寄存器来实现Remap。实现REMAP操作的程序实现如下:

MOV     R0, #0x40000000    ;RAM区首地址
LDR     R1, =Vectors    ;向量表首地址#下面一段程序是把从0x00000000开始的64个字节(FLASH中的中断向量表和

                               ;地址表)搬移到以#0x40000000为首地址的RAM区中
  LDMIA   R1!, {R2-R9}    ;把以[R1]为首地址的32个字节数据装载到R2-R9中
  STMIA   R0!, {R2-R9}    ;把R2-R9中的数据存入以[R0]为首地址的单元中
  LDMIA   R1!, {R2-R9}    ;把以[R1]为首地址的32个字节数据装载到R2-R9中
  STMIA   R0!, {R2-R9}

  

原创粉丝点击