"); //-->
摘要:首先简介传送流语法和tms320c5402 dsp芯片,然后重点介绍该芯片在复用器中的应用,最后谈谈对象芯片进行软件编程的体会。
关键词:传送流 tms320c5402 复用器
引言
随着信息技术的发展,电视信号的数字化编码、数字化存储、数字化处理已经越来越广泛。新开发的数字有限电视广播系统主要包括mpeg-2编码器、数字传输复用器、数字调制器以及机顶盒。复用器是该系统的重要组成部分,完成对多路符合mpeg-2系统层标准itu-trec.h.222.1|iso/iec13818-1的ts流(transport stream)的复用,经过64 qam调制后,以便在1路6mhx的带宽中传送多路数字化节目。考虑到处理的实时性,我们使用美国德州仪器公司(ti)的tms320c5402(简称c5402)dsp作为主控芯片。本文首先介绍ts流的结构、c5402芯片、复有器的组成,然后重点介绍该芯片在复用器的应用,最后就利用ccs开发仿真器一经验介绍。
1 ts流简介
主要包括分组方法、程序特殊信息(psi)表以及程序参考时钟(pcr)的提取。
(1)分组方法
传送流分组长度固定为188字节,分组由分组首部及有效负载组成,如图1所示。
(2)psi
psi被分成4类表。如表1所示,每个表可被分成1段或多段置于传送流中。这4类表是:程序关联表pat(program association table)、程序映射表pmt(program map table)、网络信表nit(network information table)、条件访问表cat(conditional access table)。这4类表中包含进行多路解调和显示程序的必要和足够的信息。
表1 程序特殊信息
系统层解复用,首先要获取pat表。pat表中包含了该传送流中所有程序的一个清单。通过pat表,就可获取该传送中所包含每个程序的pmt表。
在每个程序的pmt表中,就有该程序中各个原始流的信息,包括pid、原始流类型以及该程序中包含有效pcr字段的传送流中pid。通过pat及pmt表,就可掌握传送流中每个程序以及每个程序中各原始之间的关系。
(3)pcr
在传送流中,解码的同步实现是靠相应的程序参考时间pcr值。pcr是将比特流本身的时序编码的时间标签,它可以由同一道程序的视频和音频的pts所用的共同时间基点推出。由于每道程序都有自己的时间基点,所以含有多道程序的传送流的每一道程序都有独立的pcr字段。
2 c5402介绍
c5402是ti公司1999年10月推出的性价比较高的定点数字信号处理器,其主要特点如下:
*先进的改造型哈佛结构,操作速率可达100mips;
*先进的多总线结构,3条16位数据存储器总线和1条程序存储器总线;
*40位算术逻辑单元(alu),包括1个40位桶形移位器和2个40位累加器;
*1个17×17乘法器和1个40位专用加法器,允许16位带(或不带)符号的乘法;
*8个辅助寄存器及1个软件栈,允许使用业界最先进的定点dsp c语言编译器;
*数据/程序寻址空间1m×6bit,内置4k×16bit rom和16k×16bit ram。
*内置可编程等待状态发生器、锁相环时钟产生器、2个多通道缓冲串行口、1个8位并行与外部处理器通信的hpi口、2个16位定时器以及6通道dma控制器;
*低功耗,工作电源有3v和1.8v(内核使用)。
3 复用器硬件框图及流程
复用器硬件框图如图2所示。
(1)合成控制卡(主卡)流程
主卡流程:主要完成6块卡处理的实施监控,生成psi等信息并周期性发送。主卡的psi信息:6个pmt的pid以及每个子卡输入来的视频、音频、pcr的pid号是事先规定好的。
(2)单路ts流处理卡(子卡)流程
子卡流程:ts流进入fifo缓存,由dsp进行psi信息的提取和码率的计算;将有关信息送入合成处理卡进行分析、综合;根据需要从输入的流中提取1路视频、1路音频和pcr包,并将它们的pid改为事先规定的。子卡的功能相当于一个简易的码流分析仪,而且可以提供1路单独的ts流。
4 c5402的几个典型应用
c5402在该系统中的应用:对输入的ts流进行分析;对6路码流进行均匀交织和psi信息的重置;主卡与子卡之间通过c5402 hpi接口进行通信;利用c5402串口与计算机rs232串口相连。
4.1 输入的ts流分析
dsp从fifo中读取ts流到内部ram中去,如图3所示,根据13位的pid号0x000找到pat表,在pat表中获得pmt的id号和nit的id号;根据pmt_pid获得视频、音频、pcr的pid号以及其它私有信息的pid号;根据pcr_pid和pcr_flag,找到pcr包;根据公式计算出码率:
其中i、i为相邻2个pcr包,求得多个码率,然后求算术平均,获得平均码率。利用fifo进行数据传输,速率在10~25mb/s之间。由于dsp处理能力为100mips,子卡中dsp传输数据量是大为2mb/s,约耦时0.1~0.2s,这样处理时间足够(0.8~0.9s)。子卡输入fifo采用8kb大小,在其半满时,dsp等待时间最大为(188/10 000)×6=0.1128ms,期间fifo的填充量为0.112 8×1=0.112 kb,远不能输入码流将子卡的输入fifo填充满而导致溢出。
4.2 码流交织和psi信息配置
为了将6块子卡输入的ts流复合成1路ts流,主卡dsp的功能就是将6路ts流均匀交织。主卡数据通过hpi送到主卡的dsp内部ram中,再写到外部fifo中。由于各种码流的pid叫可能相同,需要对各路ts流的id号进行重新设置。主卡根据预先设置的所有pid生成新的psi表,并按照一定时间间隔发送到外部的fifo中去。主卡的cpu以100mhz运行,输出fifo的大小为8kb,以固定5mhz的码率发送,子卡填写的数据不会导致主卡上溢。当主卡的输出fifo没有达半满时,填充空包,使fifo不会下溢。
在子卡中根据分析得到的psi信息,可以提取1路或者多路的节目流,并将pid号改为事先规定的,通过hpi通信接口传送到主卡。
4.3 hpi接口
hpi(host port interface)接口可以方便地实现主卡与子卡之间的通信,而不需要额外的器件。c5402的hpi操作是8位的。当c5402运行在100mhz主频时,通信速度可达到25mb/s。hpi接口具有3个16bit寄存器:hpia(地址寄存器)、hpid(数据寄存器)、hpic(控制寄存器)。主卡与子卡的dsp芯片之间的连接如图4所示:hd0~hd7是8位数据线,直接接到主设备的数据线上;hcs为选通信号;hds1~hds2为数据锁存信号,在主设备的存取周期控制数据的传输,一般连到设备的数据选通;hr/w是读写信号;hcntl0/hcnl1用于主设备选择存取hpi的哪一个寄存器和对寄存器的存取类型,连至主设备的地址线。由于hpi寄存器是16位的,而hpi与主设备仅以8位数据线相连,因而用hbil决定当前存取的是1个字的第1个字节还是第2个字节,连到主设备地址线。
对hpi操作首先将控制字写入hpic,然后将要存取的地址写入hpia,最后丰取hpid,就可从hpi存储块或将数据写入hpi存储块。此外,还可选择hpia自动增加方式,将初始地址写入hpia,可不再操作hpia,每存取1次数据,地址都会自动加1,因而加快了存取速度。
4.4 主卡dsp与计算机接口
为了实现系统自检、码率以及节目信息提取、输出,我们通过dsp的串口与计算机的串口进行通信。如图5所示,采用的是异步通信方式。其中75c189和75c188为电平转换芯片,c5402有2个mcbsp(多通道缓冲串行口)。mcbsp提供了全双工的通信制以及双缓存的发送寄存器和三级存的接收寄存器,允许连续的数据流传输,数据长度可以为8、12、16、20、24、32;同时还提供了a-律和μ-律压扩,多达128个通道的发送和接收。数据经mcbsp与外设的通信通过dr和dx引脚相连。控制信号则由clkx、clkr、fsx、fsr四条引脚来实现。
4.5 dsp程序bootl0ader的实现
bootloader是为了在上电时,将用户代码从外部加载到内部的存储器以加快运行速度。我们使用c5402外部8位并行i/o口实现bootloader程序。c5402读i/o口0xffff,这里面存放着外部存储器的首地址(数据区)。若在这个首地址内读到了关键字08 aa,就进行8位加载;若是10aa则表示16位加载。硬件系统就是加了1片3.3v的flash,程序用编程器烧入flash。
5 c5402的软件编程体会
(1)c语言与汇编混合编程
在运算能力不是十分紧张的情况下,用c语言开发dsp程序不仅使dsp开发的速度大大加快,而且开发出来的dsp程序的可读性和可移植性大大加强,程序修改也极为方便。采用c编译器的优化功能可以增加c代码的效率。
一般情况下,采用c语言和汇编混合编程方法有3种:①独立编写c程序和汇编程序;②直接在c语言程序的相应位置嵌入汇编语句;③对c程序进行编译生成相应汇编程序,然后对汇编程序进行手工优化和修改。可以从c程序中访问汇编程序的变量和常量,也可以在汇编程序中访问c程序变量。
(2)预防流水线冲突
流水线操作是dsp实现高速度、高效率的关键技术之一。在tms320c54x中采用了深度与6级的流水线操作,因此流水线冲突不可避免的。一般情况下,当发生流水线冲突时,由dsp自动插入延迟解剖冲突问题,但有时需要程序员通过调整程序语句的次序或在程序中插入一定量的nop来解决。例如:
stlm a,brc
nop
rptb loop
语句
loop
(3)存储空间要正确分配
c5402总共有192k字大小存储空间,64k字的程序区、64k字的数据区和64k字的i/o区。当寄存器pmst的ovly=0时,片内ram在数据区内可访问,在程序区不可访问;当ovly=1时,片内ram映射到程序区和数据区,但数据页(地址从0h~7fh)不映射到程序空间。我们在程序编程中选用后种模式。程序和数据同一块片内ram,在编写cmd文件时程序和数据区间不能发生重叠。
(4)指令的使用
①tms320c54x的汇编有算术指令和程序指令,2种指令可以互换。当外部端口操作时使用端口指令portw和portr。
②利用dadst和dsadt指令,可以同时在1个累加器中进行2次运算。
③利用dadd和dsub可实现32的加减法。
④利用cmps、saccd、srccd、strcd四个条件存储指令,以减少条件判断指令的开销;利用max、min、firs、lms可以减少运算所需的指令周期;利用c54的并行指令可以省去多次数据存储,提高编程的效率。
⑤充分利用*(ik)寻址(在数据区内指明所要访问的地址),可以减少辅助寄存器的使用。
(5)少用函数和子程序调用
虽然结构化程序给软件和调试带来方便,但一个函数和子程序的调用和返回都将使c5402产生1次流水线刷新,增加了指令周期,因而在存储空间足够时,应多使用宏结构;但在编程时又必须考虑程序的大小,所以在对设备处理速度影响不大的情况下,也可以使用函数和子程序。
(6)关于中断服务程序的编写
中断有软中断和硬中断。在编写中断服务程序时,最重要的是将中断向量表放置正确。首先在pmst寄存中设置iptr,然后把int放到规定的位置,将中断模式intm=0;将中断使能寄存器的对应位置1。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。