一、前言
本文介绍如何使用 E3 芯片 ADC 的 Async mode 转换和中断处理功能。
使用 adc_Async_int 示例程序,完成 ADC 转换 A12、A14、A15 这些管脚上的电压信号,并输出相应的电压数据。
硬件平台:芯驰 E3640 E3_GATEWAY_A03 开发板
软件平台:SemiDrive_E3 SSDK PTG2.0
Demo流程概述:
- ADC 初始化;
- 在 0~2 位置上配置三种 ADC 转换的模拟参数,如采样时间、参考电压、单端差分模式;
- 在 rc0 entry 的 0~3 位置上配置通道转换参数,包含通道号、模拟参数所在位置等;
- 配置 rc0 timer 的运行和触发参数;
- 设置控制器要记录的中断状态,以及哪些状态可以触发中断,注册中断回调函数并使能;
- 启动 rc0 timer 进行触发,启动 ADC 的 Async mode。 Async mode 下,调度器按固定的优先级顺序(RCHT>RC0>RC1>RC2>RC3),接收来自各 rc 的触发信号并进行模数转换;
- 中断触发时将数据读走;
- 读满数据后停止转换,关闭中断,清空余下的转换数据;
- 计算转换值并打印输出相应的电压值。
二、电气原理图
E3_REF_GATEWA_A03_SCH 可知 GPIO_A12 外接 VDD3.3V,GPIO_A14(A15) 外接 VDD1.8V。
图 1 原理图部分
三、程序分析
例程路径:E3_SSDK_PTG2.0_Source_Code\ssdk\boards\e3_gateway\driver_demo
\adc\adc_Async_int,程序进入主函数中,在一系列初始化、复位后,循环设置片外引脚与片内 ADC 通道连接,然后调用 ADC 异步例程,最终进入到死循环。
图 2 入口函数
异步例程介绍:
- 在 0~2 位置上配置三种 ADC 转换的模拟参数,如采样时间、参考电压、单端差分模式;
- 在 rc0 entry 的 0~3 位置上配置通道转换参数,包含通道号、模拟参数所在位置等;
- 配置 rc0 timer 的运行和触发参数;
图 3 异步例程
- 设置控制器要记录的中断状态,以及哪些状态可以触发中断,注册中断回调函数 adc_demo_int() 并使能;
图 4 例程中断相关
- 启动 rc0 timer 进行触发,启动 ADC 的 Async mode。 Async mode 下,调度器按固定的优先级顺序(RCHT>RC0>RC1>RC2>RC3),接收来自各 rc 的触发信号并进行模数转换;
图 5 例程启动相关
- 中断触发时将数据读走;
图 6 中断处理函数
- 读满数据后停止转换,关闭中断,清空余下的转换数据;
图 7 转换停止相关
- 计算转换值并打印输出相应的电压值。
图 8 例程输出相关
调用的函数及电压转换公式:
图 9 输出相关细节
四、运行现象:
打印的电压值与原理图所示相符,输出逻辑与异步例程代码一致。
图 10 运行现象
五、参考文档
《E3400_E3600_MCU_Datasheet_Rev00.16》
《SemiDrive_E3_SSDK_User_Guide》
《SD103_E3_REF_GATEWAY_ePOWERTRAIN产品用户手册》
欢迎在博文下方留言评论,我们会及时回复您的问题。如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com
作者:Alan Li / 李亚楠
评论