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寄存器里面判断全局中断源,如果中断是由逻辑通道引起,中断服务程序便查找全局中断表以找到该逻辑通道,并从中断条目里面检查中断信息以确定是什么类型,再调用相应的收发和错误处理函数。
2.1.7 数据接收和发送 多通道语音通信系统中MPC860T SCC串口时分复用即工作在QMC模式,逻辑通道的通信协议为Trasparent mode,该协议仅传输二进制数据,不对
数据流进行位级操作,不区分数据帧中的格式位、起止位和数据位等,不对接收的数据做检错处理,因而具有较高的数据传输速率。
接收函数由中断服务例程调用。由于是每接收一帧产生一次中断,故接收函数也每次处理一帧的数据。数据的接收由接收描述符RxBD控制。当要接收数据时,接收函数首先需要确定RxBD有效;确定没有问题后,才将数据从接收缓冲区拷贝到接收Ring buffer,并复位RxBD;否则在进行相应错误处理后复位RxBD。接收函数流程如图3所示。
数据发送不调用中断处理函数,发送函数检测到发送缓冲区可用(即TxBD中R位为1)后,调用回调函数将数据从发送Ring buffer拷贝到串口发送缓冲区(Txbuffer)。这里为发送功能开辟足够大的环形缓冲区(足以容纳应用程序每一帧的数据)。发送函数流程如图4所示。
2.2 BSP调试方法和遇到的问题
2.2.1 调试方法
开发调试有两种方法,一种是使用仿真器通过BDM(后端调试模式)一步步地跟踪调试,另一种是通过点灯的方式进行所谓的“黑”调。“黑”调的方法是通过“灯”闪、用示波器测片选等,根据外部现象和所编的测试代码进行比较分析来调试程序。进行“黑”调的目的是调通信串口部分代码,宿主机可以通过串口与目标机的通信,然后再调试其他部分。调试流程分成两部分。首先是预内核启动代码(Pre-Kernel Initializa-tion),待最小内核启动正常后再添加I/O系统、文件系统、网络系统等组件和调试应用程序。使用仿真器Vi-sion Probe通过BDM方式调试BSP并将BootRom映像烧入FLASH。
2.2.2 调试中遇到的问题
(1)系统无法正常复位
在调试过程中,发现MPC860T的CLKOUT引脚无输出信号,系统上电复位过程没有完成,系统无法正常工作。初步判断是硬件问题。用万用表和示波器逐步检查上电复位、硬件复位、软件复位、时钟输入和BDM调试等模块电路,发现正常。判断是BGA焊接出现问题,将芯片取下,重新焊接,系统复位正常,时钟信号输出稳定正常。
(2)网络无法与外界通信
100 Mb/s快速以太网驱动加载中,网络层协议无法运行,目标板无法与外界网络建立联系。目标板网络启动时发出的MAC地址信息帧外界无法收到。通过仿真器发现程序单步运行正常。经过反复试验和测试,最终发现因SDRAM初始化程序没有运行导致程序运行(需要SDRAM支持突发模式)出错。更改调试方式,将BootRom开始的所有程序烧入FLASH,上电启动,网络正常,目标板与外界建立良好的网络通信。
3 结 语
该系统在实际测试中话音质量稳定,测试时声音清晰,没有串扰和杂音,没有较大延迟,说明硬件设计正确完备,QMC驱动程序和语音编解码和IP封装与解封装应用程序性能优良。
如果板卡上语音通道更多,则每帧的时隙增多、长度增大,因为FPGA内部电路所提供的的帧同步信号周期并不改变,所以只是实际数据传输速率提高,可以保证各路语音的同步和实时性。系统中QMC工作在Transparent Mode限制了它的应用范围,如何改进使系统支持多种通信协议是需要进一步研究的问题。