HC32 ADC 中断扫描操作
///< ADC中断服务函数void Adc_IRQHandler(void)
{
if(TRUE == Adc_GetIrqStatus(AdcMskIrqJqr))
{
Adc_ClrIrqStatus(AdcMskIrqJqr);
u32AdcRestult0 = Adc_GetJqrResult(AdcJQRCH0MUX);
u32AdcRestult2 = Adc_GetJqrResult(AdcJQRCH1MUX);
u32AdcRestult5 = Adc_GetJqrResult(AdcJQRCH2MUX);
u32AdcRestult0_1 = Adc_GetJqrResult(AdcJQRCH3MUX);
Adc_JQR_Stop();
}
}
///< ADC采样端口初始化
void App_AdcPortInit(void)
{
///< 开启ADC/BGR GPIO外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
Gpio_SetAnalogMode(GpioPortA, GpioPin0); //PA00 (AIN0)
Gpio_SetAnalogMode(GpioPortA, GpioPin2); //PA02 (AIN2)
Gpio_SetAnalogMode(GpioPortA, GpioPin5); //PA05 (AIN5)
} ///< ADC模块初始化
void App_AdcInit(void)
{
stc_adc_cfg_t stcAdcCfg;
DDL_ZERO_STRUCT(stcAdcCfg);
Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE);
Bgr_BgrEnable(); ///< 开启BGR
///< ADC 初始化配置
stcAdcCfg.enAdcMode = AdcScanMode; ///<采样模式-扫描
stcAdcCfg.enAdcClkDiv = AdcMskClkDiv1; ///<采样分频-1
stcAdcCfg.enAdcSampCycleSel = AdcMskSampCycle8Clk; ///<采样周期数-8
stcAdcCfg.enAdcRefVolSel = AdcMskRefVolSelAVDD; ///<参考电压选择-VCC
stcAdcCfg.enAdcOpBuf = AdcMskBufDisable; ///<OP BUF配置-关
stcAdcCfg.enInRef = AdcMskInRefDisable; ///<内部参考电压使能-关
stcAdcCfg.enAdcAlign = AdcAlignRight; ///<转换结果对齐方式-右
Adc_Init(&stcAdcCfg);
} ///< ADC插队扫描功能配置
void App_AdcJqrCfg(void)
{
stc_adc_jqr_cfg_t stcAdcJqrCfg;
DDL_ZERO_STRUCT(stcAdcJqrCfg);
///< 插队扫描模式功能及通道配置
///< 注意:扫描模式下,当配置转换次数为n时,转换通道的配置范围必须为
stcAdcJqrCfg.bJqrDmaTrig = FALSE;
stcAdcJqrCfg.u8JqrCnt = 4;
Adc_JqrModeCfg(&stcAdcJqrCfg);
Adc_CfgJqrChannel(AdcJQRCH0MUX, AdcExInputCH0);
Adc_CfgJqrChannel(AdcJQRCH1MUX, AdcExInputCH2);
Adc_CfgJqrChannel(AdcJQRCH2MUX, AdcExInputCH5);
Adc_CfgJqrChannel(AdcJQRCH3MUX, AdcExInputCH0);
///< ADC 中断使能
Adc_EnableIrq();
EnableNvic(ADC_IRQn, IrqLevel3, TRUE);
///< 启动插队扫描采样
Adc_JQR_Start();
} ADC 顺序扫描 功能配置
///< ADC 中断服务程序
void Adc_IRQHandler(void)
{
if(TRUE == Adc_GetIrqStatus(AdcMskIrqSqr))
{
Adc_ClrIrqStatus(AdcMskIrqSqr);
u32AdcRestult0 = Adc_GetSqrResult(AdcSQRCH0MUX);//获取顺序扫描通道0
u32AdcRestult2 = Adc_GetSqrResult(AdcSQRCH1MUX);//获取顺序扫描通道1
u32AdcRestult5 = Adc_GetSqrResult(AdcSQRCH2MUX);//获取顺序扫描通道2
u32AdcRestultAcc = Adc_GetAccResult();
Adc_SQR_Stop();
}
} ///< ADC 采样端口初始化
void App_AdcPortInit(void)
{
///< 开启GPIO外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
Gpio_SetAnalogMode(GpioPortA, GpioPin0); //PA00 (AIN0)
Gpio_SetAnalogMode(GpioPortA, GpioPin2); //PA02 (AIN2)
Gpio_SetAnalogMode(GpioPortA, GpioPin5); //PA05 (AIN5)
}
///< 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 = AdcScanMode; ///<采样模式-扫描
stcAdcCfg.enAdcClkDiv = AdcMskClkDiv1; ///<采样分频-1
stcAdcCfg.enAdcSampCycleSel = AdcMskSampCycle8Clk; ///<采样周期数-8
stcAdcCfg.enAdcRefVolSel = AdcMskRefVolSelAVDD; ///<参考电压选择-VCC
stcAdcCfg.enAdcOpBuf = AdcMskBufDisable; ///<OP BUF配置-关
stcAdcCfg.enInRef = AdcMskInRefDisable; ///<内部参考电压使能-关
stcAdcCfg.enAdcAlign = AdcAlignRight; ///<转换结果对齐方式-右
Adc_Init(&stcAdcCfg);
}
///< ADC 顺序扫描 功能配置
void App_AdcSQRCfg(void)
{
stc_adc_sqr_cfg_t stcAdcSqrCfg;
DDL_ZERO_STRUCT(stcAdcSqrCfg);
///< 顺序扫描模式功能及通道配置
///< 注意:扫描模式下,当配置转换次数为n时,转换通道的配置范围必须为
stcAdcSqrCfg.bSqrDmaTrig = FALSE;
stcAdcSqrCfg.enResultAcc = AdcResultAccEnable;
stcAdcSqrCfg.u8SqrCnt = 3;
Adc_SqrModeCfg(&stcAdcSqrCfg);
Adc_CfgSqrChannel(AdcSQRCH0MUX, AdcExInputCH0);
Adc_CfgSqrChannel(AdcSQRCH1MUX, AdcExInputCH2);
Adc_CfgSqrChannel(AdcSQRCH2MUX, AdcExInputCH5);
///< ADC 中断使能
Adc_EnableIrq();
EnableNvic(ADC_IRQn, IrqLevel3, TRUE);
///< 启动顺序扫描采样
Adc_SQR_Start();
} int32_t main(void)
{
///< ADC 采样端口初始化
App_AdcPortInit();
///< ADC 模块初始化
App_AdcInit();
///< ADC 顺序扫描 功能配置
App_AdcSQRCfg();
while(1)
{
;
}
}
页:
[1]