双核DSP片TMS320VC5421的并行引导方案
如图5所示,在GPIO控制寄存器(地址3Ch)中,XIO_GRANT位为1代表相应的DSP核取得了片外总线的控制权;而在还没有取得控制权(XIO_GRANT位为0)但在申请片外总线的控制权时,相应的XIO_REQ位应置为1;CORE_SEL位用于表示程序在哪个核上运行,当在CPU A上运行时,读A核的GPIO控制寄存器的CORE_SEL位将返回到“0”,而当同一个程序在CPU B上运行时,读B核的GPIO控制寄存器的CORE_SEL位将返回到“1”。有关GPIO控制寄存器的其它相关位,设计时可查阅有关的参考文献1。
4.4 FLASH的烧写
笔者根据SST39VF400A的资料编写了一个DSP程序,该程序可同时将A核的Boot表烧写到FLASH的第0页,而将B核的Boot表烧写到第1页。
在系统上电或复位后,A核首先运行它的Boot-loader程序(此时FLASH的第0页映射到DMA片外数据空间的0000h地址单元),A核启动后执行用户程序。用户程序首先将页选设置成第1页,这样,FLASH的第一页将被映射到DMA片外数据空间的0000h;然后,A核释放片外总线控制权,并给B核发出复位信号,此时由于只有B核复位,且A核已释放片外总线的控制权,因此,B核将申请到片外总线控制权,同时执行Bootloader程序的启动以完成整个DSP引导。完整的启动过程流程图如图6所示,下面是A核的启动测试程序代码:
·mmregs
·titlc ″testLEDA″
·global begin
·text
.............
begin stm #0x000,0x0061 ;设置页选信号
portw ox0061,00h
call wait
andm #0xffcf,3ch ;释放片外总线
call wait ; 控制权
stm #0x00410x0061 ;给B核复位信号
portw 0x0061,00hjavascript:window.open(this.src);" style="cursor:pointer;"/>
call wait
stm #0x0001,0x0061
portw 0x0061,00h
flash: rsbs 1,xf ;发光二极管亮
call wait
ssbx 1,xf ;发光二极管灭
call wait
b flash
;----Subroutine to wait for some time----
wait: stm #80,ar6
loop0: stm #30000,ar7-
loop1: nop
banz loop1,*ar7-
banz loop0,*ar6-
ret
5 实验验证
本设计中,在DSP的A_XF和B_XF脚上连接两个发光二极管,同时使被加载的用户程序通过循环来设置/清除这两个引脚以使两个发光二极管以不同的频率闪烁,以此来验证用户程序是否成功加载。系统上电后,两个发光二极管先后以不同的频率开始闪烁,说明DSP的A核、B核均成功地实现了上电自举。