DSP+FLASH引导装载系统的设计与实现
仔细分析FLASH的命令字序可知,前三句命令字序列中真正起作用的地址位是A0~A14,而高地址位A15~A17可以是任意值。于是考虑加一个偏移量0x8000,使得重映射后的FLASH地址在DSP中是可见的。修改
后的代码如下所示:
#define OFFSET 0x8000
Flash Write ((0x5555L+OFFSET),0x00AA);//1st cycle
Flash Write((0x2AAAL+OFFSET),0x0055);//2 nd cycle
Flash Write((0x5555L+OFFSET),0x00A0);//Program command
Flash Write((myaddress,mydata);//put mydata into myaddress
这样,在DSP中就可以对外部FLASH进行写入操作了,前提是FLASH地址myaddress在DSP中可见。擦除和读操作也要对照图2作类似的地址重映射,不一一累述。
2.3 擦除和读写过程描述
在DSP将数据写入FLASH之前,先要删除数据所在块,然后才能重新写入。擦除和写操作之前都要执行相应的命令字序列,而读操作则可以直接进行。而且要写入的数据部分应为引导程序段以及用户代码是经过编译、连接后的目标代码,且为FLASH可识别的HEX格式。
3 引导装载模型设计
3.1 引导装载原理
加电前,DSP设置为微处理器模式(MP=1)。加电后,DSP首先执行0xFF80处的中断向量表起始处的跳转命令,转向0xF800处的引导程序段并实现代码移植功能。完毕后,再次跳转到移植后的用户程序段的起始地址并执行之。
3.2 逻辑功能分块
引导装载系统包括引导程序段、用户程序段、中断向量表和连接命令文件四部分。引导程序段负责将用户程序段和中断向量表装载到目标地址,用户程序段是实现用户系统功能的核心代码,中断向量表包括加电后的跳转处理和中断服务程序的入口,连接命令文件则是分配各个程序段在DSP地址空间中的位置。
3.3 具体代码实现
引导程序段(load.asm)如下:
.def load_start
.sect "load_prg"
load_start:
ssbx intm ;关中断
rsbx sxm ;符号扩展模式设置为0
ld #0,dp ;定义数据页指针为0
nop
nop
nop
ld #0ff80h,a ;移植中断向量表,0xff80为中断向量表的旧起始地址
stm #VECT_NEW,ar1 ;VECT_NEW表示中断向量表的新起始地址
《DSP+FLASH引导装载系统的设计与实现(第2页)》