TMS320C5509A自带ADC配置参数计算
2016-04-05 21:07
253 查看
TMS320C5509A自带ADC使用起来比较方便,但是确定参数比较麻烦。作者尝试使用程序计算出来,方便DSP自带ADC的使用。设计的程序可 直接计算出TMS320C5509A自带ADC配置参数,以十六进制形式输出结果,方便可用。
[另外作者发现,TI的TMS320VC5509 DSP
Analog-to-Digital Converter (ADC)Reference Guide(2003年10月版,spru586a)中11页关于ADC Sample and Hold Period值的公式有错误之处。]
开发平台:VC++6.0、Visual Studio2010(均亲测可用)。
TMS320C5509A ADC参数计算。
功能:直接在运行输出窗口以十六进制形式输出ADC配置参数(cpuclkdiv,convratediv,samptimediv,详见参考手册);也可以输出寄存器形式(ADCCLKCTL、ADCCLKDIV)。
------------------------------------------------------------------------------------------------
#include <iostream>
#include <math.h>
using namespace std;
void calcu_ADCConfig(double fcpu,double fs);
int main()
{
double fcpu=144; //CPU时钟频率(MHz)
double fs=2000; //要求的采样速率(Hz)
double fadc,fadc_conv,x; // fadc:ADC时钟; fadc_conv:ADC转换时钟
double cpuclkdiv,convratediv,samptimediv;
calcu_ADCConfig(fcpu,fs);
//--------------------------------------------------------------
//---------------结果验证---------------------------------------
cpuclkdiv= 143 ; convratediv= 8 ; samptimediv= 124.000000;
fcpu = fcpu*1000000; //CPU时钟 144MHz
fadc=fcpu/(cpuclkdiv+1); //ADC时钟
fadc_conv = fadc/(2*(convratediv + 1)); //ADC转换时钟
x= 13/fadc_conv + 2*(convratediv+samptimediv+1)/fadc; // 采样周期
// ADC采样保持时间 + 采样保持时间
printf("采样周期: Ts=%.8f\n",x);
printf("采样速率: fs=%.4f\n",1/x);
//--------------------------------------------------------------
return 0;
}
运行结果截图:
[另外作者发现,TI的TMS320VC5509 DSP
Analog-to-Digital Converter (ADC)Reference Guide(2003年10月版,spru586a)中11页关于ADC Sample and Hold Period值的公式有错误之处。]
开发平台:VC++6.0、Visual Studio2010(均亲测可用)。
void calcu_ADCConfig(double fcpu,double fs) { /* 参数说明: fcpu,CPU时钟频率(MHz);fs,要求的采样速率(Hz)。 */ double Ts=0,fadc=0,fconv=0,Tconv=0,Th=0; double samptimediv=0.0; int cpuclkdiv,convratediv; int i,count=0; fcpu=fcpu*1000000; // Hz Ts=1/fs; // 采样周期 for(cpuclkdiv=0;cpuclkdiv<256;cpuclkdiv++) { fadc=fcpu/(cpuclkdiv+1); //计算ADC时钟频率 for(convratediv = 0; convratediv<16; convratediv++) { fconv=fadc/(2*(convratediv+1)); // ADC转换时钟频率 Tconv=1/fconv; // ADC转换时钟周期 if(fconv<=2000000) //ADC转换时钟频率不大于 2 MHz { Th=Ts-13*Tconv; // 由采样速率计算采样保持时间 if(Th>=0.00004 && Th<=0.0004) // 不得小于40us && Th<=0.0004 不大于400us { samptimediv=fadc*Th/2-(convratediv+1); //计算samptimediv if(samptimediv>=0 && samptimediv <=255) for (i=0;i<256;i++) { //if (fabs(i-samptimediv)<0.00000000002) //0.0000000000001 //float 类型的samptimediv 不能直接和 int 型的i 比较 if (i==(int)samptimediv) //0.00000000000002 { //printf("cpuclkdiv=%d ; convratediv=%d ; samptimediv=%.8f\n",cpuclkdiv,convratediv,samptimediv); /* cout<<"cpuclkdiv= "<<cpuclkdiv<<"; "; cout<<"convratediv= "<<convratediv<<"; "; cout<<"samptimediv= "<<samptimediv<<"\n"; */ if( ((int)(samptimediv*1000000)) % (1000000*(int)samptimediv) ==0) //比较大小,samptimediv=0~255 { count=count+1; printf("cpuclkdiv= %d ; convratediv= %d ; samptimediv= %.6f\n",cpuclkdiv,convratediv,samptimediv); printf("cpuclkdiv=0x%X ; convratediv=0x%X ; samptimediv=0x%X\n",cpuclkdiv,convratediv,(int)samptimediv); printf("ADCCLKCTL=0x00%X ; ADCCLKDIV=0x%X0%X\n\n",cpuclkdiv,(int)samptimediv,convratediv); } } } } } } } cout<<endl; printf("总个数--------Count = %d \n\n",count); }
TMS320C5509A ADC参数计算。
功能:直接在运行输出窗口以十六进制形式输出ADC配置参数(cpuclkdiv,convratediv,samptimediv,详见参考手册);也可以输出寄存器形式(ADCCLKCTL、ADCCLKDIV)。
------------------------------------------------------------------------------------------------
#include <iostream>
#include <math.h>
using namespace std;
void calcu_ADCConfig(double fcpu,double fs);
int main()
{
double fcpu=144; //CPU时钟频率(MHz)
double fs=2000; //要求的采样速率(Hz)
double fadc,fadc_conv,x; // fadc:ADC时钟; fadc_conv:ADC转换时钟
double cpuclkdiv,convratediv,samptimediv;
calcu_ADCConfig(fcpu,fs);
//--------------------------------------------------------------
//---------------结果验证---------------------------------------
cpuclkdiv= 143 ; convratediv= 8 ; samptimediv= 124.000000;
fcpu = fcpu*1000000; //CPU时钟 144MHz
fadc=fcpu/(cpuclkdiv+1); //ADC时钟
fadc_conv = fadc/(2*(convratediv + 1)); //ADC转换时钟
x= 13/fadc_conv + 2*(convratediv+samptimediv+1)/fadc; // 采样周期
// ADC采样保持时间 + 采样保持时间
printf("采样周期: Ts=%.8f\n",x);
printf("采样速率: fs=%.4f\n",1/x);
//--------------------------------------------------------------
return 0;
}
运行结果截图:
相关文章推荐
- DSP、ARM和单片机的区别
- DSP学习笔记之GPIO
- 多网口开发板
- OMPL138多网口开发板
- DSP例程源码
- DSP+FPGAF核心板
- DSP+ARM+FPGA核心板
- ADC采样Q15归一化处理
- 创建IPC示例工程编译DSP程序
- C6000嵌入汇编C与汇编对照及功能说明
- TMS320F28335学习SPI模块总结笔记
- DS 4000 P二进制文件在ARM处理器中的加载运行
- DSP TMS320F2812验证平台制作日志1
- DSP TMS320F2812验证平台制作日志2
- DSP TMS320F2812验证平台制作日志3
- LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
- TI C2000 compiler download link
- 关于LF2407捕获不能再次中断的原因及解决方法
- C2000 DSP汇编指令速查软件分享(VB编写)
- 常见序列的傅里叶变换