⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad.c

📁 TMS320C54X的AD转换和语音录制、播放源程序
💻 C
字号:
/*********************************************************************************
*  AD.C	   测试AD采集的主程序	                             *
*  版权(c) 	2003-		北京合众达电子技术有限责任公司			                 *
*  设计者:	段立锋	耿升辉							                                 *
**********************************************************************************/
#include "type.h"
#include "codec.h"
#include "uart.h"
#include "sysreg.h"
#include "mcbsp54.h"
#include "memory.h"
#include "comm.h"

/*帧长度的设定*/
#define  FRAMLONGTH    0x104

#define  DataLongth   0x100

typedef struct _UartForDec5416{
	unsigned int Length;
	unsigned int Type;
	unsigned int Mutul;
	unsigned int Data[DataLongth];
	unsigned int Check;
}UartForDec5416, *PuartForDec5416; 

HANDLE uart_a =0;
HANDLE codec_command =0;
HANDLE codec_data=0;
unsigned int audiodata =0;
PuartForDec5416 precieve =0;	
unsigned int i= 0;
unsigned int k= 0;
int uart_s=0,uart_err=0,fifostatus=0;
unsigned long flashbaddr=0;
unsigned long flashaddr = 0;
PuartForDec5416 psend=0;
PAdConfig padset = 0;
unsigned int datasendlong = 0;
unsigned int errorsend = 0;
unsigned int sendcount = 0;
unsigned int adset[4] ={128,0xd,0,0};
//yuan!!! unsigned int dataleft[1024] ={0};
//yuan!!! unsigned int dataright[1024] ={0};
int dataleft[1024] ={0};
int dataright[1024] ={0};

unsigned int uart[0x104] ={0};
unsigned int uarts[0x104] = {0};

void delay(int period);


//实验操控:
//选择SAMPLELONG 在128到1024之间的任意整数。
//选择SAMPLERATE 有三个选择,1、2、3。其中1代表8000。2代表44000。 3代表96000。
//注意,本实验和fft实验、filter实验,
//都需要通过液晶和键盘在信号发生器的设置里面修改参数以生成所需要信号。
//显示图象为dataleft数组。
#define SAMPLELONG 1024
#define SAMPLERATE 2
unsigned int SampleRate =ADSAMPL96K;

main()
{	
	/*设置系统时钟*/
	sys_clk(CLK160);
	/*初始化DEC5416板卡*/
	dec5416_init();
#if SAMPLERATE==1
	SampleRate =ADSAMPL8K;
#endif
#if SAMPLERATE==2
	SampleRate =ADSAMPL44K;
#endif
#if SAMPLERATE==3
	SampleRate =ADSAMPL96K;
#endif
	
	
	/*打开codec数据接口*/
	codec_data = codec_open(CODEC_DATA);
	/*打开codec命令接口*/
	codec_command = codec_open(CODEC_COMMAND);

	/*设置波特率,输入与输出均为8K*/
	codec_sample_rate(codec_command,0xd);	
	
	/*配置系统存储器*/	
	memory_set(0x80);	
		
	/*	AD设置*/	
		
	
	/*AD前向增益调整*/	
	codec_lineain_gain(codec_command, 0);
	/*AD采样率*/
	codec_sample_rate(codec_command, SampleRate);

	delay(2000);
				
	/*启动AD采样*/	
	for(;;)
	{		
		
		for(i = 0;i<SAMPLELONG;)
		{
			/* Wait for sample from handset */
	  		while (!MCBSP_RRDY(CODEC_DATA)) {};
	  		/* Read sample from and write back to handset codec */
	  		/*左通路数据*/
			//yuan!!!   dataleft[i] = *(volatile u16*)DRR1_ADDR(CODEC_DATA);
			dataleft[i] = *(volatile int*)DRR1_ADDR(CODEC_DATA);
			
			/* Wait for sample from handset */
	   		while (!MCBSP_RRDY(CODEC_DATA)) {};
	  	/*右通路数据*/
			//yuan!!! dataright[i] =  *(volatile u16*)DRR1_ADDR(CODEC_DATA);
			dataright[i] = *(volatile int*)DRR1_ADDR(CODEC_DATA);
			i = i+1;
		}	
		/*AD采样结束*/	

	}
								     
}
void delay(int period)
{
    int i, j;
    
    for(i=0; i<period; i++)
    {
        for(j=0; j<0x1000; j++);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -