用spi接口实现pcm信息交互的方法及语音终端设备的制作方法

文档序号:7938828阅读:1654来源:国知局
专利名称:用spi接口实现pcm信息交互的方法及语音终端设备的制作方法
技术领域
本发明属于数字通信领域,具体涉及一种使用SPI接口实现PCM信息交互的方法及使用该方法的语音终端设备。
背景技术
语音是语言的声学表现,是人类交流信息最自然、最有效、最方便的手段,也是人类进行思维的一种依托。语音业务的传输始终是通信系统中最重要、最基本的核心功能之一,即便是在倡导多媒体业务的第三代甚至第四代数字移动通信系统中,语音业务也仍然是其主导业务。PCM是脉冲编码调制(Pulse Code Modulation)的英文缩写,即对话音信号进行脉冲采样、数字量化、编码的过程。电话语音信号的频带限制在300Hz —3400Hz,为了将模拟的语音信号数字化,首先要对模拟信号进行脉冲采样(时间量化),根据采样定理,对语音信号采样脉冲的频率至少为语音信号 频率的两倍,CCITT标准规定为8kHz。然后再对采样得到的PAM脉冲进行幅度量化,每个脉冲幅度用8bit表示,这样每一路电话信号的PCM编码速率为8kX8bit=64kb/s。PCM信号被广泛用在电话交换机、网络电话机、光端机、综合接入设备、综合复用设备中。在普通固定电话网中,电话机采集到模拟语音经电话线传输到局用交换机后才需要进行PCM编码,因此作为通信终端的电话机并不涉及PCM的数字编码与传输。随着通信向智能化、网络化方向发展,出现了越来越多的数字终端,如ISDN终端、移动电话、网络电话机等。语音的数字化可以直接在终端上完成,众多的专门的PCM编解码的集成电路芯片也应运而生,如华邦的W681512就是一款专门为终端设备进行语音PCM编解码的芯片。与此同时,微控制器普遍缺乏专门的PCM通信接口,这就需要微控制器能使用普通的通信接口完成与PCM编解码芯片的信息交互。SPI是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI是一种高速的,全双工,同步的通信总线,可处理多个连接到指定总线上的主机和从机。芯片的管脚上只占用四根线,节约了芯片的管脚。该接口一般使用4条线,串行时钟线(SCK),主机输入/从机输出线(MISO),主机输出/从机输入线(M0SI),从机选择线(SSEL)。在数据传输中,主机总是会向从机发送一帧8到16个位的数据,而从机也总会向主机发送一帧字节数据。在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。一个SPI通信系统中,必须有主机。SPI总线可以配置成单主单从,单主多从。语音终端设备的微控制器与PCM编码器之间一般会通过专门PCM通讯接口进行,在语音通讯设备的研制过程中,严重限制了对微控制器的选择。对于没有PCM通讯接口的微处理器,可以使用SPI主机接口模拟PCM通讯接口,但这种方法仍将大量占用微控制的运算量,并不适用于大量的低成本微控制器。一个SPI通信系统中,必须有主机。外围的PCM编解码芯片提供的是SPI从机接口,需要微控制器提供SPI主机接口与PCM编解码连接。使用SPI接口传输64Kbits/s速率的G. 711编码语音信息时,每秒需要8K次数据交互,而每次交互都需要微控制器参与时序的控制和数据的传输,显然将极大的占用微控制器的资源,而很多低端的微控制器则根本无法完成这样的操作。

发明内容
本发明目的是提供一种可以极大减少微控制器的运算量,降低对微控制器的要求的使用SPI接口实现PCM信息交互的方法及采用该方法的语音终端设备。本发明的技术方案是一种使用SPI接口实现PCM信息交互的方法,将微控制器的SPI接口与PCM编解码芯片的SPI接口连接,其特征在于,所述微控制器的SPI接口和PCM编解码芯片的SPI接口都设为从机接口,由外部时钟源提供SPI主机接口时钟。交互PCM信息的过程没有实际的SPI主机接口参与,而仅通过两个SPI从机接口独立自主的完成,最大程度降低微控制器在PCM信息收发过程中的运算量。一种语音终端设备,包括微控制器和PCM编解码器,其特征在于,还包括可以提供SPI主机接口时钟的外部时钟源,所述外部时钟源与PCM编解码器的SPI接口以及被设为从机接口的微控制器的SPI接口相连。进一步的,所述外部时钟源是所述微控制器内置的定时器。进一步的,所述微控制器为使用直接内存存取方式完成对SPI外设接口的数据收发的微控制器。所述微控制器使用直接内存存取方式完成对SPI外设接口的数据收发,从而进一步的减少数据交换量。工作原理将微控制器的SPI接口也配置成从机接口,然后由外部时钟源提供SPI接口时钟。这样,原本微控制器SPI主机接口与PCM编码器之间点对点的主机连接,变成了虚拟SPI主机接口(不参与数据交互,只提供时钟)、微控制机SPI从机接口、PCM编码器组成的一主二从的三方连 接。与传统的一主多从连接方法不同的是,传统连接方法从机都只与主机交互数据,而在本方法中,两个从机都并不与主机交互数据,而只在主机提供的SPI时序下与另外一个从机交互数据。这样就实现了,虚拟SPI主机只提供时序,而两个SPI从机遵循SPI时序相互间实现独立自主的交互数据。从另外一个角度,微控制机和PCM编码器,任何一个SPI从机都将对方视为SPI主机,都认为SPI时序是由对方提供的,而只需要在SPI时序下,完成简单的SPI从机操作即可。本发明的优点是将微控制的SPI接口配置成从机接口,则无需微控制器提供SPI交互操作的时序。再加上微控制器的SPI控制器都有若干字节的收发缓冲,只有在SPI控制器接收数据到达一定的FIFO深度后,才需要微控制器参于数据的收发,因此在从机模式下,SPI收发需要的CPU运算量不到主机模式的十分之一,将极大的释放微控制器的运算量,也让使用更低的微控制器成为可能。适用于大量低端8位、16位、32位微处理器,让研制更灵活、廉价的语音终端设备成为可能。根据该方案研制的语音终端设备实现了灵活、廉价的要求。进一步的,微控制器使用SPI从机接口进行数据收发时不需要提供SPI时序,则为微控制器使用DMA控制器参与SPI接口的数据收发提供可能。在使用DMA控制器时,微控制器只需要每20MS参与一次PCM数据收发,相比于使用主机接口时每O. 125MS参与一次收发,SPI从机接口执行收发的频度只有原先的1/160,将最大程度释放微控制器的运算量。


下面结合附图及实施例对本发明作进一步描述
图1为本发明的使用SPI接口实现PCM信息交互的方法方框图。图2为本发明的实施例实际电路图。图3为本发明的实施例实际电路图。
具体实施例方式如图1所示,将微控制器的SPI接口也配置成从机接口,然后由外部时钟源(时钟分频器)提供SPI主机接口时钟。这样,原本微控制器SPI主机接口与PCM编码器之间点对点的主机连接,变成了虚拟SPI主机接口(不参与数据交互,只提供时钟)、微控制机SPI从机接口、PCM编码器组成的一主二从的三方连接。与传统的一主多从连接方法不同的是,传统连接方法从机都只与主机交互数据,而在本方法中,两个从机并不与主机交互数据而只与另外一个从机交互数据。这样就实现了,虚拟SPI主机只提供时序,而两个SPI从机间实现自主交互数据。从另外一个角度,微控制机和PCM编码器,任何一个SPI从机都将对方视为SPI主机,都对认SPI时序是对方提供的,而只需要在SPI时序下,完成简单的SPI从机操作即可。为进一进说明双从机模式SPI接口通讯方法的有效性,我们以USB电话方案为例作一步阐述。微控制器芯片使用NXP公司市 场价低于I个美元的MCU芯片LPCl 1U14,PCM编解码芯片使用华邦的W681512。LPClIUl 14内核使用C0MTEX-M0技术,运行速度可以达到50M,具有32K片内FLASH,8K片内SRAM,集成片上PHY的USB2. O接口,完成满足USB电话的需求。W681512是应用于语音、模拟转数字、数字转模拟的单通道CODEC,以全差动输出功能来将噪音最小化,符合ITU-T G. 711工业标准。为进一步节省成本,SPI接口需要的外部时钟源由LPC11U14自己提供,分别由定时器I提供2M的CLK时钟,由定时器O提供8K的帧同步时钟,定时器在设定完成后会自主的产生时钟,而不需要微控制器本身参与。2M的CLK时钟分别接到LPCl 1U14的SCK1,W681512的BCLKR和BCLKT。8K的帧同步时钟分别接到 LPCl 1U14 的 SSELl ,W681512 的 FSR 和 FST。将 LPC11U14 的 MOSIl 与 W681512 的 PCMT 连接,将LPC11U14的MISOl与W681512的PCMR连接。这样就构成了一个完整的双从机模式的SPI接口连接。具体电路图如图2、图3所示。在软件上,将LPC11U14的SPIl接口设置为从机模式,为SPIl设置好中断处理函数,在中断处理函数中,分别对SPIl接口进行读、写操作,完成与PCM编码器的数据交互。为进一步提高效率,实际设计时,将SPIl接口配置成DMA方式,这样,每收发160个字节的数据,相当于每20个毫秒才需要微控制器参于进行一次操作,最大程度减少了微控制器的运算量。经测试,使用双从机模式,与PCM编码器交互64kbits/s的G. 711格式数据时,只占用整个CPU占用率的5%,收、发数据无差错,完全满足设计要求。对SPIl对初始化的代码实例 void sspllnit(void)
{
/* Set DSS data to 8-bit, Frame format TI, CPOL = 0, CPHA = 0*/SSPICRO = 0x0017;
/* SSPCPSR clock prescale register, master mode, minimum divisor is
0x02 */
SSP1CPSR = 18;
SSPIIMSC = 0x04; //启动发送和接收 SSP1CR1 = 0x06 SSPIDMACR = 0x03;
}
对SPIl使用的DMA的初始化实例 void gpdmalnit(void)
{
start2MClock O ; start8KFrame (); sspllnit0 ;
PCONP I= (I 29);
GPDMA_INT_TCCL R = 0x03;
GPDMA_INT_ERR_CLR = 0x03;
GPDMA_C0NFIG = 0x01; /* Enable DMA channels, little endian */
while (!(GPDMA_C0NFIG & 0x01));
g_gpdmaSndHead = 0;
g_gpdmaSndTail = 0;
g_gpdmaRcvHead = 0;
g_gpdmaRcvTaiI = 0;
Il启动接收DMA GPDMA_CH1_SRC = DMA_SSP1DR;
GPDMA_CH1_DEST = GPDMA_RECV_BUF_ADDR;
GPDMA_CH1_LLI = 0;
GPDMA_CH1_CTRL = GPDMA_BL0CK_SIZE | (0x01 12) | (0x01 15)| (I 〈〈27) I 0x80000000;
GPDMA_CH1_CFG = (OxOCOOl | 0x03 I | 0x00 6 | 0x02 11);
}
SPIl接口所属DMA的收、发中断实例 void gpdmalsr(void) —irq
{
ULONG intStatus, intTcStatus, intErrorStatus, next;intStatus = GPDMA_INT_STAT;intTcStatus = GPDMA_INT_TCSTAT;intErrorStatus = GPDMA_INT_ERR_STAT;if (intStatus & 0x01){
Il DMA通道O有中断if (intErrorStatus & 0x01)
{
GPDMA_INT_ERR_CLR = 0x01;
}
if (intTcStatus & 0x01)
{
GPDMA_INT_TCCLR = 0x01;
}
}
if (intStatus & 0x02)
{
Il DMA通道I有中断if (intErrorStatus & 0x02)
{
GPDMA_INT_ERR_CLR = 0x02;
}
if (intTcStatus & 0x02)
{
//g_gpdmaRcvKeep++;
next = g_gpdmaRcvTaiI + I;
if (next >= GPDMA_RCV_BLOCK_NUM)
{
next = 0;
}
if (next != g_gpdmaRcvHead)
{
Il接收BUFFER还有空 g_gpdmaRcvTaiI = next;
}
else
{
g_gpdmaRcvHead = 0;g_gpdmaRcvTaiI = 0; }
GPDMA_CH1_SRC = DMA_SSP1DR;
GPDMA_CH1_DEST = GPDMA_RECV_BUF_ADDR+g_gpdmaRcvTail*GPDMA_
BLOCK_SIZE;GPDMA_CH1_LLI = 0;
GPDMA_CH1_CTRL = GPDMA_BLOCK_SIZE | (0x01 12) | (0x01 15)I (I 27) I 0x80000000;
Il在接收到数据的同时,发送数据。if (g_gpdmaSndHead == g_gpdmaSndTail)
{
memset((UCHAR *) (GPDMA_ECHO_BUF_ADDR+g_
gpdmaRcvTai1*GPDMA_BL0CK_SIZE),
0xD5, GPDMA_BLOCK_SIZE);
}
else
{
Il将发送的声音作为回声保留
memcpy((UCHAR *) (GPDMA_ECHO_BUF_ADDR + g_gpdmaRcvTai1*GPDMA_BL0CK_SIZE),
(UCHAR *) (GPDMA_SEND_BUF_ADDR+g_
gpdmaSndHead*GPDMA_BLOCK_SIZE),
GPDMA_BLOCK_SIZE);g_gpdmaSndHead++;
if (g_gpdmaSndHead >= GPDMA_SND_BLOCK_NUM)
{
g_gpdmaSndHead = 0;
}
}
//启动发送DMA
GPDMA_CH0_SRC = GPDMA_ECHO_BUF_ADDR+g_gpdmaRcvTail*GPDMA_
BL0CK_SIZE;
GPDMA_CH0_DEST = DMA_SSP1DR;
GPDMA_CH0_LLI = 0;`
GPDMA_CH0_CTRL = GPDMA_BLOCK_SIZE | (0x01 12) | (0x01 15)I (I 26) I 0x80000000;
GPDMA_CH0_CFG = (0x04001 | 0x00 I | 0x02 6 | 0x01 11);GPDMA_CH1_CFG = (OxOCOOl | 0x03 I | 0x00 6 | 0x02 11);OSEventSnd (2) ; //通知应用层任务接收数据GPDMA_INT_TCCLR = 0x02;
}
}
VICVectAddr = O;/* Acknowledge Interrupt */
OSIntExit ();}
本发明的优点是将微控制的SPI接口配置成从机接口,则无需提供SPI交互操作的时序。再加上微控制器的SPI控制器都有若干字节的收发缓冲,只有在SPI控制器接收数据到达一定的FIFO深度后,才需要微控制器参于数据的收发,因此在从机模式下,SPI收发需要的CPU运算量不 到主机模式的十分之一,再进一步,如果使用DMA控制器参与PCM信息的收发,微控制器只需要每20MS参与一次PCM数据收发,相比于使用主机接口时每O. 125MS参与一次收发,SPI从机接口执行收发的频度只有原先的1/160,将极大的释放微控制器的运算量,也让使用更低的微控制器成为可能。适用于大量低端8位、16位、32位微处理器,让研制更灵活、廉价的语音终端设备成为可能。根据该方案研制的语音终端设备实现了灵活、廉价的要求。
权利要求
1.一种使用SPI接口实现PCM信息交互的方法,将微控制器的SPI接口与PCM编解码芯片的SPI接口连接,其特征在于,所述微控制器的SPI接口和PCM编解码芯片的SPI接口都设为从机接口,由外部时钟源提供SPI主机接口时钟,交互PCM信息的过程没有实际的SPI主机接口参与,而仅通过两个SPI从机接口独立自主的完成。
2.一种语音终端设备,包括微控制器和PCM编解码器,其特征在于,还包括可以提供SPI主机接口时钟的外部时钟源,所述外部时钟源与PCM编解码器的SPI接口以及被设为从机接口的微控制器的SPI接口相连。
3.根据权利要求2所述的语音终端设备,其特征在于,所述外部时钟源是所述微控制器内置的定时器。
4.根据权利要求2所述的语音终端设备,其特征在于,所述微控制器为使用直接内存存取方式完成对SPI外设接口的数据收发的微控制器。
全文摘要
本发明公开了一种使用SPI接口实现PCM信息交互的方法,将微控制器的SPI接口与PCM编解码芯片的SPI接口连接,其特征在于,所述微控制器的SPI接口和PCM编解码芯片的SPI接口都为从机接口,由外部时钟源提供SPI主机接口时钟。在从机模式下,SPI收发需要的CPU运算量不到主机模式的十分之一,将极大的释放微控制器的运算量,也让使用更低的微控制器成为可能。适用于大量低端8位、16位、32位微处理器,让研制更灵活、廉价的语音终端设备成为可能。并据此提供了一种语音终端设备。
文档编号H04M7/00GK103051817SQ20111031054
公开日2013年4月17日 申请日期2011年10月14日 优先权日2011年10月14日
发明者李勇 申请人:苏州鼎尚信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1