(4)DSP检测到IO2为高是平,表明MCU应答,立即读取IDT7132上行数据区的上行信令字单元。若为可以取数据的上行信令,则从IDT7132上行数据区取出采集数据,完成后,需要向右端MCU发送采集结束下行信令(01H);若为数据未准备好的上行信令(01H),则跳转至与左端MCU通信程序中。

以下是DSP部分采集右端MCU数据的部分代码:

rx1: splk #0020h,60h

out 60h,wsgr ;设置等待状态寄存器,指令周期为50ns;而IDT7132选用55ns,则需插入1个等待状态

splk #0000h,dn-sig ;向下行信令字单元写入00h(dn-sig表示下行信令字单元),通知MCU需要接收上行的语音数据

call int0gr ;向右端MCU发中断

reply:in 70h,iosr

bit 70h,12 ;检测IO3

bcnd reply,ntc ;IO3为低,返回reply,继续检测

lacl up-sig ;读上行信令字单元(up-sig表示下行信令字单元)到累加器中

sacl 70h

bit 70h,15

bcnd rx2,tc ;若为01H,表示MCU没有准备好,跳之与另一MCU通信rx2处;为00H,表示允许采集数据

mar *,ar1

lar ar1,#data-buf ;将目的数据块首地址存入ar1辅助寄存器

rpt #data-size ;重复下一条指令(data-size+1)次

bldd #up-data,*+

splk #0000h,dn-sig ;向下行信令字单元写入01h,表示采集数据结束,让出双口RAM上行数据区的使用权

call int0gr ;向右端MCU发中断

b rx2

RPT和BLDD是TMS320F206的高级指令,充分体现了DSP的流水线特点。RPT没有时间开销,它使下一条指令重复执行;BLDD是数据存储器间块移动指令,源和目的块不一定都要在片内或片外。当RPT和BLDD一起使用时,中断应该禁止,而且一旦流水线启动,BLDD就变成了单周期指令,如上述程序,DSP采集100Byte的数据,指令周期为50ns,一个等待状态周期则仅需50ns2100=10000ns=10μs,充分节省了采集时间,使DSP将更多的时间投入到算法中。

以下是产生中断子程序:

int0gr:in 70h,iosr ;读IO状态寄存器到70H单元中

lacl 70h

and #0fffbh

sacl 71h

out 71h,iosr;置IO2为低电平,下跳变触发INT0中断

call wait1 ;延时,低电平的持续时间需满足MCU接收中断的要求

lacl 70h

or #0004h

sacl 71h

out 71h,iosr ;恢复IO2为高电平

ret

三、FIFO的双向扩展和语音数据交换系统

用DSP实现语音压缩和解压算法得到了广泛的应用。例如,用TMS320LC549可以实现基于G.723.1压缩算法的全双工语音编解码器。G.723.1语音解码器可将输入的PCM编码压缩为6.3和5.3Kbps的语音数据,压缩出的语音数据是每30ms突发输出一帧。比如,6.3Kbps的速率,编解码器每30ms输出24Byte压缩语音帧(包括信令数据),同样,编解码器每30ms突发接收24Byte语音数据解压,输出PCM编码。为了实现语音数据的全双工实时交换,可采用双向FIFO设计交换系统。下面,以1片AT89C51(简称MCU)与2片TMS320LC549(简称DSP)实现语音数据双向交换为例,介绍FIFO的具体应用。其中DSP用于语音数据的压缩解压;MCU用于转发语音数据流和监控;FIFO用于CPU之间的数据缓冲。

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查