今晚捣鼓了一下EVB板ADC单次一直采样模式,用板子上的电位器调节。
代码:
#include "adc.h"
#include "gpio.h"
#include "bgr.h"
/******************************************************************************
* Local pre-processor symbols/macros ('#define')
******************************************************************************/
/******************************************************************************
* Global variable definitions (declared in header file with 'extern')
******************************************************************************/
volatile uint32_t u32AdcRestult;
/******************************************************************************
* Local type definitions ('typedef')
******************************************************************************/
/******************************************************************************
* Local function prototypes ('static')
******************************************************************************/
/******************************************************************************
* Local variable definitions ('static') *
******************************************************************************/
/*****************************************************************************
* Function implementation - global ('extern') and local ('static')
******************************************************************************/
void App_AdcPortInit(void);
void App_AdcInit(void);
void App_AdcSglCfg(void);
/**
******************************************************************************
** \brief Main function of project
**
** \return uint32_t return value, if needed
**
** This sample
**
******************************************************************************/
int32_t main(void)
{
///< ADC采样端口初始化
App_AdcPortInit();
///< ADC模块 初始化
App_AdcInit();
///< ADC 单次采样模式 配置
App_AdcSglCfg();
while(1)
{
if(TRUE == Adc_GetIrqStatus(AdcMskIrqSgl))
{
///< 获取采样值
u32AdcRestult = Adc_GetSglResult();
Adc_ClrIrqStatus(AdcMskIrqSgl);
}
}
}
///< ADC 采样端口初始化
void App_AdcPortInit(void)
{
///< 开启ADC/BGR GPIO外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
Gpio_SetAnalogMode(GpioPortC, GpioPin5); //PA00 (AIN0)
}
///< ADC模块 初始化
void App_AdcInit(void)
{
stc_adc_cfg_t stcAdcCfg;
DDL_ZERO_STRUCT(stcAdcCfg);
///< 开启ADC/BGR外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE);
Bgr_BgrEnable(); ///< 开启BGR
///< ADC 初始化配置
stcAdcCfg.enAdcMode = AdcSglMode; ///<采样模式-单次
stcAdcCfg.enAdcClkDiv = AdcMskClkDiv1; ///<采样分频-1
stcAdcCfg.enAdcSampCycleSel = AdcMskSampCycle12Clk; ///<采样周期数-12
stcAdcCfg.enAdcRefVolSel = AdcMskRefVolSelInBgr2p5; ///<参考电压选择-内部2.5V
stcAdcCfg.enAdcOpBuf = AdcMskBufDisable; ///<OP BUF配置-关
stcAdcCfg.enInRef = AdcMskInRefEnable; ///<内部参考电压使能-开
stcAdcCfg.enAdcAlign = AdcAlignRight; ///<转换结果对齐方式-右
Adc_Init(&stcAdcCfg);
}
///< ADC 单次采样模式 配置
void App_AdcSglCfg(void)
{
///< 配置单次采样通道
Adc_CfgSglChannel(AdcExInputCH15);
///< 启动单次一直采样
Adc_SGL_Always_Start();
}
/******************************************************************************
* EOF (not truncated)
******************************************************************************/
效果图:
我有一个问题。为什么采样值那么小呢?谢谢!
|