微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式语音通信系统中VxWorks BSP的设计实现

嵌入式语音通信系统中VxWorks BSP的设计实现

时间:09-18 来源: 点击:
2 BSP 设计实现

设计中软件开发主要包括启动代码的编写、操作系统的移植、硬件驱动程序和语音编、解码和IP封装、解封装应用程序。篇幅有限,本文仅介绍BSP移植。BSP即板级支持包,其功能为硬件、软件初始化、工程影像的下载和设备驱动等。

2.1 BSP的定制

无论是BootRom还是VxWorks都要使用BSP代码,BSP定制需要根据硬板配置、系统设计需求、软件功能等实际情况。实际开发过程中,为了缩短产品开发周期,通常以WINDRIVER公司的BSP模板或者第三方公司提供的可供参考的BSP为基础,根据软硬件具体配置进行修改,添加新的程序驱动新增硬件和功能。本课题中先把APC860开发板的BSPMPC860TEVB拷贝到installdir:\Tornado\target\collfig\ppcs860目录下,主要做下列修改。

2.1.1 config.h文件

根据实际情况,需要修改启动行,内存地址、容量等配置,修改部分代码如下:

2.1.2 makefile文件的修改

makefile文件的修改,部分程序如下:

2.1.3 romInit文件修改

romlnit.s模块包含了VxWorks在ROM中的入口点romlnit(),它是单板上电以后最先执行的汇编程序代码。该函数功能包括处理器的复位、内存的初始化以及其他的最基本和必要的初始化工作。需要修改的内容如下:

内部存储器映射寄存器IMMR。该寄存器用来标识内部地址空间的基址,将该寄存器设置为"FF000000"。

SIU模式配置寄存器SIUMCR。包括有外部总线仲裁器配置,外部master的支持,DEBUG调试端口配置,系统接口引脚配置以及奇偶校验支持,将该寄存器设置为"00E10000"。

BSP中讨论SDRAM的初始化过程,首先对MAMR寄存器的初始化,再得到UPM的RAM阵列表的地址,然后将RAM阵列表地址中的值写入MPC860 RAM WORDS ARRAY中,最后初始化OR以及BR寄存器。

2.1.4 ppcs860.h

ppcs860.h是参数配置头文件,该文件包含大量宏定义,为使MPC860T正常运行且SCC串口工作在QMC协议透明模式,根据实际需要做了如下配置:

(1)修改系统常量对应的宏定义:SCCx参数在双端口RAM中存储的起始地址、缓冲区描述符(BD)的基地址、缓冲区和BD的数目等;

(2)串口和时隙分配表的初始化,主要包括时隙分配、引脚分配等,通过设置SI RAM参数,规定了每个逻辑通道对应的时隙和数据路由,本系统中选择SCC2和TDMB接口实现QMC通信,引脚配置如下:

PC6 RSYNC,PA2 RXC,PA10 RXD,PA0 TXC。PA11 TXD

(3)SCC2初始化:设置SCC2工作在QMC模式;

(4)QMC全局参数初始化:MCBASE(多通道基地址指针),初始化为SCC2对应外部BD表的基地址,MRBLR(最大接收缓冲区长度),接收、发送时隙分配表起始地址的指针(Rx S PTR,Tx S PTR),接收、发送时隙分配表当前时隙的指针(Rx PTR,TxPTR),中断循环表基地址(INTBASE),中断循环表下一可用入口的指针(INTPTR)等;

(5)QMC特定通道参数初始化:TBASE,RBASE(该逻辑通道的缓冲区描述符的起始地址),TBPTR,RBPTR(当前发送、接收缓冲区描述符指针),TMR-BLR(最大接收帧长度)等。

2.1.5 驱动程序

驱动程序直接对硬件操作,实现硬件和操作系统、应用程序之间的交互。需要自行编写MPC860 SCC串口驱动程序ppcs860QmcSio.c,通信平台中SCC工作在QMC Transparent模式。ppcs860QmcSio.c文件中包含SIO_DRV_FUNCS结构体中定义的5个函数和中断处理函数ppc860QmcInt()、Qmc逻辑通道复位函数ppc860QmcChannelReset()。ppc860SccIoctl()提供了一些设备控制选项,包括停止数据传送、察看当前通信状态(空闲还是忙)、轮询或中断模式选择等;ppc860sccInt()处理QMC通道的中断请求,通过中断方式实现数据的收发功能;ppc860SccStartuP()函数启动一个发送周期;ppc860SccCallbackInstall()安装回调函数。中断处理函数的功能有:

(1)提供接收、发送中断处理函数,调用回调函数完成设备和较高层协议之间的数据传送。

(2)处理数据接收过程中出现的接收数据过长,数据传送被迫终止等异常。由于不需要QMC的轮询模式,因此ppc860SccPollInput()和ppc860SccPollOutput()以NULL函数的形式实现。同时还要编写sysSccSeri-al.c文件,修改sysLib.c文件和usrConfig.c文件。在sysSccQmc.c中提供SCC设备描述符的初始化例程、SCC中断连接例程等;通过修改sysLib.c和usrCon-fig.c文件以实现VxWorks对QMC驱动程序的调用和QMC驱动程序与TTY系统的挂接。

2.1.6 通道中断处理过程

数据收发的核心是中断处理函数。QMC中的所有逻辑通道共享SCC2的中断,SCC2维持有一个全局中断表,表中每一项里面都含有逻辑通道号和中断源,可以被驱动识别以处理不同情况下出现的事件。中断发生时,驱动从SCCE寄存器里面判断全局中断源,如果中断是由逻辑通道引起,中断服务程序便查找全局中断表以找到该逻辑通道,并从中断条目里面检查中断信息以确定是什么类型,再调用相应的收发和错误处理函数。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top