首页> 中国专利> 用SPI接口实现PCM信息交互的方法及语音终端设备

用SPI接口实现PCM信息交互的方法及语音终端设备

摘要

著录项

  • 公开/公告号CN103051817A

    专利类型发明专利

  • 公开/公告日2013-04-17

    原文格式PDF

  • 申请/专利权人 苏州鼎尚信息技术有限公司;

    申请/专利号CN201110310547.8

  • 发明设计人 李勇;

    申请日2011-10-14

  • 分类号H04M7/00;H04L29/10;G06F13/28;

  • 代理机构苏州华博知识产权代理有限公司;

  • 代理人傅靖

  • 地址 215000 江苏省苏州市苏州工业园区星湖街328号创意产业园15-407单元

  • 入库时间 2024-02-19 18:48:14

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-10-08

    未缴年费专利权终止 IPC(主分类):H04M7/00 授权公告日:20140507 终止日期:20181014 申请日:20111014

    专利权的终止

  • 2014-05-07

    授权

    授权

  • 2013-06-19

    专利申请权的转移 IPC(主分类):H04M7/00 变更前: 变更后: 登记生效日:20130529 申请日:20111014

    专利申请权、专利权的转移

  • 2013-05-15

    实质审查的生效 IPC(主分类):H04M7/00 申请日:20111014

    实质审查的生效

  • 2013-04-17

    公开

    公开

说明书

技术领域

本发明属于数字通信领域,具体涉及一种使用SPI接口实现PCM信息交互的方法及使用该方法的语音终端设备。

背景技术

语音是语言的声学表现,是人类交流信息最自然、最有效、最方便的手段,也是人类进行思维的一种依托。语音业务的传输始终是通信系统中最重要、最基本的核心功能之一,即便是在倡导多媒体业务的第三代甚至第四代数字移动通信系统中,语音业务也仍然是其主导业务。

PCM是脉冲编码调制(Pulse Code Modulation)的英文缩写,即对话音信号进行脉冲采样、数字量化、编码的过程。电话语音信号的频带限制在300Hz—3400Hz,为了将模拟的语音信号数字化,首先要对模拟信号进行脉冲采样(时间量化),根据采样定理,对语音信号采样脉冲的频率至少为语音信号频率的两倍,CCITT标准规定为8kHz。然后再对采样得到的PAM脉冲进行幅度量化,每个脉冲幅度用8bit表示,这样每一路电话信号的PCM编码速率为8k×8bit=64kb/s。PCM信号被广泛用在电话交换机、网络电话机、光端机、综合接入设备、综合复用设备中。

在普通固定电话网中,电话机采集到模拟语音经电话线传输到局用交换机后才需要进行PCM编码,因此作为通信终端的电话机并不涉及PCM的数字编码与传输。随着通信向智能化、网络化方向发展,出现了越来越多的数字终端,如ISDN终端、移动电话、网络电话机等。语音的数字化可以直接在终端上完成,众多的专门的PCM编解码的集成电路芯片也应运而生,如华邦的W681512就是一款专门为终端设备进行语音PCM编解码的芯片。与此同时,微控制器普遍缺乏专门的PCM通信接口,这就需要微控制器能使用普通的通信接口完成与PCM编解码芯片的信息交互。

SPI是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI是一种高速的,全双工,同步的通信总线,可处理多个连接到指定总线上的主机和从机。芯片的管脚上只占用四根线,节约了芯片的管脚。该接口一般使用4条线,串行时钟线(SCK),主机输入/从机输出线(MISO),主机输出/从机输入线(MOSI),从机选择线(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数据收发,相比于使用主机接口时每0.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公司市场价低于1个美元的MCU芯片LPC11U14,PCM编解码芯片使用华邦的W681512。LPC11U114内核使用COMTEX-M0技术,运行速度可以达到50M,具有32K片内FLASH,8K片内SRAM,集成片上PHY的USB2.0接口,完成满足USB电话的需求。W681512是应用于语音、模拟转数字、数字转模拟的单通道CODEC,以全差动输出功能来将噪音最小化,符合ITU-T G.711工业标准。为进一步节省成本,SPI接口需要的外部时钟源由LPC11U14自己提供,分别由定时器1提供2M的CLK时钟,由定时器0提供8K的帧同步时钟,定时器在设定完成后会自主的产生时钟,而不需要微控制器本身参与。2M的CLK时钟分别接到LPC11U14的SCK1,W681512的BCLKR和BCLKT。8K的帧同步时钟分别接到LPC11U14的SSEL1,W681512的FSR和FST。将LPC11U14的MOSI1与W681512的PCMT连接,将LPC11U14的MISO1与W681512的PCMR连接。这样就构成了一个完整的双从机模式的SPI接口连接。具体电路图如图2、图3所示。在软件上,将LPC11U14的SPI1接口设置为从机模式,为SPI1设置好中断处理函数,在中断处理函数中,分别对SPI1接口进行读、写操作,完成与PCM编码器的数据交互。为进一步提高效率,实际设计时,将SPI1接口配置成DMA方式,这样,每收发160个字节的数据,相当于每20个毫秒才需要微控制器参于进行一次操作,最大程度减少了微控制器的运算量。经测试,使用双从机模式,与PCM编码器交互64kbits/s的G.711格式数据时,只占用整个CPU占用率的5%,收、发数据无差错,完全满足设计要求。

对SPI1对初始化的代码实例:

void ssp1Init(void)

{

    /* Set DSS data to 8-bit, Frame format TI, CPOL = 0, CPHA = 0*/

    SSP1CR0 = 0x0017;

    /* SSPCPSR clock prescale register, master mode, minimum divisor is 0x02 */

    SSP1CPSR = 18;

    SSP1IMSC = 0x04;  // 启动发送和接收

    SSP1CR1 = 0x06

    SSP1DMACR = 0x03;

}

对SPI1使用的DMA的初始化实例

void gpdmaInit(void)

{

    start2MClock();   

    start8KFrame();

    ssp1Init();

    PCONP |= (1 << 29);

    GPDMA_INT_TCCLR = 0x03;

    GPDMA_INT_ERR_CLR = 0x03;

    GPDMA_CONFIG = 0x01;    /* Enable DMA channels, little endian */

    while (!(GPDMA_CONFIG & 0x01));    

    g_gpdmaSndHead = 0;

    g_gpdmaSndTail = 0;

    g_gpdmaRcvHead = 0;

    g_gpdmaRcvTail = 0;

    // 启动接收DMA

    GPDMA_CH1_SRC = DMA_SSP1DR;

    GPDMA_CH1_DEST = GPDMA_RECV_BUF_ADDR;

    GPDMA_CH1_LLI = 0;

    GPDMA_CH1_CTRL = GPDMA_BLOCK_SIZE | (0x01 << 12) | (0x01 << 15)| (1 << 27) | 0x80000000;

    GPDMA_CH1_CFG = (0x0C001 | 0x03 << 1 | 0x00 << 6 | 0x02 << 11);

}

SPI1接口所属DMA的收、发中断实例

void gpdmaIsr(void) __irq

{

    ULONG intStatus, intTcStatus, intErrorStatus, next;

    intStatus = GPDMA_INT_STAT;

    intTcStatus = GPDMA_INT_TCSTAT;

    intErrorStatus = GPDMA_INT_ERR_STAT;

    if (intStatus & 0x01)

    {

        // DMA通道0有中断

        if (intErrorStatus & 0x01)

        {

            GPDMA_INT_ERR_CLR = 0x01;

        }

        if (intTcStatus & 0x01)

        {

            GPDMA_INT_TCCLR = 0x01;

        }

    }

    if (intStatus & 0x02)

    {

         // DMA通道1有中断

        if (intErrorStatus & 0x02)

        {

            GPDMA_INT_ERR_CLR = 0x02;

        }

        if (intTcStatus & 0x02)

        {

            //g_gpdmaRcvKeep++;

            next = g_gpdmaRcvTail + 1;

            if (next >= GPDMA_RCV_BLOCK_NUM)

            {

                next = 0;

            }

            if (next != g_gpdmaRcvHead)

            {

                // 接收BUFFER还有空

                g_gpdmaRcvTail = next;

            }

            else

            {

                g_gpdmaRcvHead = 0;

                g_gpdmaRcvTail = 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)| (1 << 27) | 0x80000000;

            // 在接收到数据的同时,发送数据。

            if (g_gpdmaSndHead == g_gpdmaSndTail)

            {

                  memset((UCHAR *)(GPDMA_ECHO_BUF_ADDR+g_gpdmaRcvTail*GPDMA_BLOCK_SIZE),

                       0xD5, GPDMA_BLOCK_SIZE);

            }

            else

            {

                // 将发送的声音作为回声保留

                memcpy((UCHAR *)(GPDMA_ECHO_BUF_ADDR+g_gpdmaRcvTail*GPDMA_BLOCK_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_BLOCK_SIZE;

            GPDMA_CH0_DEST = DMA_SSP1DR;

            GPDMA_CH0_LLI = 0;

            GPDMA_CH0_CTRL = GPDMA_BLOCK_SIZE | (0x01 << 12) | (0x01 << 15)| (1 << 26) | 0x80000000;

            GPDMA_CH0_CFG = (0x04001 | 0x00 << 1 | 0x02 << 6 | 0x01 << 11);

            GPDMA_CH1_CFG = (0x0C001 | 0x03 << 1 | 0x00 << 6 | 0x02 << 11);

            OSEventSnd(2); // 通知应用层任务接收数据

            GPDMA_INT_TCCLR = 0x02;

        }

    }        

    VICVectAddr = 0;           /* Acknowledge Interrupt */

    OSIntExit();

}

本发明的优点是将微控制的SPI接口配置成从机接口,则无需提供SPI交互操作的时序。再加上微控制器的SPI控制器都有若干字节的收发缓冲,只有在SPI控制器接收数据到达一定的FIFO深度后,才需要微控制器参于数据的收发,因此在从机模式下,SPI收发需要的CPU运算量不到主机模式的十分之一,再进一步,如果使用DMA控制器参与PCM信息的收发,微控制器只需要每20MS参与一次PCM数据收发,相比于使用主机接口时每0.125MS参与一次收发,SPI从机接口执行收发的频度只有原先的1/160,将极大的释放微控制器的运算量,也让使用更低的微控制器成为可能。适用于大量低端8位、16位、32位微处理器,让研制更灵活、廉价的语音终端设备成为可能。根据该方案研制的语音终端设备实现了灵活、廉价的要求。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号