DSP实验音频控制.docx

上传人:b****8 文档编号:10361905 上传时间:2023-02-10 格式:DOCX 页数:23 大小:76.74KB
下载 相关 举报
DSP实验音频控制.docx_第1页
第1页 / 共23页
DSP实验音频控制.docx_第2页
第2页 / 共23页
DSP实验音频控制.docx_第3页
第3页 / 共23页
DSP实验音频控制.docx_第4页
第4页 / 共23页
DSP实验音频控制.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

DSP实验音频控制.docx

《DSP实验音频控制.docx》由会员分享,可在线阅读,更多相关《DSP实验音频控制.docx(23页珍藏版)》请在冰豆网上搜索。

DSP实验音频控制.docx

DSP实验音频控制

实验四:

音频

1、实验原理

多通道缓冲串口McBSP概述

•全双工通信

•双缓冲数据寄存器,允许连续的数据流。

•收发独立的帧信号和时钟信号

•可以与工业标准的编/解码器,以及其它串行A/D、D/A接口

•数据传输可以利用外部时钟、或是片内的可编程时钟。

•利用DMA为McBSP服务时,串口数据读写具有自动缓冲能力。

•可与多达128个通道进行收发;

•支持传输的数据字长可以是8bit、12bit、16bit、20bit、24bit、32bit

•内置u律和A律压扩硬件。

•对8bit数据的传输,可选择LSB先传,还是MSB先传。

•可设置帧同步信号和数据时钟信号的极性。

•内部传输时钟和帧同步信号可编程程度高。

2、硬件资源和在片外围电路

硬件资源:

CPU、LED、按键、显示屏、耳机和麦克插孔、电阻、电容等

在片外围电路:

时钟发生器、定时器、通用输入/输出口(GPIO)、主机接口(EHPI)、外部存储器接口(EMIF)、DMA控制器等

3、参数设置

配置CE0和CE1寄存器的存储类型为16位宽的SDRAM;

DST(SRC)=xx10,目的(源)为EMIF;

DST(SRC)=xx10,目的(源)为外设;

DST(SRC)AMODE=00,目的(源)地址为固定地址;

DST(SRC)AMODE=01,目的(源)地址在每个数据单元传输完成后自动加1;

AIC23的波特率设置,0x23采样率为44.1K,0x0c采样率为8K;

4、实验流程图

5、程序

课通过改变12864字符得到自己想要编写或改变的中文字符。

voidmain(void)

{

i2c_status=1;

/*InitializeCSLlibrary-ThisisREQUIRED!

!

!

*/

/*初始化CSL库*/

CSL_init();

CHIP_RSET(XBSR,0x0a01);

GPIO_RSET(IODIR,0xFF);//GPIO方向寄存器IODIR,0,配置为输入,1,配置为输出,此处将0~7管脚全部配置成输出

/*设置系统的运行速度为144MHz*/

PLL_config(&myConfig);

/*初始化DSP的外部SDRAM*/

EMIF_config(&emiffig);

lcd_init();

display1();

/*向SDRAM中写入数据*/

souraddr=(unsignedint*)0x020000;

tempaddr=(unsignedint*)0x020000;

deminaddr=(unsignedint*)0x3fffff;

addr=0x20000;

temp_addr=0x20000;

/*InitializeI2C,usingparametersininitstructure*/

/*初始化I2C的格式*/

//I2C_config(&Config);

//I2C_start();

//I2C_getConfig(&Config1);

/*I2Cisundetreset*/

I2C_RSET(I2CMDR,0);

/*设置预分频寄存器,I2C的modeclockis10MHz*/

delay(100);

I2C_RSET(I2CSAR,0x001A);

I2C_RSET(I2CMDR,0x0620);

I2C_setup(&I2Cinit);

/*设置I2C的Materclock*/

I2C_RSET(I2CCLKL,100);

I2C_RSET(I2CCLKH,100);

I2C_getConfig(&testI2C);

aic_init();

DMA_init();

/*初始化McBSP1*/

hMcbsp=MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);

/*设置McBSP1*/

MCBSP_config(hMcbsp,&Mcbsp1Config);

/*启动McBSP0*/

MCBSP_start(hMcbsp,

MCBSP_RCV_START|MCBSP_XMIT_START,

0);

 

LBDS1=0x0fff;

/*回放音频*/

nin=0;

n=0;

k=0;

volume=8;

temp_volume=8;

while(TRUE)

{

dealkey();

if(stand_record==1)

{

i2c_status=I2C_write(analog_aduio_path_control,//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

display2();

souraddr=(unsignedint*)0x20000;

deminaddr=(unsignedint*)0x3fffff;

nin=(long)souraddr%65536;

bcount=0;

k=0;

while(souraddr

{

dealkey();

stand_recordsound();

if(volume!

=temp_volume)

{

wr_lcd(comm,0x9a);

wr_lcd(dat,0x3a);//":

"

wr_lcd(dat,0x30+volume);

volume_control();

temp_volume=volume;

}

}

}

if(stand_replay==1)

{

display4();

if(k==0)

{

souraddr=(unsignedint*)0x20000;

k=1;

}

else

{

souraddr=stopaddr;

deminaddr=tempaddr;

}

startaddr=souraddr;

nin=(long)souraddr%65536;

bcount=((long)souraddr>>16)-2;

while(souraddr

{

dealkey();

stand_replaysound();

if(volume!

=temp_volume)

{

wr_lcd(comm,0x9a);

wr_lcd(dat,0x3a);//":

"

wr_lcd(dat,0x30+volume);

volume_control();

temp_volume=volume;

}

}

}

if(stand_stop==1)

{

display5();

while(stand_stop==1)

dealkey();

}

if(repeat==1)

{

display6();

souraddr=startaddr;

deminaddr=stopaddr;

nin=(long)souraddr%65536;

bcount=((long)souraddr>>16)-2;

while(souraddr

{

dealkey();

repeatsound();

if(volume!

=temp_volume)

{

wr_lcd(comm,0x9a);

wr_lcd(dat,0x3a);//":

"

wr_lcd(dat,0x30+volume);

volume_control();

temp_volume=volume;

}

}

}

if(record==1)

{

i2c_status=I2C_write(analog_mic_path_control,//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

display7();

numTransfers=0;

addr=(Uint32)tempaddr;

dstAddrHi=(Uint16)(addr>>15)&0xFFFFu;

dstAddrLo=(Uint16)(addr<<1)&0xFFFFu;

 

DMA_RSETH(mhDmaRcv,DMACDSAU,dstAddrHi);

DMA_RSETH(mhDmaRcv,DMACDSAL,dstAddrLo);

DMA_RSETH(mhDmaRcv,DMACEN,N);

DMA_RSETH(mhDmaRcv,DMACFN,1);

/*Setprogrammationbitto1,ENDPROG=1)*/

DMA_FSETH(mhDmaRcv,DMACCR,ENDPROG,1);

/*EnableDMAchanneltobegintransfer*/

DMA_start(mhDmaRcv);

deminaddr=(unsignedint*)0x3fffff;

while(record)

{

dealkey();

if(replay==1)

{

DMA_stop(mhDmaRcv);

deminaddr=(unsignedint*)(addr-1024);

}

if((unsignedint*)addr>=deminaddr)

{

record=0;

replay=1;

}

}

}

if(replay==1)

{

replay=0;

transferComplete=0;

display8();

addr1=(Uint32)tempaddr;

dstAddrHi=(Uint16)(addr1>>15)&0xFFFFu;

dstAddrLo=(Uint16)(addr1<<1)&0xFFFFu;

 

DMA_RSETH(mhDmaXmt,DMACSSAU,dstAddrHi);

DMA_RSETH(mhDmaXmt,DMACSSAL,dstAddrLo);

DMA_RSETH(mhDmaXmt,DMACEN,N);

DMA_RSETH(mhDmaXmt,DMACFN,numTransfers);

/*Setprogrammationbitto1,ENDPROG=1)*/

DMA_FSETH(mhDmaXmt,DMACCR,ENDPROG,1);

DMA_FSETH(mhDmaXmt,DMACCR,AUTOINIT,0);

DMA_start(mhDmaXmt);

while(!

transferComplete)

{

dealkey();

if(volume!

=temp_volume)

{

//wr_1602(comm_1602,0xc7);

//wr_1602(dat_1602,0x30+volume);

wr_lcd(comm,0x9a);

wr_lcd(dat,0x3a);//":

"

wr_lcd(dat,0x30+volume);

volume_control();

temp_volume=volume;

}

}

}

}

}

voidaic_init()

{

/*resetAIC23*/

i2c_status=I2C_write(reset,//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

delay(1000);

/*设置AIC23各部分均工作*/

i2c_status=I2C_write(power_down_control,//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

/*设置AIC23的数字接口*/

i2c_status=I2C_write(digital_audio_inteface_format,//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

/*设置AIC23模拟通路*/

i2c_status=I2C_write(analog_aduio_path_control,//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

/*设置数字通路*/

i2c_status=I2C_write(digital_audio_path_control,//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

/*设置AIC23的采样率*/

i2c_status=I2C_write(sample_rate_control,//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

/*设置耳机音量*/

i2c_status=I2C_write(left_volume[8],//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

i2c_status=I2C_write(right_volume[8],//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

/*设置Line输入的音量*/

i2c_status=I2C_write(left_line_input_volume_control,//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

i2c_status=I2C_write(right_line_input_volume_control,//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

/*启动AIC23*/

i2c_status=I2C_write(digital_interface_activation,//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

}

voidvolume_control()

{

i2c_status=I2C_write(left_volume[volume],//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

i2c_status=I2C_write(right_volume[volume],//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

}

 

voidstand_recordsound()

{

while(!

MCBSP_rrdy(hMcbsp)){};

aic23data=MCBSP_read16(hMcbsp);

*souraddr++=aic23data;

MCBSP_write16(hMcbsp,aic23data);

while(!

MCBSP_xrdy(hMcbsp)){};

//nin=(long)souraddr%65536;

nin++;

if(nin==0)

{

//bcount=((long)souraddr>>16)-2;

souraddr=(unsignedint*)blockaddr[bcount];

bcount++;

}

if(stand_complete==1)

{

deminaddr=souraddr;

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

当前位置:首页 > PPT模板 > 简洁抽象

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

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