式控制进出CMX649的语音数据流,同时MSP430接收来自射频 的语音数据字节并送至CMX649进行处理,处理后的语音数据从 CMX649送出,经放大后送至语音输出模块。
MSP430传送数据至CMX649的同时也接收来自CMX649的 语音数据。定义USART0的缓存RXBUF0与TXBUF0分别用来存 储接收来自CMX649的数据字节以及准备发送至CMX649的数据
字节,使
用通用寄存器R4(FROM649㈣)作接收CMX649的数
据字节计数器,1L0(T0649 C套mU作发送至CMX649的数据字节 计数器。当缓存RXBUF0与TXBUF0存满一个字节准备发送或已 西南交通大学硕士研究生学位论文第30页
接收满一个字节时,软件系统产生一个中断程序将该字节存入 RFTX BUF(R4)中或直接送到CMX649中进行处理。MSP430与 CMX649间的数据传输流程如图4.3所示。
·.I
RXBUFO—R唧B岍l
ChD(649 430
II
TXBUF0闩RFRX_BUF
图4.3 MSP430与CMX649间的数据传输
代码如F:
MOV.B RXBUF0,RFTX_BUF(FROM649_CNTR) MOV.B RFRX_BUF(T0649_CNTR),TXBUF0
需要说明的是,CMX649发送数据到RXBLlF0和TXBUF0发
送数据到CMX649的过程是自动完成的,这是由USART0串行通
信模块的特性决定的。另外,只有当通信双方的经过D号匹配和
同步后之后,接收到的语音数据才能送入CMX649进行语音编码 和译码的处理,否则解出来的语音信号很有可能是杂音。 4.4.2 MSP430与001000间的数据传输
MSP430与CCl000的通信分别通过通用串行通信模块
USARTl来实现。即USARTl通过SPI 3线方式控制进、出CCl000 的数据流。
定义USARTl的缓存RXBUFl与TXBUFl分别用来存储接收
·来自CCl000的数据字节以及准备发送至ccaooo盼数据字节,使.
用通用寄存器R8(FROMRF CNTR)作接收CCl000的数据字节计 数器,RSffOP珥CNTR)作发送至CCl000的数据字节计数器。当
缓存RXBUFl与TXBUFl存满一个字节准备发送或已接收满一个 字节时,软件系统产生一个中断程序将该字节存入RFRX BUT(R8) 中或直接送到CCl000中进行发送。MSP430与CCl000间的数据 传输流程如图4-4所示。
图4-4MSP430与CCl000间的数据传输 代码如下:
MOV.B RFTX_BUF(TORF_CNTR),TXBUFl MOV.B R7,RFRX BUF(FROMRF_CNTR)
西南交通大学硕士研究生学位论文第31页
同样需要说明的是,TXBUFl发送数据到CCl000和 CCl000发送数据到RXBUFl的过程也是自动完成的,由 USARTl串行通信模块的特性决定的。 4.5 TDD通信模块
4.5.1 TDD的实现
由第2章对TDD实现方式的描述可知,为了实现TDD,首
先应设置语音编码器CMX649和微处理器MSP430之间的传输速 率为MSP430与CCl000间的一半。为此, CMX649采用32Kbps
的采样编码传输速率,而CC l 000传输速率为76.8Kbps,可满足要 求,相关寄存器的设置见SETUP649和SETUPRF段程序。 然后在MSP430内存中分别划出用于存储发送语音数据的语
音发送缓存、接收语音数据缓存、射频数据发射缓存和射频数据 接收缓存。其中语音发送缓存、接收语音缓存分别用 R_FTX_BUF(FROM649_CNTR)和RFRX_BUF(T0649 CNTR)来表 示,射频数据发射缓存和射频数据接收缓存分别用
RFTX_BUF(TORF_CNTR)和RFRX—BUT(VROMRF c}rrR)表示。 可以看出语音发送缓存和射频数据发射缓存的起始地址均为 RFrX BUF,不同之处只是变址寻址中通用寄存器的值不同。同 样,接收语音缓存和射频数据接收缓存的起始地址也是相同的。 在系统数据的初始化一节中,已经将语音发送、接收缓存大 小设置为120,射频数据发射、接收缓存大小设置为144。即语音
发送和接
BUT+120处开
收的地址是从嗍BUF或RFRX
始的,
射频数据的发射地址是从RFTX BUF+144处开始的。可以看出射 频数据的发射地址比语音数据的发送地址多了14个字节,多出来 14个字节恰好是前同步字段、同步字段、通用寄存器的值、本机 号码、信道号、命令字段等信息。
结合上节对系统数据流控制模块的讨论,以下说明整个系统 在代码上是如何实现时分双工的㈨。 1.数据发送过程
首先调用CMX649 TRANSFER程序(该段程序不断处于运行
态,用于不断产生语音数据),将CMX649采样的语音数据不断送 往MSP430 的RXBUF0, 进而转移数据到
RFrX BUF(FROM649 a盯R)语音发送缓存中。其中
FROM649 CNTR为已经介绍过的接收CMX649的数据字节计数 器,当接收到60个字节时,初始化USARTl为从端SPI 3线模式 接口,并允许USARTl进行发送中断。
西南交通大学硕士研究生学位论文第32页
允许发送中断后,RFTX BUF(TORF CNTR)中的数据首先会
发送到TXBUFI,进而送至CC 1000,射频将在指定的信道上发送 该数据,其中TORF CNTR为前面已介绍过的发送至CCl000的 数据字节计数器,每接收一个字节,作减1操作,当TORF CNn己 减到O时则说明发送完毕一帧的数据,便关闭发送标志,并切换 至接收模式。
系统整个数据发送过程如图4-5所示。
需要说明的是,此处设置当接收到60个语音字节时便转为发 送状态,是为了减小时延,即不必等到一个周期内的语音全部送 到了语音发送缓存才开始启动射频。
发送数据到砌国UFO
I
<廷一I
设置发送标志位
上
启动射频的发送模式
‘J
I初始化USARTl为从端sPl3线模式 I接口,并允许usARTl的发送中断
上
RXRF_BUF中的数据 送至CCl000
关闭发送模式,并切 换至接收模式
图4.5系统数据发送过程 关键代码如下:
上是
MOV.B RXBUF0,RFTX_BUF(FROM649_CNTR)//将
RXBUF0的语音数据发送到RFTX_BUF(FROM649_CNTR)中。 西南交通大学硕士研究生学位论文第33页
CMP.W #BEGIN RFTX,FROM649 CNTR//比较是否接收 到60个字节
BIS。W #ENABLE RFTX,PROG
BIS.B #UTXIEl,IE2//初始化USARTl使能标志
MOV.B砌琅X..BUF(T0649 开始发送.CNTR)TXBUF0/ 数据 DEIAY
DEC.W TORF—CNTR
CMP 拌0FFFCH,TORF CNTR//比较是否发送完 JNE DEIAY
BIC.W #ENABLE RFTX,PROG FLAGS//清除发送标志 BIS.W #ENABLE RFRX,FROG FLAGS//开启接收标志 2.数据接收过程
首先将CCl000设置在接收模式下,则系统将在指定的信道上 进行数据接收。找到同步字节后,串行通信模块USARTl通过SPI 3线方式进行数据的接收,接收到的数据送到MSP430的RXBUFl 进而送到RFRX BUF(FROMRF CNTR)进行缓存。
FROMRF CNTR为接收CCl000的数据字节计数器,当
,
FROMRF
C舳l减到O后说明接收完毕,关闭接收标志,
并切换
到发送模式。
同时,MSP430还将RFRX BUF(T0649 CNTR)中接收的来自
CCl000的数据发送至TXBUFO,进而送到CMX649进行语音恢复。 系统整个数据接收过程如图4-6所示。 关键代码如下: BIS.B #USPIEl,ME2
BIS.B #URXIEl,IE2//开启接收模式 MOV.B R7,RFRX BUF(FROMRF 开始接收数据
.一
..CNTR)//DECW FROMRF CNTR
Ⅲ RFoIm∥判断是否接收完毕
RETI
RFoI兀2
BlC.B
BIC.B
BIC.W BIS.W
#URXIEl,IE2
#USPIEI,ME2//关闭接收模式
#ENABLE_RFRX,PROG_FLAGS∥清除接收标志 #ENABLE RFFX,PROG_FLAGS//开启发送标志 西南交通大学硕士研究生学位论文第34页
设置接收标志位 启动射频的接收模式
初始化US灿盯l为从端SPl3线模式
接口,并允许USARTl的接收中断
至土
完成数据同步操作 接收数据 是否已异步? 否
土墨
保存已同步的数据 到RXRF BUF中 7是否已接收完毕
絮?岁
'L是
图4_6系统数据接收过程
关闭接收模式,并 切换至发送模式
4.5.2同步信息检测过程
前面多次强调系统同步的重要性,可以说它是TDD实现方
式的关键,因为只有经过同步处理后的数据才是有效数据,才能 通过语音解码器解出正确的语音信号。
本系统的同步信息由两部分组成:一是前同步域由“0一和
“1一的长串组成,即设为5555H,它起到保护同步域的作用。同 步域由特定的同步块构成,根据定义的帧结构,分为2个子同步 块,子同步块l(表示为BLK SYNCl)设置为50,子同步块2(变量 表示为BLK SYNC2)设置为EC,这样可以使同步分步骤进行,也 起到了避免出现伪同步。由于射频芯片集成了位同步器,所以以 下只讨论块同步的检测过程。
西南交通大学硕士研究生学位论文第35页
同步检测过程:首先设置通用寄存器lM存放新接收到的字节, R7存放接收到的前一字节,R10作移位计数器,R1l用于记录达 到同步需要移位的位数,这样在下一字节到来时便直接进行所需 的移位读取数据域信息。 1.子同步块1的检测