当前位置: 首页 > article >正文

S32K144外设实验(三):ADC单通道连续采样(中断)

这次的实验比较简单,主要目的就是验证一下ADC的中断功能,思路是使用软件触发ADC的连续单通道采样,将采样值通过串口发送到上位机观察数是否正确。
其实官方并不推荐使用中断的方式,这种方式会占用大量的CPU资源,笔者安排这篇文章的主要目的是在使用ADC中断的时候发现了个容易忽略的问题,如下图:
ADC的配置
笔者配置了ADC通道12的连续转换并使能了通道中断,关键的点就在中断这里,通过查看SDK中的代码发现,配置后的代码并没有在SDK的初始化代码中使能NVIC中的中断开关,一定要注意在使用中断的时候配置中断优先级以及使能NVIC中的中断开关。
配置代码如下:

void AdcInit(void)
{
	//初始化ADC0模块
	ADC_DRV_ConfigConverter(INST_ADC_CONFIG_1, &adc_config_1_ConvConfig0);
	//ADC0校准
	ADC_DRV_AutoCalibration(INST_ADC_CONFIG_1);

	//设置抢占中断优先级
	INT_SYS_SetPriority(ADC0_IRQn, 12); //设置中断优先级
	INT_SYS_EnableIRQ(ADC0_IRQn);	//使能ADC0中断,如果使用中断必须使能
}

主程序代码如下:

uint16_t adcSel12Value = 0;
//ADC0中断服务程序
void ADC0_IRQHandler(void)
{
	ADC_DRV_GetChanResult(INST_ADC_CONFIG_1, 0U, &adcSel12Value);
}
int main(void)
{
	McuInit();		// 芯片基础初始化:时钟、GPIO、中断使能
	SysTickBegin();	//	SysTick定时器计时初始化
	Lpuart1Init();	//LPUART的初始化
	AdcInit();		//初始化ADC
	//软件启动ADC0
	ADC_DRV_ConfigChan(INST_ADC_CONFIG_1, 0U, &adc_config_1_ChnConfig0);
	while (1)
	{
		printf("The Sel12 Volt is %d\r\n", adcSel12Value);
		DelayMsFromSysTick(300);
	}
}



http://www.kler.cn/a/596095.html

相关文章:

  • AudioTrack
  • 树莓集团数字产业布局解读:战略+商业双驱动
  • 【数据挖掘】Python基础环境安装配置
  • 每日一题--C与C++的差别
  • Mac 上开发 Ragflow
  • PyCharm找不到包?一文解决 No module named报错~
  • 当DeepSeek走进生活:一场颠覆日常的智能革命
  • Trae AI 上新 SSHremote:服务器 Python 接口日志排查实战指南
  • ArkTS 基础语法介绍
  • 相机光学中一些疑难问题的解释
  • 【春招笔试】阿里云2025.03.20
  • 批量给 PPT 幻灯片页面添加文字和图片水印
  • 用ArcGIS做一张符合环评要求的植被类型图
  • 后端安全可靠性
  • arm64和aarch64是一个架构吗
  • Linux_进程概念(B)-环境变量进程地址空间【Linux】
  • XSS 绕过分析:一次循环与两次循环的区别
  • 【深度学习量化交易16】触发机制设置——基于miniQMT的量化交易回测系统开发实记
  • java-正则表达式-集合-泛型-注解-异常
  • 【负载均衡系列】LVS