我看到LPC2000资料上说: 由于处理器复位后,映射到0x00000000-0x0000003F地址空间的异常向量表源于bootload子块,因此CPU开始执行的实际上是philips在芯片出厂前写入bootload的程序。 问题: 1,bootload区本来就有异常向量表吗?如果有,为什么还要用户自己写 2,bootload区又重新映射到片内FLASH的最高地址,这个是硬件自动完成的吗? 3,不管中断向量表在什么地方,运行中,总是以0x00-0x3f可见,那么我做SMARTARM2200的实验《2.13_存储器重映射实验》时,不是破坏了中断向量表了么? 我是ARM新手,对这个BOOTLOAD和REMAP感到难理解,望朋友们不吝赐教啊
程序如下 /**************************************************************************** * 文 件 名:REMAP.C * 功 能:将存储器重映射到片内RAM(0x40000000~0x4000003F),然后更改0x40000000~ * 0x4000003F的内容。 * 说 明:观察0x00000000~0x0000003F地址上的数据有何变化 ****************************************************************************/ #include "config.h"
#define VECTOR_RAM ((unsigned char *) 0x40000000)
/**************************************************************************** * 名 称:main() * 功 能:存储器重映射。 ****************************************************************************/ int main(void) { uint8 i; uint8 *addr;
MEMMAP = 0x02; // 中断向量从静态RAM重映射(用户RAM模式)
addr = VECTOR_RAM; for(i=0; i<64; i++) // 用0x55填充0x40000000~0x4000003F { *addr = 0x55; addr++; } addr = VECTOR_RAM; for(i=0; i<64; i++) // 用0xAA填充0x40000000~0x4000003F { *addr = 0xAA; addr++; }
MEMMAP = 0x00; // 中断向量从Boot Block重映射(Boot装载程序模式) while(1); return(0); }
|