#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;
}
|