好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

dsp adc采集程序.doc

3页
  • 卖家[上传人]:简****9
  • 文档编号:106347288
  • 上传时间:2019-10-14
  • 文档格式:DOC
  • 文档大小:36KB
  • / 3 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • include "DSP281x_Device.h" #include "DSP281x_Examples.h" #include "f2812a.h"#include "stdio.h"#include "math.h"int ConversionCount,f;int Voltage[1024],Vmax,Vmin,Vavr; //电压转换结果存储数组及一个周期内的采样值数组float RMS=0,U0[1024],SV[]; //电压有效值interrupt void adc_isr(void);main() { InitSysCtrl(); //初始化时钟,CPU为15M,高速时钟Hspclk为1.5M DINT; //关闭中断 InitPieCtrl(); //初始化Pie寄存器 IER=0x0000; //禁止所有可屏蔽中断 IFR=0x0000; InitPieVectTable(); //初始化Pie中断向量表 EALLOW; //打开寄存器写保护 PieVectTable.ADCINT=&adc_isr; //将Adc中断子程序的服务地址写入中断向量表 EDIS; //禁止寄存器的访问 InitAdc(); //初始化Adc,完成Adc的上电 InitLcd(); //液晶初始化 /*在Pie中使能Adc的中断ADCINT*/ PieCtrlRegs.PIEIER1.bit.INTx6=1; //查表知ADCINT对应的是INT1,INTx.6 IER=M_INT1; //使能CPU中断 EINT; //使能全局中断 /*配置Adc模块*/ AdcRegs.ADCMAXCONV.all=0x0000; //设置SEQ1的最大转换通道数为1 AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0; //选择0通道 AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1; //选择EVA作为SEQ1的触发启动信号 AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1; //使能SEQ1的中断操作(中断方式0) /*配置EVA*/ EvaRegs.T1CNT=0x0000; //计数初值 EvaRegs.T1PR=0x007D; //设置周期寄存器值为125,因为下面设的是增减计数模式,EVA的下溢启动Adc,所以采样周期是250个计数周期 EvaRegs.GPTCONA.bit.T1TOADC=0x1; //设置EVA的下溢启动Adc EvaRegs.T1CON.all=0x0842; //设置T1为连续增减计数模式,不分频,即时钟为高速时钟Hspclk:1.5M , ConversionCount=0; while(1) //等待中断 { ; }}interrupt void adc_isr(void){ int i=0,j=0,flag=0; //flag作为遇到零点的标志 Voltage[ConversionCount]=AdcRegs.ADCRESULT0>>4; U0[ConversionCount]=3.0*Voltage[ConversionCount]/4095; if(ConversionCount==1023) //如果采样点数达到了1024 { PieCtrlRegs.PIEIER1.bit.INTx6=0; //禁止中断请求 ConversionCount=0; /*求出1024个点中的最大最小值和中间值*/ Vmax=Voltage[0]; Vmin=Voltage[0]; for(i=0;i<1024;i++) { if(VmaxVoltage[i]) Vmin=Voltage[i]; //求出最小值 } Vavr=(Vmax-Vmin)/2; //求出中间值 for(i=1;i<1024;i++) { if((Voltage[i-1]<=Vavr)&&(Voltage[i]>=Vavr)) { flag++; } if(flag==1) { SV[j]=U0[i]; //U0[i]就是对应的Voltage[i]的模拟值 RMS+=SV[j]*SV[j]; j++; } if(flag==2) { i=1024; flag=0; } } RMS=sqrt(RMS/j); rg=(int)RMS; r1=((int)(RMS*10))%10; r2=((int)(RMS*100))%10; f=(1500000/250)/j; fb=f/100; fs=(f-fb*100)/10; fg=f-fb*100-fs*10; lcd_write_dy(); lcd_write_pl(); PieCtrlRegs.PIEIER1.bit.INTx6=1; //使能中断请求 } else ConversionCount++; /*复位SEQ1,等待触发信号重启下次转换*/ AdcRegs.ADCTRL2.bit.RST_SEQ1=1; //复位SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR=1; //清除SEQ1的中断标志位 PieCtrlRegs.PIEACK.all=PIEACK_GROUP1; //使能Adc模块的下次中断请求 return;}。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.