#include "Config.h"
u8 VDD_Value1=0;
void AD_IO_Init()
{
PC_DDR_DDR4 = 0; // 设置PD4为输入
PC_CR1_C14 = 1; // 设置PD4为上拉输入
PC_CR2_C24 = 0; //
}
void ADC_Init()
{
ADC_CLK_EN();
ADC1_TRIGR1_VREFINTON=1;//打开内部参考电压源
ADC1_CR1_ADON=1; //wakes up the ADC from Power down mode.
ADC1_CR2_PRESC=1;//Select a sample time of 10 μs
// 0: f(ADC_CLK) = CK
// 1: f(ADC_CLK) = CK/2 //系统时钟此时为默认的16M/8=2M,这里分频后,fadc=2M/2=1M
ADC1_SQR1_DMAOFF=1; //关闭DMA,暂时不用
ADC1_CR3_SMTP2=0x06;//采样时间为24 ADC clock cycles,也就是24*1us=24us
//000: 4 ADC clock cycles
//001: 9 ADC clock cycles
//010: 16 ADC clock cycles
//011: 24 ADC clock cycles
//100: 48 ADC clock cycles
//101: 96 ADC clock cycles
//110: 192 ADC clock cycles
//111: 384 ADC clock cycles
ADC1_CR3_CHSEL=4;
ADC1_SQR1_CHSEL_S28=1; //选择内部参考电压通道
ADC1_CR1_EOCIE=1;
}
#pragma vector=0x14
__interrupt void ADC1_ISR(void)
{
static uint16_t temp=0;
u16 VDD_Value;
ADC1_SR_EOC=0;
temp = ADC1_DRH;
temp = (temp<<8)+ADC1_DRL;
VDD_Value=(uint32_t)1225*4096/temp;//得到的数值单位为mv
VDD_Value1=(u8)(VDD_Value/100);
asm("nop");
}
void ADC_START(void)
{
ADC1_CR1_START = 1;
}
void ADC_STOP(void)
{
// ADC1_CR1_START = 0;
}
|