基于TMS320VC5509芯片的语音采集系统.docx

上传人:b****8 文档编号:9883368 上传时间:2023-02-07 格式:DOCX 页数:20 大小:727.10KB
下载 相关 举报
基于TMS320VC5509芯片的语音采集系统.docx_第1页
第1页 / 共20页
基于TMS320VC5509芯片的语音采集系统.docx_第2页
第2页 / 共20页
基于TMS320VC5509芯片的语音采集系统.docx_第3页
第3页 / 共20页
基于TMS320VC5509芯片的语音采集系统.docx_第4页
第4页 / 共20页
基于TMS320VC5509芯片的语音采集系统.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

基于TMS320VC5509芯片的语音采集系统.docx

《基于TMS320VC5509芯片的语音采集系统.docx》由会员分享,可在线阅读,更多相关《基于TMS320VC5509芯片的语音采集系统.docx(20页珍藏版)》请在冰豆网上搜索。

基于TMS320VC5509芯片的语音采集系统.docx

基于TMS320VC5509芯片的语音采集系统

 

DSP作业

基于TMS320VC5509的语音处理系统

 

 

系统简要介绍:

语音信号的采集和播放是语音信号处理的基础, DSP是各种语音信号处理的平台。

TMS320VC55x DSP是德州仪器(TI)C5000 DSP系列里新的一代产品。

TMS320VC55x DSP系列主要特点是低功耗,非常适合在音频处理方面的应用。

TLV320AIC23(以下简称AIC23)是TI公司生产的一种高性能立体声音频编解码器, 该器件的数字传输字长可以是16、20、24、32bit,它支持8~96 kHz的采样率。

在数模转换器中的二阶多比特结构还可在采样率为96 kHz的情况下使信躁比达到100dB, 从而使得高质量的数字音频回放成为可能。

该芯片在回放中的功率消耗<23 mW。

因此,对于可移动的数字音频播放和录音使用中的模拟输入输出等应用系统,AIC23无疑是十分理想的选择。

综上所述,选择TMS320VC5509(以下简称VC5509)作为系统的核心处理器和控制器,利用A IC23采集语音信号,然后传送给VC5509。

系统硬件设计:

下图是系统的硬件结构框图, 系统主要包括VC5509和AIC23 两个模块。

系统硬件结构框图

利用VC5509的片上外设I2C(Inter-IntegratedCircuit,内部集成电路)模块配置AIC23的内部寄存器;通过VC5509的McBSP(Multichannel Buffered SerialPorts,多通道缓存串口)接收和发送采样的音频数据。

控制通道只在配置AIC23的内部寄存器时工作,而当传输音频数据时则处于闲置状态。

AIC23通过麦克风输入或者立体声音频输入采集模拟信号,并把模拟信号转化为数字信号,存储到DSP的内部RAM中,以便DSP处理。

当DSP完成对音频数据的处理以后,AIC23再把数字信号转化为模拟信号,这样就能够在立体声输出端或者耳机输出端听到声音。

 AIC23能够实现与VC5509DSP的McBSP端口的无缝连接,使系统设计更加简单。

接口的原理框图, 如下图所示。

AIC23与VC5509接口原理图

系统中AIC23的主时钟12MHz直接由外部的晶振提供。

MODE接数字地,表示利用I2C控制接口对AIC23传输控制数据。

CS接数字地, 定义了I2C总线上AIC23的外设地址,通过将CS接到高电平或低电平,可以选择A IC23作为从设备在I2C总线上的地址。

SCLK和SDIN是AIC23控制端口的移位时钟和数据输入端,分别与VC5509的I2C模块端口SCL和SDA相连。

收发时钟信号CLKX1和CLKR1由AIC23的串行数据输入时钟BCLK提供,并由A IC23的帧同步信号LRCIN、LRCOUT启动串口数据传输。

DX1和DR1分别与AIC23 的DIN和DOUT相连,从而完成VC5509与AIC23间的数字信号通信。

系统软件设计

语音信号在基于DSP的语音处理系统上处理过程的软件流程图如下:

程序流程图

要正确配置DSP的时钟发生器, 产生DSP工作的正常时钟频率,这一个步骤的关键就是数字琐相环PLL的应用。

I2C模块是TMS320VC55xx新增的片内集成外设, 通过I2C对TLV320AIC23进行编程控制,可以使DSP与I2C兼容设备通过该接口进行数据通信。

通过硬件和软件调试,最终成功采集到语音信号并播放出来, 可以在CCS软件中观察到采集到的语音信号的波形。

改变程序中的延迟参数,可以明显改变混响效果。

硬件电路设计

2.1总输入电路(自行总结设计)

从左到右各部分电路为:

话筒,开关,语音输入电路,UA741高增益放大电路,有源二阶带通滤波器。

2.2总输出电路(自行总结设计)

从左到右各部分电路为:

LM386高频功率放大器及其外围器件连接电路,语音输出电路,开关,扬声器。

2.3语音输入与语音输出电路

语音输入电路

      语音输出电路

语音信号通道包括模拟输入和模拟输出两个部分。

模拟信号的输入输出电路如图所示。

上图中MICBIAS 为提供的麦克风偏压,通常是3/4AVDD,MICIN为麦克风输入,可以根据需要调整输入增益。

下图中LLINEOUT 为左声道输出,RLINEOUT为右声道输出。

用户可以根据电阻阻值调节增益的大小,使语音输入输出达到最佳效果。

从而实现良好的模拟语音信号输入与模拟信号的输出。

 

一.程序设计

语音采集与回放:

externvoidInitC5402(void);

externvoidOpenMcBSP(void);

externvoidCloseMcBSP(void);

extern voidREADAD50(void);

externvoidWRITEAD50(void);

/***********************************************************************

**MainFunctionProgram

***********************************************************************/

#include"stdio.h"

 #include "math.h"

 #definepi3.1415926

void main(void)

{

int k=0;

ﻩintx_ad,y_da;

ﻩﻩint*px= (int*)0x3000;

int *py= (int*)0x3100;

//ﻩfor(; ;)

{ﻩﻩ

InitC5402();

ﻩOpenMcBSP();

 for(;;)

 {

// for(j=0;j<=4; j++)

ﻩ  {

READAD50();

ﻩﻩ

ﻩﻩpx=(int*)(0x3000);

ﻩﻩﻩx_ad =*px;

ﻩﻩﻩ

 

 ﻩﻩy_da=x_ad;

 py=(int*)(0x3100);

  ﻩﻩ*py = y_da;

 

ﻩﻩ

ﻩﻩWRITEAD50();

ﻩﻩk++;

ﻩﻩ  }

ﻩ}

ﻩﻩ 

ﻩ}

Asm文件:

.global_InitC5402

.global_OpenMcBSP

.global _CloseMcBSP 

.global_READAD50

ﻩ.global_WRITEAD50

ﻩ.includeMMRegs.h

_InitC5402:

ﻩNOP

ﻩLD #0, DP;resetdata–page pointer

ﻩSTM#0,CLKMD ;softwaresettingofDSPclock

STM#0,CLKMD ;(todividermodebeforesetting)

TstStatu1:

 LDMCLKMD, A

  AND#01b, A ;pollSTATUS bit

 BCTstStatu1,ANEQﻩ

STM#0xF7ff, CLKMD;set C5402DSPclockto10MHzﻩ

*STM#0x4007, CLKMD; setC5402DSPclock to 100MHz

; (basedonDSK crystalat20MHz)

******* ConfigureC5402SystemRegisters*******

STM#0x2000, SWWSR ;2waitcycle forIOspace&

; 0 waitcyclefordata&prog spaces

ﻩSTM#0x0000,BSCR ;setwait statesforbankswitch:

; 64k membank,extra0cyclebetween

;consecutiveprog/data read

;STM#0x1800,ST0; ST0 at defaultsetting

;ﻩSTM#0x2900,ST1 ; ST1atdefaultsetting(note:

INTX=1)

;STM#0x00A0,PMST;MCmode&OVLY=1,vectorsat0080h

*******SetupTimerControlRegisters*******

ﻩSTM#0x0010,TCR; stop on–chip timer0

ﻩSTM#0x0010,TCR1; stopon–chiptimer1

;Timer0 isusedasmain looptimer

;ﻩSTM #2499,PRD; timer0 rate=CPUCLK/1/(PRD+1)

; =40M/2500=16KHz

*STM#6249,PRD;ifCPUat100M/6250=16KHz 

 

*******InitializeMcBSP1 Registers*******

ﻩSTM SPCR1, McBSP1_SPSA; registersubaddrofSPCR1

STM#0000h,McBSP1_SPSD;McBSP1recv=left–justify

;RINT generatedby frame sync

ﻩSTMSPCR2,McBSP1_SPSA;registersubaddr for SPCR2

;XINTgeneratedbyframesync

ﻩSTM #0000h,McBSP1_SPSD;McBSP1 Tx=FREE(clock stops

;to runafterSWbreakpoint

ﻩSTM RCR1,McBSP1_SPSA ;registersubaddrofRCR1

ﻩSTM#0040h,McBSP1_SPSD;recvframe1 Dlength=16bits

STMRCR2,McBSP1_SPSA ;register subaddrof RCR2

STM#0040h,McBSP1_SPSD; recvPhase=1

;retframe2 Dlength=16bits

STMXCR1,McBSP1_SPSA; registersubaddr of XCR1

ﻩSTM#0040h,McBSP1_SPSD ; set thesameasrecv

STMXCR2, McBSP1_SPSA;registersubaddrofXCR2

STM#0040h,McBSP1_SPSD;setthesameasrecv

ﻩSTMPCR, McBSP1_SPSA;registersubaddress of PCR

ﻩSTM#000eh,McBSP1_SPSD; clkandframe fromexternal(slave)

;FSatpulse–mode(00)

******* FinishDSPInitialization*******

STM#0x0000,IMR ;disableperipheral interrupts

ﻩSTM#0xFFFF, IFR;cleartheintrupts’flags

RET;return to main

NOP

NOP

******* WaitingforMcBSP0RXFinished*******

IfRxRDY1:

NOP

STMSPCR1,McBSP1_SPSA;enableMcBSP1Rx

ﻩLDMMcBSP1_SPSD,A

ﻩAND#0002h, A;maskRRDYbit

BCIfRxRDY1,AEQ; keep checking

ﻩNOP

ﻩNOP

RET; return

NOP

NOP

*******WaitingforMcBSP0TXFinished*******

IfTxRDY1:

ﻩNOP

STMSPCR2,McBSP1_SPSA;enable McBSP1Tx

LDMMcBSP1_SPSD, A

ﻩAND#0002h, A ;maskTRDYbit

BC IfTxRDY1, AEQ; keepchecking 

ﻩNOP

NOP

RET ;return

ﻩNOP

NOP

******************************************

******************************************

_OpenMcBSP:

rsbxxf

ﻩcallwait

NOP

STMSPCR1,McBSP1_SPSA; enableMcBSP0RX for ADCdata in

LDMMcBSP1_SPSD,A

OR#0x0001, A

STLMA, McBSP1_SPSD

ﻩSTMSPCR2,McBSP1_SPSA;enableMcBSP0TXforDTMFout

LDMMcBSP1_SPSD,A

OR#0x0001, A

STLM A,McBSP1_SPSD

ﻩLD #0h,DP ;loaddatapage0

ﻩrpt#23

ﻩNOP 

 

ssbxxf

NOP

NOP

;ﻩCALLIfTxRDY1

;STM#0x0101, McBSP1_DXR1

;ﻩCALLIfTxRDY1

;ﻩSTM#0x0208,McBSP1_DXR1

;;ﻩrsbxxf

;;NOP

;;NOP 

 CALLIfTxRDY1

STM#0x0001,McBSP1_DXR1;requestsecondarycommunication

NOP

ﻩCALLIfTxRDY1 

ﻩSTM#0100h,McBSP1_DXR1;write00hto register1

ﻩCALLIfTxRDY1

STM#0000h,McBSP1_DXR1 

NOP

NOP

rpt#20h

ﻩnop

  

ﻩCALLIfTxRDY1

STM#0x0001,McBSP1_DXR1;requestsecondary communication

CALLIfTxRDY1

ﻩSTM#0200h,McBSP1_DXR1;write00htoregister2

CALLIfTxRDY1

ﻩSTM#0000h,McBSP1_DXR1ﻩ

  

ﻩCALLIfTxRDY1

ﻩSTM #0x0001,McBSP1_DXR1;requestsecondarycommunication

CALL IfTxRDY1 

ﻩSTM #0300h,McBSP1_DXR1;write00h toregister3

CALLIfTxRDY1

STM#0000h,McBSP1_DXR1

 CALLIfTxRDY1

STM #0x0001,McBSP1_DXR1;requestsecondarycommunication

CALL IfTxRDY1

STM#0490h,McBSP1_DXR1;write00hto register4

ﻩﻩﻩﻩ;bypassinternalDPLL

ﻩﻩﻩﻩﻩﻩ;andselect theSampleFrequency

ﻩCALLIfTxRDY1

STM#0000h, McBSP1_DXR1 

;ﻩCALLIfTxRDY1

;STM#0x0001,McBSP1_DXR1

;ﻩCALL IfTxRDY1

;STM#0102h,McBSP1_DXR1;enabledigitalloopback 

ﻩﻩ

;ﻩCALL IfTxRDY1

;ﻩSTM#0x0001, McBSP1_DXR1

;CALLIfTxRDY1

;ﻩSTM#0208h,McBSP1_DXR1;enable analog loopback

ﻩRET

NOP

ﻩNOP

*********************

_CloseMcBSP:

ﻩSTMSPCR1, McBSP1_SPSA;disableMcBSP0 RX

LDMMcBSP1_SPSD,A

ﻩAND#0xFFFE, A

STLMA,McBSP1_SPSD

STMSPCR2,McBSP1_SPSA;disableMcBSP0 TX

ﻩLDMMcBSP1_SPSD,A

AND#0xFFFE,A

ﻩSTLMA,McBSP1_SPSD

RPT #5

RET

NOP

ﻩNOP

 

_READAD50:

stmﻩ0x00ff,ar3

ﻩstmﻩ0x3000,ar2

loopa:

ﻩCALLIfRxRDY1

ldm McBSP1_DRR1,b

ﻩstlﻩb,*ar2+

; banzloopa,*ar3- 

 

ﻩnop

nop

ret

nop

nop

_WRITEAD50:

stm0x00ff,ar3

ﻩstmﻩ0x3100,ar2

loopb:

CALLIfTxRDY1 

ﻩldu*ar2+,B

ﻩand  #0fffeh,b;masktheLSB

stlm B,McBSP1_DXR1

;ﻩbanzloopb,*ar3-

nop

nop

ﻩret

nop

nop

wait:

ﻩstm 20h,ar3

loop1:

   

ﻩstm020h,ar4

loop2:

banzﻩloop2,*ar4-

ﻩbanz loop1,*ar3-

ret 

ﻩnop

nop

ﻩnop

ﻩnop

.end

A/D模块:

xternvoidInitC5402(void);

externvoidOpenMcBSP(void);

externvoid CloseMcBSP(void);

externvoidREADAD50(void);

 

/***********************************************************************

**Main FunctionProgram

***********************************************************************/

voidmain(void)

InitC5402();

OpenMcBSP(); 初始化串口和AD50C

while

(1)

{

READAD50(); 

}

 

D/A模块:

extern voidInitC5402(void);

externvoidOpenMcBSP(void);

extern void CloseMcBSP(void);

externvoid WRITEAD50(void);

/***********************************************************************

**MainFunction Program

***********************************************************************/

voidmain(void)

{    

InitC5402();

OpenMcBSP();

 

while (1)

{

WRITEAD50(); 

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1