#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
#include "f2812a.h"
#include "stdio.h"
#include "math.h"
int ConversionCount,f;
int V
oltage[1024],Vmax,Vmin,Vavr;
//
电压转换结果存储数组及一个周期内的采样值数?/p>
float RMS=0,U0[1024],SV[];
//
电压有效?/p>
interrupt void adc_isr(void);
main()
{
InitSysCtrl();
//
初始化时钟,
CPU
?/p>
15M,
高速时?/p>
Hspclk
?/p>
1.5M
DINT;
//
关闭中断
InitPieCtrl();
//
初始?/p>
Pie
寄存?/p>
IER=0x0000;
//
禁止所有可屏蔽中断
IFR=0x0000;
InitPieVectTable();
//
初始?/p>
Pie
中断向量?/p>
EALLOW;
//
打开寄存器写保护
PieVectTable.ADCINT=&adc_isr;
//
?/p>
Adc
中断子程序的服务地址写入中断向量?/p>
EDIS;
//
禁止寄存器的访问
InitAdc();
//
初始?/p>
Adc
,完?/p>
Adc
的上?/p>
InitLcd();
//
液晶初始?/p>
/*
?/p>
Pie
中使?/p>
Adc
的中?/p>
ADCINT*/
PieCtrlRegs.PIEIER1.bit.INTx6=1;
//
查表?/p>
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.EV
A_SOC_SEQ1=1;
//
选择
EV
A
作为
SEQ1
的触发启动信?/p>
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;
//
使能
SEQ1
的中断操作(中断方式
0
?/p>
/*
配置
EVA*/
EvaRegs.T1CNT=0x0000;
//
计数初?/p>
EvaRegs.T1PR=0x007D;
//
设置周期寄存器值为
125
,因为下面设?/p>
是增减计数模式,
EV
A
的下溢启?/p>
Adc
,所以采样周期是
250
个计数周?/p>
EvaRegs.GPTCONA.bit.T1TOADC=0x1;
//
设置
EV
A
的下溢启?/p>
Adc
EvaRegs.T1CON.all=0x0842;
//
设置
T1
为连续增减计数模式,不分频,
即时
钟为高速时?/p>
Hspclk
?/p>
1.5M
?/p>