TLV320AIC23芯片的介绍与应用实验

上传人:无*** 文档编号:242458599 上传时间:2024-08-24 格式:PPTX 页数:82 大小:809.53KB
返回 下载 相关 举报
TLV320AIC23芯片的介绍与应用实验_第1页
第1页 / 共82页
TLV320AIC23芯片的介绍与应用实验_第2页
第2页 / 共82页
TLV320AIC23芯片的介绍与应用实验_第3页
第3页 / 共82页
点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,单击此处编辑母版标题样式,第5章 立体声芯片TLV320AIC23的应用,第5章 立体声芯片TLV320AIC23的 应用,5.1,TLV320AIC23芯片介绍,5.2,TLV320AIC23应用实验,5.1.1 TLV320AIC23特点介绍,TLV320AIC23是TI公司生产的具有高度完整模拟功能的高性能立体声音频编解码芯片,数/模转换和模/数转换采用采样数字插值滤波器,转换数据长度可以是16、20、24和32位,采样速率8 kHz96 kHz。TLV320AIC23是便携数字音频播放和录音设备的理想模拟输入/输出芯片,其主要的特点有:,5.1 TLV320AIC23芯片介绍,高性能的立体声编解码芯片。90 dB信噪比A/D转换器(采样频率48 kHz);100 dB信噪比D/A转换器(采样频率48 kHz);1.423.6 V数字内核供电,和TI公司DSP内核供电电压兼容;2.73.6 V缓冲和模拟供电;896 kHz采样速率。,软件控制通过TI McBSP支持多种串行通信协议。兼容2线和SPI串行通信协议;能直接和TI McBSPs相连。,音频数据输入/输出是可编程音频接口,兼容TI McBSP。I2C兼容协议只需要一个McBSP为A/D和D/A进行通信;标准的I2C,高位或低位数据填充传输;16/20/24/32位数据长度。,具有完整的驻极体麦克风偏置电路和缓冲。低噪声麦克风偏置引脚为驻极体电容提供偏置电压,其典型值等于3/4AVDD;有可调的、增益为15的运放缓冲器;控制寄存器可选择增益为0 dB或20 dB。,立体声输入。可编程增益;有模拟旁路。A/D转换器有多个输入,可以是立体声道或麦克风。立体声输出。注:模拟混合器可以把D/A转换器和模拟旁路混合起来。模拟量控制可以禁止。,高效率的耳机放大器。模拟供电电压为3.3 V时,负载为32 ,输出功率为30 mW。灵活的电源管理,全部可以软件控制。在回放模式功耗23 mW;备用模式功耗小于150 W;掉电模式小于15 W。,5.1.2 TLV320AIC23芯片内部结构框图和引脚安排1. TLV320AIC23芯片的内部结构,TLV320AIC23芯片的内部结构框图如图5-1所示。,图5-1 TLV320AIC23芯片的内部结构框图,2. TLV320AIC23的引脚安排,TLV320AIC23芯片的引脚安排如图5-2所示。表5-1 给出了TLV320AIC23芯片的引脚功能,可参阅参考文献10。,图5-2 PW封装的引脚安排,表5-1 TLV320AIC23芯片的引脚功能说明,5.1.3 TLV320AIC23与C5509的硬件连接,TLV320AIC23与C5509的硬件连接如图5-3所示。J5为麦克风输入,J6为立体声线性输入,J7为耳机输出,J8为立体声线性输出。在模拟电路设计部分,麦克风输入信号经过电容C52、C55和电阻R75组成的滤波电路;立体声线性输入使用1/2分压电路和隔直流电容;耳机线和音频线输出使用电容进行隔直流。,图5-3 TLV320AIC23与C5509的硬件连接图,AIC23控制接口和C5509的I2C接口相连,将AIC23串行控制接口模式设成I2C模式,即22脚经过一个电阻后接地。数据输出/输入接口和C5509的McBSP0相连接。,5.2.1 实验目的,了解C55x DSP I2C接口、McBSP接口。了解立体声芯片TLV320AIC23。学习I2C接口、McBSP接口、AIC23的初始化;学习中断处理。,5.2 TLV320AIC23应用实验,5.2.2 实验设备,PC兼容机一台;操作系统为Windows 2000(或WindowsNT 4.0、Windows 98、Windows XP);计算机已经安装CCS v3.1集成环境软件。DSP仿真器ICETEK-5100USB V2.0A一个;DSP目标板ICETEK-VC5509-A一块。麦克风、耳机及相应的音频线若干。,5.2.3 实验要求,用CCS集成仿真环境完成建立工程、源文件和命令文件,保存和添加文件到工程,编译、链接、运行和调试等。使用不同的视窗观察寄存器和存储器空间的数据内容以及输出波形的时域和频域图等。,5.2.4 实验步骤,1. 实验准备,参照第2章(若使用的仿真器不同,请参照其他相关资料)对CCS硬件仿真进行设置;在断电情况下将仿真器和目标板相连,再将仿真器和计算机相连。,将音频线连接,一端接到目标板的音频输入端J6,另一端接到电脑声卡输出端或别的音频输出端。将麦克风接到麦克风输入端子J5;将耳机线接到耳机输出端子J7;给目标板供上电,启动CCS,使用CCS连接仿真器。,2. 新建立工程和相应的源文件、命令文件,新建五个.asm汇编源文件和一个命令文件(这些文件名读者可以自己命名,也可以参照图5-4进行命名),其中除了在本章5.2.5小节中的四个.asm程序和一个命令文件外,还含有在第2章2.2.5小节中的“2.SDRAM.asm初始化程序”。分别输入这些程序,保存这些文件并把它们添加到工程项目中,如图5-4所示。,图5-4 工程界面,3. 编译链接工程,对工程进行编译链接。在编译链接过程中如果有错误,需要进行修改,直至无错误提示信息为止。编译成功后,装载输出文件。,4. 全速运行程序,在主菜单中选择DebugRun 命令(也可以点击或按F5键),运行程序。使用电脑播放器播放音乐,戴上耳机,可以听到音乐和麦克风的声音。,5. 观察音频信号的时域图,在主菜单中选择DebugHalt命令(也可以点击 或按Shift+F5键),暂停观察某一时刻的波形。从CCS View观察窗打开图形属性对话框,如图5-5所示,参照其对话框进行相应修改,修改好后点击OK确认,则可以看到如图5-6所示的波形图,图形上半部分为左声道声音的波形,下半部分为右声道声音的波形。,图5-5 图形属性对话框,图5-6 图形观察窗口中的左、右声道声音波形,5.2.5 参考程序清单1. 主程序,.mmregs.def _c_int00;定义符号_c_int00为主程序入口.def mcbsp0_init;定义McBSP0接口初始化子程序 入口.def data_w_r;定义变量data_w_r.ref sdram_init;引用外部符号sdram_init为 SDRAM初始化子程序入口.ref i2c_init;引用外部符号i2c_init为I2C初始 化子程序入口,.ref i2c_disable;引用外部符号i2c_disable .ref i2c_write;引用外部符号i2c_write为总线写.ref i2c_read;引用外部符号i2c_read为总线读.ref clkmd_init;引用外部符号clkmd_init为时钟模块初 始化子程序入口.ref aic23init;引用外部符号aic23init为AIC23模块初 始化子程序入口,mcbsp0_pdp.set 2800h/128;McBSP0寄存器所在数据 页地址drr2.set 0h;数据接收寄存器2 drr1.set 1h ;数据接收寄存器1dxr2.set 2h ;数据发送寄存器2dxr1.set 3h ;数据发送寄存器1 spcr2.set 4h ;串口控制寄存器2,spcr1 .set 5h ;串口控制寄存器1rcr2 .set 6h ;接收控制寄存器2rcr1.set 7h ;接收控制寄存器1xcr2.set 8h ;发送控制寄存器2xcr1.set 9h ;发送控制寄存器1 srgr2.set 0ah ;采样率产生寄存器2srgr1.set 0bh ;采样率产生寄存器1mcr2.set 0ch ;多通道控制寄存器2,mcr1.set 0dh ;多通道控制寄存器1rcera.set 0eh ;接收通道使能寄存器A区rcerb.set 0fh ;接收通道使能寄存器B区xcera.set 10h ;发送通道使能寄存器A区xcerb.set 11h ;发送通道使能寄存器B区pcr.set 12h ;引脚控制寄存器rcerc.set 13h ;接收通道使能寄存器C区rcerd.set 14h ;接收通道使能寄存器D区,xcerc.set 15h ;发送通道使能寄存器C区xcerd.set 16h ;发送通道使能寄存器D区rcere.set 17h ;接收通道使能寄存器E区rcerf.set 18h ;接收通道使能寄存器F区xcere.set 19h ;发送通道使能寄存器E区xcerf.set 1ah ;发送通道使能寄存器F区rcerg.set 1bh ;接收通道使能寄存器G区rcerh.set 1ch ;接收通道使能寄存器H区,xcerg.set 1dh ;发送通道使能寄存器G区xcerh.set 1eh ;发送通道使能寄存器H区spcr1_rrdy .set 02h;串口控制寄存器对应位length .set 256;16位左(右)声道循环缓冲 区长度 .bss data_w_r,2;为变量预留2字空间.bss left,512;为左声道预留512字空间.bss right,512;为右声道预留512字空间,STACK .usect “.stack”,200h;为数据堆栈预留 512个字空间SYSSTACK .usect “.sysstack”,200h;为系统堆栈预留 512个字空间.sect .vectorsrsv: ; reset vector B _c_int00 ;branch to C entry point NOP .align 8.text,_c_int00:amov #0,xdp ;数据页指针xdp指 向(零页)CPU存储 器映射寄存器amov #STACK+200h,xsp ;指针xsp指向数据 堆栈底部amov #SYSSTACK+200h,xssp ;指针xssp指向系统 堆栈底部;init interruptbset intm ;colse interupt(关全 局中断),mov #1,ivpd;DSP中断矢量指针ivpdmov #1,ivph;DSP中断矢量指针ivphmov #00h,ier0;清中断使能寄存器ier0mov #00h,dbier0;清调试中断使能寄存器dbier0mov #0,ier1;清中断使能寄存器ier1mov #0ffffh,ifr0;清中断标志寄存器ifr0mov #0ffffh,ifr1;清中断标志寄存器ifr1call sdram_init;调用SDRAM初始化子程序call clkmd_init;调用时钟模块初始化子程序,call i2c_init;调用I2C初始化子程序call aic23init;调用AIC23初始化子程序call mcbsp0_init;调用McBSP0初始化子程序mov #mcbsp0_pdp,pdp;当前数据页指向McBSP0寄存器wait_rx:btst #spcr1_rrdy,port(spcr1),tc1;测试串口控制寄存器RFULL位状态送tc1,bcc wait_rx,!tc1;判断接收器是否满,若tc1=1,则接收器满,有新数据;未读,可以接收数据,否则tc1=0,等待mov port(drr2),ac1;从DR引脚接收左声道16位数据mov port(drr1),ac0从DR引脚接收右声道16位数据 mov ac0,port(dxr1);向DX引脚发送右声道16位数据mov ac1,port(dxr2) ;向DX引脚发送左声道16位数据amov #left+length-1,xar6;让xar6指向左声道数据空间尾地址rpt #length-1;左声道每个数据依次向下一个地址复制,delay *ar6-amov #left,xar6;让xar6指向左声道数据空间首地址mov ac1,*ar6 ;左声道输入新数据amov #right+length-1,xar7;让xar7指向右声道数据空间尾地址rpt #length-1;右声道每个数据依次向下一个地址复制delay *ar7-amov #right,xar7;让xar7指向右声道数据空间首地址,mov ac0,*ar7;右声道输入新数据b wait_rx;循环准备再次传送数据ends: b $mcbsp0_init: ;slave modeamov #0,xdpmov #mcbsp0_pdp,pdp,mov #0,port(spcr1);Put the McBSP0 in resetmov #0,port(spcr2)mov #0a0h,port(xcr1);Config frame parameters 32 bit mov #0h,port(xcr2);Single phase, no delaymov #0a0h,port(rcr1);Config frame parameters 32 bit mov #0h,port(rcr2);Single phase, no delay,Frame sync is active highmov #03h,port(pcr);data clocked on rising edge of clkxmov #01h,port(spcr1);Out of reset,RRDY=1mov #01h,port(spcr2);XRDY=1ret.end,2时钟模式寄存器CLKMD初始化程序,.def pllmult .def clkmd_init .mmregsclkmd .set 0x1c00 ;时钟模式寄存器地址clk_in.set 12cpu_clk .set 144pllmult .set cpu_clk*2/clk_in;pllmult=31,ress .set 015iai .set 0b14iob .set 1b13test .set 0b12pll_mult.set 00000b7pll_div .set 01b5;Divide by 2pll_enable .set 0b4bypass_div .set 00b2,breakln .set 0b1lock_b .set 0b31,plmult=31min ac1,ac0or #k_clkmd,ac0,mov ac0,port(*ar1)mov port(*ar1),ac0or #10h,ac0 ;pll_enable=1mov ac0,port(*ar1)rpt #30000nop_16nop,loop2:mov port(*ar1),ar0;Read clkmdand #1,ar0 bcc loop2,ar0!=#1;lock_b=0?ret.end,3C5509 I2C接口初始化程序,.mmregs.def i2c_init.def i2c_disable.def i2c_write.def i2c_read .ref pllmulticoar.set0x3c00;I2C主地址寄存器icimr.set0x3c01;I2C中断屏蔽寄存器icstr.set0x3c02;I2C状态寄存器,icclkl.set0x3c03;I2C时钟驱动寄存器低位icclkh.set0x3c04;I2C时钟驱动寄存器高位iccnt.set0x3c05;I2C数据计数器icdrr.set0x3c06;I2C数据接收寄存器icsar.set0x3c07;I2C从地址寄存器icdxr.set0x3c08;I2C数据发送寄存器icmdr.set0x3c09;I2C模式寄存器icivr.set0x3c0a;I2C中断矢量寄存器icgpio.set0x3c0b;保留位(通用I/O),icpsc.set0x3c0c ;I2C预定标寄存器;bit of i2c mode registericmdr_free.set 14icmdr_stt.set 13icmdr_idleen.set 12icmdr_stp.set 11icmdr_mst .set 10icmdr_trx .set 9icmdr_xa .set 8icmdr_rm .set 7,icmdr_dlb.set 6icmdr_irs .set 5icmdr_stb .set 4icmdr_fdf.set 3icmdr_bc_mask .set 0;bit of i2c status registericstr_nacksnt .set 13icstr_bb .set 12icstr_rsfull .set 11,icstr_xsmt .set 10icstr_aas .set 9icstr_ad0 .set 8icstr_res2 .set 7icstr_res1 .set 6icstr_res0 .set 5icstr_xrdy .set 4icstr_rrdy .set 3icstr_ardy .set 2icstr_nack .set 1,icstr_al .set 0icoar_oaddr .set 0x007f.texti2c_init:mov #icoar/128,pdp;I2C主地址寄存器页地址送pdp作为当前页 mov #0h,port(icmdr);Clear icmdrmov #0,port(icimr);Disable all interrupt,;module clock frequncy=cpu_clk/(ipsc+1)mov #pllmult,ar0mov #31,ar1;If pllmult31,plmult=31min ar1,ar0mov ar0,port(icpsc),;master clock frequeny=module clock frequnecy/(icclkl+d)+(icclkh+d)mov #10,port(icclkl)mov #10,port(icclkh) mov #icoar_oaddr,port(icoar);icmdr_irs=1,icmdr_mst=1,;Take I2C controller out of reset, put in master mode mov port(icmdr),ac0or #1#icmdr_irs,ac0or #1#icmdr_mst,ac0mov ac0,port(icmdr)ret,i2c_disable: ;Put I2C controller in reset mov #icoar/128,pdpmov port(icmdr),ac0 mov #1#icmdr_irs,ac1neg ac1and ac1,ac0 mov ac0,port(icmdr)ret,i2c_write:;Write data to slave device;ar0 is stored counter of data;ar1 is stored first data address;ar2 is stored slave addressmov #icoar/128,pdpmov ar0,port(iccnt),add ar1,ar0;ar0 point to the endmov ar2,port(icsar);Slave device addressamov #icdxr,xar3mov port(icmdr),ac0bset #icmdr_stt,ac0;Start bit =1bset #icmdr_stp,ac0;Stop bit =1bset #icmdr_trx,ac0;Transmitter mode bit =1 ,transmitter modemov ac0,port(icmdr),tx_data: mov *ar1+,port(*ar3)wait_tx: btst #icstr_xrdy,port(icstr),tc1bcc wait_tx,!tc1;tc1=0,waitcmp ar0!=ar1,tc1 bcc tx_data,tc1ret,i2c_read:;read data to slave device;ar0 is stored counter of data;ar1 is stored first data address;ar2 is stored slave addressmov #icoar/128,pdpmov ar0,port(iccnt)add ar1,ar0;ar0 point to the end,mov ar2,port(icsar);Slave device addressamov #icdrr,xar3mov port(icmdr),ac0bset #icmdr_stt,ac0;Start bit =1bset #icmdr_stp,ac0;stop bit =1bclr #icmdr_trx,ac0;transmitter mode bit =0 , receive modemov ac0,port(icmdr),read_data: mov port(*ar3),*ar1+wait_read: btst #icstr_xrdy,port(icstr),tc1bcc wait_read,!tc1;tc1=0,waitcmp ar0!=ar1,tc1 bcc read_data,tc1ret.end,4. aic23初始化程序,.def aic23init.ref i2c_write.ref data_w_r;bit15-bit9AIC23_LT_LINE_CTL.set 0x0;左声道(输入数据空间)控制寄存器地址AIC23_RT_LINE_CTL.set 0x1;右声道(输入数据空间)控制寄存器地址,AIC23_LT_HP_CTL.set 0x2;左耳机声道(输入数据空间)控制寄存器地址AIC23_RT_HP_CTL.set 0x3;右耳机声道(输入数据空间)控制寄存器地址AIC23_ANALOG_AUDIO_CTL.set 0x4;模拟通道控制寄存器地址AIC23_DIGITAL_AUDIO_CTL.set 0x5;数字通道控制寄存器地址AIC23_POWER_DOWN_CTL.set 0x6;电源控制寄存器地址,AIC23_DIGITAL_IF_FORMAT.set 0x7;数字音频接口格式化寄存器地址AIC23_SAMPLE_RATE_CTL.set 0x8;采样率控制寄存器地址AIC23_DIG_IF_ACTIVATE.set 0x9;数字接口有效寄存器地址AIC23_RESET_REG.set 0x0f;Writing 0 to this reg triggers reset;bit8-bit0,lt_ch_vol_ctrl.set 0x0017;0 rt_ch_vol_ctrl.set 0x0017;1 lt_ch_headph_ctrl.set 0x007f;2 rt_ch_headph_ctrl.set 0x007f;3 alog_au_path_ctrl.set 0x0031;4 digi_au_path_ctrl.set 0x0000;5 pow_mgt_ctrl_ctrl.set 0x0000;6 digi_au_intf_ctrl.set 0x0043;7,au_FS_TIM_ctrl.set 0x0023;8 MCLK=12MHz, Sample Rate setting 44.1kHz digi_intf1_ctrl.set 0x0001;9 slave_aic23 .set 0011010b;cs=0.textaic23init:;i2c write AIC23 register,; Reset the AIC23 mov #AIC23_RESET_REG*512,ac0add #0h,ac0call aic23_write,; turn on all powermov #AIC23_POWER_DOWN_CTL*512,ac0add #pow_mgt_ctrl_ctrl,ac0call aic23_write,;DAC enable ,insel line,Microphone normalmov #AIC23_ANALOG_AUDIO_CTL*512,ac0add #alog_au_path_ctrl,ac0call aic23_write; seting Digital Audio Path Controlmov #AIC23_DIGITAL_AUDIO_CTL*512,ac0add #digi_au_path_ctrl,ac0call aic23_write,; Turn on volume for line inputsmov #AIC23_LT_LINE_CTL*512,ac0add #lt_ch_vol_ctrl,ac0call aic23_writemov #AIC23_RT_LINE_CTL*512,ac0add #rt_ch_vol_ctrl,ac0call aic23_write,; Configure the AIC23 for master mode,16 bit samples,DSP modemov #AIC23_DIGITAL_IF_FORMAT*512,ac0add #digi_au_intf_ctrl,ac0call aic23_write;44.1 kHz stereomov #AIC23_SAMPLE_RATE_CTL*512,ac0add #au_FS_TIM_ctrl,ac0call aic23_write,;Turn on headphone volume and digital interfacemov #AIC23_LT_HP_CTL*512,ac0add #lt_ch_headph_ctrl,ac0call aic23_writemov #AIC23_RT_HP_CTL*512,ac0add #rt_ch_headph_ctrl,ac0call aic23_write,;Turn on digital interfacemov #AIC23_DIG_IF_ACTIVATE*512,ac0add #digi_intf1_ctrl,ac0call aic23_writeret,aic23_write:amov #data_w_r,xar1;ar1 is stored first data addressmov ac0#-8,*ar1+mov ac0,*ar1-mov #2,ar0;ar0 is stored counter of datamov #slave_aic23,ar2;ar2 is stored slave addresscall i2c_writeret.end,5. 命令文件,-stack 200h-sysstack 200h MEMORY PAGE 0:MMR : origin = 0000000h, length = 00000c0h SPRAM : origin = 00000c0h, length = 0000040hVECS : origin = 0000100h, length = 0000100h,DARAM0 : origin = 0000200h, length = 0001E00hDARAM1 : origin = 0002000h, length = 0002000hDARAM2 : origin = 0004000h, length = 0002000hDARAM3 : origin = 0006000h, length = 0002000hDARAM4 : origin = 0008000h, length = 0002000h DARAM5 : origin = 000a000h, length = 0002000hDARAM6 : origin = 000c000h, length = 0002000hDARAM7 :origin = 000e000h, length = 0002000h,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!