/****************************************************************************************
 * 项目用途： 演示ADC和FVR模块的特点与使用方法
 * 文件名: main.c
 * 项目名: KF8A100FTN_ADC
 * 版 本: v1.0
 * 日 期: 2019年08月28日 11时16分14秒
 * 作 者: charles_cai
 * 功能： 首先，在没有外接晶振的情况下。通过P04脚输出FVR的3V电压。
 * 		使用4种模式进行ADC采样：
 * 		1、以VDD为参考电压，采样AD5（P14）通道电压。
 * 		2、以VDD为参考电压，采样FVR电压。
 * 		3、以VDD为参考电压，采样TS（内部温度传感器）电压。
 * 		4、以FVR为参考电压，采样AD5通道电压。
 * 注意：ADC采样结果的计算值和实际采样电压之间的误差在±10mv，被采样的信号电压必须要小于参考电压。
 * 		参考电压越精确、纹波越小，则ADC采样结果误差越小。
 * 		用VDD做为参考电压采样FVR，可以反推出VDD的电压。
 * 		FVR最大有5的误差，正常是2%精度
 * 		ADC外设使能后，不建议紧接着进行采样和转换工作，需要进行短暂的延时，让ADC外设电路充电完毕。如果省略这个步骤，会导致第一次的ADC采样不准确。
 ****************************************************************************************/
#include"main.h"

unsigned int buf1, buf2, buf3, buf4;
unsigned long VDD, V_r;//电源电压和使用内部参考测量的电压
//主函数
void main()
{
	Init_osc();
	Init_GPIO();
	Init_FVR(3);
	ANS04 =1;//FVR输出脚需要配置为模拟输入
	FVROE0 =1;//使能P04的FVR输出

	while(1)
	{
		//用VDD采样AD5
		Init_ADC(1);
		buf1= Adc_read();

		//用VDD采样FVR
		Init_ADC(2);
		buf2= Adc_read();
		VDD =3000;
		VDD =VDD *4096 ;
		VDD =VDD/buf2;//计算VDD = FVR* 4096 /ADC;

		//用VDD采样TS（内部温度传感器）
		Init_ADC(3);
		buf3= Adc_read();

		//用FVR采样AD5
		Init_ADC(4);
		buf4= Adc_read();
		V_r =3000;
		V_r = V_r *buf4;
		V_r = V_r /4096;//计算出AD5上输入的电压值
	}
}
//中断函数0:0X04入口地址
void int_fun0() __interrupt (0)
{

}


//中断函数1:0x14入口地址
void int_fun1() __interrupt (1)
{

}
