调试通过的TMS320F2812_AD转换程序_第1页
调试通过的TMS320F2812_AD转换程序_第2页
调试通过的TMS320F2812_AD转换程序_第3页
调试通过的TMS320F2812_AD转换程序_第4页
调试通过的TMS320F2812_AD转换程序_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、TMS320F2812 AD转换程序(已调试通过)/* =File name: F28XADC04U.C Originator: Digital Control Systems Group Texas InstrumentsDescription: This file contains source for the F28X general purpose 4 conversions ADC driver for unipolar signalsJoyshang=History:-27-02-2012 Release Rev 1.0 -*/#include IQmathLib.h#includ

2、e DSP28_Device.h#include f28xadc04u.h#include f28xbmsk.h#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);v

3、oid F28X_adc04u_drv_init(ADCVALS *p) DELAY_US(ADC_usDELAY); AdcRegs.ADCTRL1.all = ADC_RESET_FLAG; /* Reset the ADC Module */ asm( NOP ); asm( NOP ); AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3; /* Power up bandgap/reference circuitry */ DELAY_US(ADC_usDELAY); /* Delay before powering up rest of ADC */ AdcRe

4、gs.ADCTRL3.bit.ADCPWDN = 1; /* Power up rest of ADC */ AdcRegs.ADCTRL3.bit.ADCCLKPS = 6; /ADCCLK=HSPCLK/(ADCCTRL17+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 0

5、x0100 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

6、 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

7、 = (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

8、& 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 + 0x); p-c1_out = _IQmpy(_IQ(32),p-c1_out);/IQ20 / tempz3 = AdcRegs.ADCRESULT0; /temp3 = _IQmpy(temp2,_IQ(10);/* IQ15 */ /tempz3 = (long)(AdcRegs.ADCRESULT1 - 0x56

9、52 + 0x8022)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)(tmp13); /dat_q15 = (AdcRegs.ADCRESULT11)&0x7FFF; /* Convert result to Q15 (unipolar signal) */ / tmp = (long)p-c2_gain*(long)dat_q

10、15; / p-c2_out = AdcRegs.ADCRESULT1 - offset; /dat_q15 = (AdcRegs.ADCRESULT21)&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)

11、 /初始化ADC模块unsigned int i;AdcRegs.ADCTRL1.bit.RESET = 1; /ADC模块软复位,3个周期后,该位自动清0for(i=0;iAdcRegs.ADCTRL1.bit.SUSMOD = 3; /仿真挂起模式,0为忽略仿真挂起AdcRegs.ADCTRL1.bit.ACQ_PS = 1; /采样保持脉冲个数,即SH为1+1=2个ADCCLKAdcRegs.ADCTRL1.bit.CPS = 0; /是否再对送给ADC的时钟进行二分频AdcRegs.ADCTRL1.bit.CONT_RUN = 0; /1:进入连续运行; 0:开始停止模式AdcRegs

12、.ADCTRL1.bit.SEQ_CASC = 0; /0:独立模式; 1:级联序列器模式AdcRegs.ADCTRL3.bit.ADCBGRFDN = 3; /带隙参考电路上电for(i=0;iAdcRegs.ADCTRL3.bit.ADCPWDN = 1; /除带隙参考电路外的其他ADC模块上电for(i=0;iAdcRegs.ADCTRL3.bit.ADCCLKPS = 3; /设置ADC的转换时钟ADCCLK = HSPCLK/(2*(ADCCLKPS+CPS)=25MHZAdcRegs.ADCTRL3.bit.SMODE_SEL = 0; /0:顺序采用模式,1:同步采样模式AdcR

13、egs.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启动SEQ1AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; /使能SEQ1中断AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ = 0;AdcRegs.ADCTRL2.b

14、it.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时,软件启动

15、ADC转换void InitEv(void)EvaRegs.T1CMPR = 0x0000;EvaRegs.T1PR = 75; /2MHZ的采样频率EvaRegs.GPTCONA.bit.T1TOADC = 2; /使能事情管理器A,周期中断启动ADCEvaRegs.T1CON.all = 0x1042; interrupt void ADInterrupt(void)IFR = 0x0000;/-ADTempADTempIndex = (unsigned char)(AdcRegs.RESULT0)8);ADTempIndex = (ADTempIndex+1)&0x01;Value =

16、ADTemp0 + ADTemp1;if(+aa )aa = 0;LED3 = LED3;/- AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR = 1; /清除INT_SEQ1中断标志AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; /复位SEQ1序列PieCtrl.PIEACK.all = 0xFFFF; /允许再次响应中断void main(void)InitSysCtrl(); /初始化系统DINT; /屏蔽全局中断IER = 0x0000; /禁止所有中断IFR = 0x0000; /清除所有中断标志InitPieCtrl(); /初始化PIE中断InitPieVectTable(); /初始化PIE中断矢量表InitGpio(); /初始化通用IO口InitSci(); /初始化SCIA寄存器,即初始化串口EALLOW; /允许操作寄

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论