云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > TMS320F2812 - AD转换程序

TMS320F2812 - AD转换程序

  • 62 次阅读
  • 3 次下载
  • 2025/7/4 15:57:07

TMS320F2812 AD转换程序(已调试通过) /*

==================================================================================

File name: F28XADC04U.C

Originator: Digital Control Systems Group Texas Instruments

Description: This file contains source for the F28X general purpose 4 conversions ADC driver for unipolar signals

===================================================================================== History:

-------------------------------------------------------------------------------------

11-04-2003 Release Rev 1.0 ----------------------------------------------------------------------------------*/ #include \#include \#include \#include \

#define CPU_CLOCK_SPEED 6.6667L // for a 150MHz CPU clock speed #define ADC_usDELAY 5000L

#define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_CLOCK_SPEED) - 9.0L) / 5.0L)

extern void DSP28x_usDelay(unsigned long Count);

void F28X_adc04u_drv_init(ADCVALS *p) {

DELAY_US(ADC_usDELAY);

AdcRegs.ADCTRL1.all = ADC_RESET_FLAG; /* Reset the ADC Module */

asm(\ asm(\

AdcRegs.ADCTRL3.bit.ADCBGRFDN=0x3; /* Power up bandgap/reference circuitry */

DELAY_US(ADC_usDELAY); /*

Delay before powering up rest of ADC */

AdcRegs.ADCTRL3.bit.ADCPWDN = 1; /* Power up rest of ADC */

AdcRegs.ADCTRL3.bit.ADCCLKPS=6; //ADCCLK=HSPCLK/[(ADCCTRL1[7]+1)]/* Set up ADCTRL3 register */

DELAY_US(ADC_usDELAY);

AdcRegs.ADCTRL1.all = 0x0110; /* Set up ADCTRL1 register 0x0110 级联模式 */

AdcRegs.ADCTRL2.all=0x0100; /* Set up ADCTRL2 register 0x0100 EVA

启动转换 */

AdcRegs.ADCMAXCONV.bit.MAX_CONV = 3; /* Specify four conversions */

AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //IU

AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x4; //地 AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x8; //IV AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0xC; //VREF1.5V

EvaRegs.EXTCON.bit.EVSOCE = 1; //Enable SOC

EvaRegs.GPTCONA.bit.T1TOADC = 1; /* Set up EV Trigger with Timer1 UF */ }

unsigned int tempz1; _iq tempz2; _iq tempz3; _iq tempz4; _iq tempz5;

void F28X_adc04u_drv_read(ADCVALS *p) {

//int offset; //long tmp;

/* Wait until ADC conversion is completed */ while (AdcRegs.ADCST.bit.SEQ1_BSY == 1) {};

//offset = (int)(p->c1_out - 32767);

tempz3 = AdcRegs.ADCRESULT0-AdcRegs.ADCRESULT1; //IU-地

tempz4 = AdcRegs.ADCRESULT3-AdcRegs.ADCRESULT1; //VREF1.5V-地

tempz5 = AdcRegs.ADCRESULT3-tempz4; //IU-tempz4 tempz2 = (AdcRegs.ADCRESULT1 + 0x8000);/*Ibase=4,IQ14*/ tempz2 = _IQmpy(_IQ(20),tempz2); tempz1 = (int)((tempz2 & 0x8000)>>15); if (tempz1==1) {

p->c1_out = ((long)( tempz2 + 0xFFFF0000));

p->c1_out = _IQmpy(_IQ(32),p->c1_out); } else {

p->c1_out = ((long)( tempz2 + 0x00000000)); p->c1_out = _IQmpy(_IQ(32),p->c1_out);//IQ20 }

// tempz3 = AdcRegs.ADCRESULT0;

//temp3 = _IQmpy(temp2,_IQ(10));/* IQ15 */

//tempz3 = ((long)(AdcRegs.ADCRESULT1 - 0x5652 + 0x8022)<<16)>>10;

//dat_q15 = (>>1)&0x7FFF; /* Convert result to Q15 (unipolar signal) */

//tmp = (long)p->c1_gain*(long)dat_q15;

// p->c1_out =AdcRegs.ADCRESULT0 - offset; //(int)(tmp>>13);

//dat_q15 = (AdcRegs.ADCRESULT1>>1)&0x7FFF; /* Convert result to Q15 (unipolar signal) */

// tmp = (long)p->c2_gain*(long)dat_q15;

// p->c2_out = AdcRegs.ADCRESULT1 - offset;

//dat_q15 = (AdcRegs.ADCRESULT2>>1)&0x7FFF; /* Convert result to Q15 (unipolar signal) */

//tmp = (long)p->c3_gain*(long)dat_q15; // p->c3_out = AdcRegs.ADCRESULT2;

AdcRegs.ADCTRL2.all |= 0x4040; /* reset the seq */ }

TMS320F2812的ADC模块用于采样过程的初始化代码 void InitAdc(void) //初始化ADC模块 {

unsigned int i;

AdcRegs.ADCTRL1.bit.RESET = 1; //ADC模块软复位,3个周期后,该位自动清0 for(i=0;i<12;i++) NOP; //等待ADC寄存器硬件复位完备>

AdcRegs.ADCTRL1.bit.SUSMOD = 3; //仿真挂起模式,0为忽略仿真挂起

AdcRegs.ADCTRL1.bit.ACQ_PS = 1; //采样保持脉冲个数,即SH为1+1=2个ADCCLK AdcRegs.ADCTRL1.bit.CPS = 0; //是否再对送给ADC的时钟进行二分频 AdcRegs.ADCTRL1.bit.CONT_RUN = 0; //1:进入连续运行; 0:开始停止模式 AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; //0:独立模式; 1:级联序列器模式

AdcRegs.ADCTRL3.bit.ADCBGRFDN = 3; //带隙参考电路上电 for(i=0;i<10000;i++) NOP;>

AdcRegs.ADCTRL3.bit.ADCPWDN = 1; //除带隙参考电路外的其他ADC模块上电 for(i=0;i<5000;i++) NOP;>

AdcRegs.ADCTRL3.bit.ADCCLKPS = 3; //设置ADC的转换时钟ADCCLK HSPCLK/(2*(ADCCLKPS+CPS))=25MHZ

AdcRegs.ADCTRL3.bit.SMODE_SEL = 0; //0:顺序采用模式,1:同步采样模式

AdcRegs.MAX_CONV.all = 0x0000; //设置ADC的转换通道数

AdcRegs.CHSELSEQ1.bit.CONV00 = 0; //设置ADCINA0为SEQ1的第一个转换通道

AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1; //清除SEQ1中断标志 AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1; //使能EVASOC启动SEQ1 AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; //使能SEQ1中断

AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ = 0; AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0;

AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0; AdcRegs.ADCTRL2.bit.EXT_SOC_SEQ1 = 0; AdcRegs.ADCTRL2.bit.RST_SEQ2=0; AdcRegs.ADCTRL2.bit.SOC_SEQ2=0; AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2=0; AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2=0; AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ2=0;

AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0; //为1时,软件启动ADC转换 }

void InitEv(void) {

EvaRegs.T1CMPR = 0x0000;

EvaRegs.T1PR = 75; //2MHZ的采样频率

=

搜索更多关于: TMS320F2812 - AD转换程序 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

TMS320F2812 AD转换程序(已调试通过) /* ================================================================================== File name: F28XADC04U.C Originator: Digital Control Systems Group Texas Instruments Description: This file contains source for the F28X general purpose 4 conversions ADC driver for unipolar

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com