【DSP原理及应用】实验-A/D与D/A实验

2024-01-09 10:13:11

实验 A/D与D/A试验

一、实验目的

1.通过实验熟悉 VC5509A A/D转换模块

2.掌握 VC5509A 扩展D/A转换模块并编程控制实现D/A转换;

3.掌握 VC5509A 的A/D模块初始化过程及数据采集过程,并对采集的数据进行分析

二、实验内容

1.编写C5509A时钟发生器初始化代码,外接晶振为20M,配置CPU工作频率为200M

  1. 编写C5509A片内AD转换器的初始化代码,是AD转换器正常工作

3.编写主程序,分别采集通道0和通道1 256个数据

4.理解和掌握CMD文件

5.阅读TLC7528手册,编写主程序,从D/A口输出正弦波

三、实验代码

//AD实验代码如下:
main()
{
	int i;
	unsigned int uWork;
	
    EnableAPLL();
	SDRAM_init();
	InitADC();
    PLL_Init(132);
	while ( 1 )
	{
		for ( i=0;i<256;i++ )
		{
			ADCCTL=0x8000;	// 启动AD转换,通道0 请补充初值
			do
			{
				uWork = ADCDATA;
			}while( uWork & 0x8000 );
			nADC0[i] = uWork & 0x0fff;
		}

		for ( i=0;i<256;i++ )
		{
			ADCCTL=0x9000;	// 启动AD转换,通道1,请补充初值
			do
			{
				uWork = ADCDATA;
			}while( uWork & 0x8000 );
			nADC1[i] = uWork & 0x0fff;
		}
		asm( " nop");		// break point
	}
}

void InitADC()
{
	//请补充寄存器初始化值
	ADCCLKCTL=0x31;
	ADCCLKDIV=4f00;
}
void PLL_Init(int freq)
{
    int i;
    DSPCLK dspclk;
    ioport unsigned int *clkmd;
    ioport unsigned int *sysr;
    clkmd=(unsigned int *)0x1c00;
    
    sysr=(unsigned int *)0x07fd;
    
   //请补充代码
    *clkmd = 0x2502;
    *clkmd = 0x2512;
    
    *sysr=2;
}
//DA实验代码如下:
main()
{
//	unsigned char dbScanCode;
//    short int i,j,chn_num;
	int k,k1,k2;
	float fWork,fStep;

	fWork=0.0;
	fStep=PI2/256;
	k=k1=k2=0;
	PLL_Init(72);
	SDRAM_init();
	
    (*sysR)=1;
    for(;;)
    {
			k1=k;
			k2 = (int)(128*sin(fWork)) + 128;
			fWork += fStep;
			if (fWork > PI2)
			{
				fWork -= PI2;
			}
			DA_DATA_1 = k1;
			DA_DATA_2 = k2;

			k++;
			k %= 256;
     }
}

这段代码是针对 C5509A DSP 开发板进行 A/D 与 D/A 实验的代码。

AD 实验部分:

  1. main() 函数是 AD 实验的主程序,初始化了 APLL、SDRAM,调用了 InitADC() 进行 AD 转换器的初始化,通过 PLL_Init() 初始化 DSP 的时钟。

  2. InitADC() 函数用于设置 ADC 相关的寄存器的初始化值,包括 ADCCLKCTLADCCLKDIV 寄存器。

  3. PLL_Init() 函数用于设置 DSP 的时钟频率,通过操作 clkmdsysr 寄存器来设置。

  4. main() 中,通过两个循环分别采集通道0和通道1的 256 个数据,每次循环使用 ADCCTL 寄存器启动 AD 转换,等待转换完成后将数据存入数组 nADC0nADC1 中。

DA 实验部分:

  1. main() 函数是 DA 实验的主程序,初始化了 PLL 和 SDRAM,通过一个无限循环,利用正弦函数生成一个 256 个数据的正弦波,并输出到 DA 数据口。

  2. 使用了正弦函数 sin() 生成正弦波的数值,其中使用了 DA_DATA_1DA_DATA_2 分别输出两个不同的数值,构成正弦波。同时,使用了 fWorkfStep 控制正弦波的生成。

总体来说,这段代码是针对 C5509A DSP 进行 A/D 与 D/A 实验的代码,通过配置相应的寄存器和循环采样/输出的方式,实现了 A/D 数据的采集和 D/A 正弦波的输出。

文章来源:https://blog.csdn.net/m0_51993913/article/details/135469409
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。