1.通过实验熟悉 VC5509A A/D转换模块
2.掌握 VC5509A 扩展D/A转换模块并编程控制实现D/A转换;
3.掌握 VC5509A 的A/D模块初始化过程及数据采集过程,并对采集的数据进行分析
1.编写C5509A时钟发生器初始化代码,外接晶振为20M,配置CPU工作频率为200M
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 实验部分:
main()
函数是 AD 实验的主程序,初始化了 APLL、SDRAM,调用了 InitADC()
进行 AD 转换器的初始化,通过 PLL_Init()
初始化 DSP 的时钟。
InitADC()
函数用于设置 ADC 相关的寄存器的初始化值,包括 ADCCLKCTL
和 ADCCLKDIV
寄存器。
PLL_Init()
函数用于设置 DSP 的时钟频率,通过操作 clkmd
和 sysr
寄存器来设置。
在 main()
中,通过两个循环分别采集通道0和通道1的 256 个数据,每次循环使用 ADCCTL
寄存器启动 AD 转换,等待转换完成后将数据存入数组 nADC0
和 nADC1
中。
DA 实验部分:
main()
函数是 DA 实验的主程序,初始化了 PLL 和 SDRAM,通过一个无限循环,利用正弦函数生成一个 256 个数据的正弦波,并输出到 DA 数据口。
使用了正弦函数 sin()
生成正弦波的数值,其中使用了 DA_DATA_1
和 DA_DATA_2
分别输出两个不同的数值,构成正弦波。同时,使用了 fWork
和 fStep
控制正弦波的生成。
总体来说,这段代码是针对 C5509A DSP 进行 A/D 与 D/A 实验的代码,通过配置相应的寄存器和循环采样/输出的方式,实现了 A/D 数据的采集和 D/A 正弦波的输出。