- /******************************************************************
- *注 意:硬件上的AVDD一定要接上基准电压
- ******************************************************************/
- #include "SmartM_M0.h"
- #define DEBUGMSG printf
- #define ADC_CLOCK_DIVIDER 0x00040000
- #define ADC_CLK_Source 0x00000000
- #define AREF_VOLTAGE 4480
-
- STATIC VOID AdcInit(VOID)
- {
- if(ADC_CLK_Source==0x00000004)
- {
- PLLCON |= PLL_SEL;
- PLL_Enable();
- /* 等待PLL稳定 */
- while((CLKSTATUS & PLL_STB) == 0);
- }
- /* 复位ADC */
- set_ADC_RST;
- clr_ADC_RST;
- /* ADC时钟使能 */
- set_ADEN_CLK;
- if (ADC_CLK_Source==0x00000000 )
- {
- ADCClkSource_ex12MHZ;
- }
- else if(ADC_CLK_Source==0x00000004 )
- {
- ADCClkSource_PLL;
- }
- else if(ADC_CLK_Source==0x00000008 )
- {
- ADCClkSource_int22MHZ;
- }
- /* 设置ADC分频器 */
- CLKDIV=ADC_CLOCK_DIVIDER;
-
- /* ADC使能 */
- set_ADEN;
- set_CALEN;
- while(!(ADCALR&CALDONE));
- /* 单次转换模式 */
- setAD_SIG;
- clr_DIFFEN;
- /* 设置ADC通道 */
- set_CHEN0;
- /* 使能P1.0为模拟输入引脚 */
- set_ADC0_channel;
- /* 禁止P1.0数字输入通道 */
- P1_OFFD |= OFFD0;
- /* 设置P1.0引脚为输入模式Configure P1.0 as input mode */
- P10_InputOnly;
- /* 清除ADC中断标志位 */
- set_ADF;
- }
- /****************************************
- *函数名称:main
- *输 入:无
- *输 出:无
- *功 能:函数主体
- ******************************************/
- INT32 main(VOID)
- {
- UINT32 unVoltageValue;
-
- PROTECT_REG //ISP下载时保护FLASH存储器
- (
- PWRCON |= XTL12M_EN; //默认时钟源为外部晶振
- while((CLKSTATUS & XTL12M_STB) == 0); //等待12MHz时钟稳定
-
- CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M;//设置外部晶振为系统时钟
- )
- UartInit(12000000,9600); //波特率设置为9600bps
- AdcInit();
- while(1)
- {
- set_ADST; //启动ADC
- while(ADSR&ADF==0); //等待ADC结束
- set_ADF; //清空ADC结束标志位
- unVoltageValue = AREF_VOLTAGE*(ADDR0&0xFFF)/4096;//将ADC值转换为电压值
- DEBUGMSG("Voltage %d mv \r\n",unVoltageValue);
- Delayms(500);
- }
- }
|