基于独立DSP平台的实时卫星导航接收机的设计
2 系统软件结构设计
2.1多星座接收机软件设计
在多星座软件接收机中,对于来自多个不同星座的中频数据的一部分软件处理模块可能是相同的。例如,对于GPS导航接收机和Galileo导航接收机可以采用共同的定位模块。与单星座的软件接收机相比,多星座的软件接收机可能会有多个EDMA/McBSP的中断处理程序和信号跟踪处理模块。因此,在针对多星座接收机的软件设计中,对这些模块的处理需要额外进行。软件接收机的结果输出如图4所示。 本文引用地址:https://www.eepw.com.cn/article/152134.htm
2.2 自举引导功能的实现
为了保证接收机能够脱离主机独立工作,本设计采用ROM自举加载模式,接收机程序作为固件存储在外部的非易失存储器Flash中,DSP复位后,先把外部存储的程序加载到片上高速内存中,然后顺序执行片上RAM中的程序。由于C64x只自动复制1 KB到片上内存,而接收机的程序远远大于这个数量,所以需要采用二级程序加载的方法。二级程序加载按照如下方式进行:
编写二次引导程序代码,然后烧写到Flash中。系统复位后,DSP将通过EDMA控制器按照默认的时序自动二次引导代码加载到片上内存的首地址中,传输完成后CPU从首地址开始执行这段二次引导程序。二次引导代码首先配置EMIFB的相关寄存器,使其工作在16 bit总线时序下,然后将卫星导航接收机相关程序加载到CPU的片上指定空间。当二次引导程序执行完毕后自动跳转到主程序的入口处,开始执行软件接收机的相关程序。
值得注意的是本设计中Flash采用16 bit数据线,所以EMIFB的地址线的最低位BEA1没有连接到Flash芯片地址线的最低位A-1,而C64x在ROM加载模式下是使用默认时序8 bit加载,即在自加载情况下EMIFB不能访问本设计中Flash的奇地址。为了保证自加载成功,需要对二次引导程序生成的二进制(.bin)文件进行修改,将有效数据存放在偶地址单元,在奇地址单元填充任意数据。图5所示为16 bit Flash与DSP的连接及自举示意图。
2.3 接收机任务调度设计
软件接收机程序是在CCS3.1开发环境下用C语言开发移植完成的。由于DSP平台资源有限,为了满足实时性,TI公司的DSP/BIOS操作系统将应用程序按线程结构化设计,每个线程完成1个模块化的功能,并允许高优先级线程抢占低优先级线程以及线程间的同步和通信[5]。把接收机的跟踪、捕获、定位等功能模块设置成相互独立的线程,线程之间的切换通过硬件中断或软件中断来实现,并根据实时性要求为各个线程分配优先级,其中跟踪优先级最高,捕获优先级最低,定位线程通过周期(PRD)函数来实现,优先级介于跟踪和捕获之间。软件接收机各个线程的功能以及它们之间的关系如下:
(1) 数据采集硬件中断
EDMA触发的硬件中断具有最高优先级。该中断由McBSP端口产生,并通过EDMA中断触发,每20 ms中断1次。中断响应程序中主要完成乒乓缓冲区的切换和数据拷贝工作。中断处理完成后,会立刻触发跟踪软中断,以保证及时完成卫星信号的跟踪。
(2) 信号处理软中断
跟踪线程软中断处理程序如果发现有需要跟踪的导航卫星,则对缓冲区中的数据进行跟踪运算。跟踪线程结束后,会根据当前DSP处理器占用情况分时隙调用捕获软中断。跟踪线程具有最高的软中断优先级。该中断执行时间与同时跟踪的卫星数量有关。
捕获线程中断处理程序可被所有其他线程抢占,当所有高优先级的线程执行完毕后,捕获才能继续执行。捕获线程对缓冲区数据进行捕获处理,将已捕获的卫星信息告知系统,以在下一次硬件中断后对其进行跟踪,在DSP平台的平均执行时间为50 ms。
评论