TMS320C6000系列带中断向量表的二次Bootloader的设计与实现
发布时间:2008/5/27 0:00:00 访问次数:523
随着dsp(数字信号处理器)系统的广泛应用,其程序规模也随之不断扩大,使用芯片本身自带的boot-loader通过flash存储器来引导dsp程序,往往受到程序大小和结构的制约,比如程序很大超过厂商固化boot的范围,再如中断向量表的不同位置对程序boot跳转的影响,等等,因此越来越需要更加灵活的引导方式。
系统上电后,由引导程序将dsp的应用程序从该存储器引导到dsp应用板上的高速存储器(如内部sram、sdram等)中。由于flash存储器具有电信号删除功能,且删除速度快,集成度高,因此已成为此种存储器的首选。由于flash存储器的存取速度较慢,写入flash存储器的程序将在系统上电时被dsp装载到快速的存储器中运行,这个过程称为boot loader。不同的dsp有不同的引导方式。以ti公司tms320c6000系列芯片为例,自举方式有3种:无自举(no boot),cpu直接开始执行地址0处的指令;主机自举(host boot),系统复位后主机通过cpu的hpi(主程序设计接口)初始化dsp的存储空间;rom自举(rom boot),dma控制器从cel空间复制固定长度程序的地址0处,然后从地址0处开始执行。对于620x/670x dma,复制64 kb数据从cel到地址0;而对于621x/671x edma,复制1 kb数据从cel地址开始到地址0。
关于ti公司的c6000芯片二次bootloader在许多文献都介绍过,包括二次bootloader的pll、emif的设置和搬移表的设置和flash存储器的烧写过程,但是对于有中断向量表的二次bootloader实现的文献很少。本文以ti公司高性能dsp的代表作tms320c6000系列芯片为例,介绍了一种带中断向量表的二次bootloader的新途径,从而为tms320c6000系列dsp的开发提供了一种新的思路。该方法在实际中得到具体应用,系统运行稳定可靠。
1 二次bootload的过程
tms320c6713是ti公司推出的tms320c67xx系列浮点dsp中最新的一种芯片。tms320c6713每周期可以执行8条32位指令;支持32/64位数据;具有最高225 mhz的运行速度和1800 mips(百万次运算每秒)或1350 mflops(百万次浮点运算每秒)的处理能力;同时是有强大的外设支持能力;emip(外部存储器接口)可以很方便地与sdram、sbsram、flash存储器、sram等同步和异步存储器相连,16位ehpi接口可以与各种处理器接口;另外,还有优化的多通道缓存串口和多通道音频串口,这些外部接口使设计人员可以很容易实现自己的应用系统。
在选择romboot方式时,reset由低变高后,c6713的cpu内核处于复位状态,而c6713的其他部分则开始工作,此时emif的cel空间根据rom boot的方式自动地配置为8/16/32位异步存储器接口,并且cel空间读/写时序自动地配置为最大,随后将cel空间的前1 kb复制到0x0000 0000地址处。通过这1 kb的数据实现对其他程序的引导。对于中断向量表设在0x0000 0000~0x0000 0400处的程序来说,1 kb数据中处包含emif设置代码和搬移程序外,必然也包含中断向量表。本文重点叙述带中断向量表的bootloader的过程,中断向量表起始地址为0x00000000。如果程序长度小于1 kb,那么就不需要二次bootloader,但是往往程序长度都会大于1 kb,所以二次bootloader是必然的过程。
二次bootloader的实现需要引入emif设置和搬移的程序,即编写boot_c671x_2.s62、c6713_emif.s62,lnk2.cmd和boot.cmd3个文件。本文以实现多通道缓冲串口的程序进行说明,实现二次bootload的过程框图如图1所示。
首先调入调试好的用户程序工程文件mebsp_test.pjt工程作为例程,然后在此工程文件中引入3个文件。
程序编写好后,要引入3个很重要的文件;emif的值定义文件(c6713_emif.s62);关于emif的设置和数据搬移的程序(boot_c67lx_2.s62);cmd配置文件(lnk2.cmd)。同时,其原来的mcbsp.cmd文件要去掉。图2做了一个对比。图2(a)为原程序,图2(b)为生成要烧写的数据的程序,图2(b)中加入了3个文件,原有的mcbsp.cmd去掉了。其中boot_c67lx_2.s62是通用的,c6713_emif.s62要根据具体实际的芯片配置emif的参数。
其中boot_c671x_2.s62包含了.boot_load的函数,这个函数包含几个过程,如图3所示。c6713_emif.s62文件包括emif的几个参数配置。ink2.cmd文件位coff的配置。
其次,就是把生成的*.out文件首先使用ccs开发环境自带的工具hex6x.exe把工程生成的*.out文件转化成hex格式,在dos环境下指令为>hex6x.exeboot
随着dsp(数字信号处理器)系统的广泛应用,其程序规模也随之不断扩大,使用芯片本身自带的boot-loader通过flash存储器来引导dsp程序,往往受到程序大小和结构的制约,比如程序很大超过厂商固化boot的范围,再如中断向量表的不同位置对程序boot跳转的影响,等等,因此越来越需要更加灵活的引导方式。
系统上电后,由引导程序将dsp的应用程序从该存储器引导到dsp应用板上的高速存储器(如内部sram、sdram等)中。由于flash存储器具有电信号删除功能,且删除速度快,集成度高,因此已成为此种存储器的首选。由于flash存储器的存取速度较慢,写入flash存储器的程序将在系统上电时被dsp装载到快速的存储器中运行,这个过程称为boot loader。不同的dsp有不同的引导方式。以ti公司tms320c6000系列芯片为例,自举方式有3种:无自举(no boot),cpu直接开始执行地址0处的指令;主机自举(host boot),系统复位后主机通过cpu的hpi(主程序设计接口)初始化dsp的存储空间;rom自举(rom boot),dma控制器从cel空间复制固定长度程序的地址0处,然后从地址0处开始执行。对于620x/670x dma,复制64 kb数据从cel到地址0;而对于621x/671x edma,复制1 kb数据从cel地址开始到地址0。
关于ti公司的c6000芯片二次bootloader在许多文献都介绍过,包括二次bootloader的pll、emif的设置和搬移表的设置和flash存储器的烧写过程,但是对于有中断向量表的二次bootloader实现的文献很少。本文以ti公司高性能dsp的代表作tms320c6000系列芯片为例,介绍了一种带中断向量表的二次bootloader的新途径,从而为tms320c6000系列dsp的开发提供了一种新的思路。该方法在实际中得到具体应用,系统运行稳定可靠。
1 二次bootload的过程
tms320c6713是ti公司推出的tms320c67xx系列浮点dsp中最新的一种芯片。tms320c6713每周期可以执行8条32位指令;支持32/64位数据;具有最高225 mhz的运行速度和1800 mips(百万次运算每秒)或1350 mflops(百万次浮点运算每秒)的处理能力;同时是有强大的外设支持能力;emip(外部存储器接口)可以很方便地与sdram、sbsram、flash存储器、sram等同步和异步存储器相连,16位ehpi接口可以与各种处理器接口;另外,还有优化的多通道缓存串口和多通道音频串口,这些外部接口使设计人员可以很容易实现自己的应用系统。
在选择romboot方式时,reset由低变高后,c6713的cpu内核处于复位状态,而c6713的其他部分则开始工作,此时emif的cel空间根据rom boot的方式自动地配置为8/16/32位异步存储器接口,并且cel空间读/写时序自动地配置为最大,随后将cel空间的前1 kb复制到0x0000 0000地址处。通过这1 kb的数据实现对其他程序的引导。对于中断向量表设在0x0000 0000~0x0000 0400处的程序来说,1 kb数据中处包含emif设置代码和搬移程序外,必然也包含中断向量表。本文重点叙述带中断向量表的bootloader的过程,中断向量表起始地址为0x00000000。如果程序长度小于1 kb,那么就不需要二次bootloader,但是往往程序长度都会大于1 kb,所以二次bootloader是必然的过程。
二次bootloader的实现需要引入emif设置和搬移的程序,即编写boot_c671x_2.s62、c6713_emif.s62,lnk2.cmd和boot.cmd3个文件。本文以实现多通道缓冲串口的程序进行说明,实现二次bootload的过程框图如图1所示。
首先调入调试好的用户程序工程文件mebsp_test.pjt工程作为例程,然后在此工程文件中引入3个文件。
程序编写好后,要引入3个很重要的文件;emif的值定义文件(c6713_emif.s62);关于emif的设置和数据搬移的程序(boot_c67lx_2.s62);cmd配置文件(lnk2.cmd)。同时,其原来的mcbsp.cmd文件要去掉。图2做了一个对比。图2(a)为原程序,图2(b)为生成要烧写的数据的程序,图2(b)中加入了3个文件,原有的mcbsp.cmd去掉了。其中boot_c67lx_2.s62是通用的,c6713_emif.s62要根据具体实际的芯片配置emif的参数。
其中boot_c671x_2.s62包含了.boot_load的函数,这个函数包含几个过程,如图3所示。c6713_emif.s62文件包括emif的几个参数配置。ink2.cmd文件位coff的配置。
其次,就是把生成的*.out文件首先使用ccs开发环境自带的工具hex6x.exe把工程生成的*.out文件转化成hex格式,在dos环境下指令为>hex6x.exeboot