系列文章目录

上一篇基于EB写的,比较一般;
https://blog.csdn.net/qq_44688936/article/details/127752952


文章目录

  • 系列文章目录
  • 前言
  • 一、ADCGeneral
  • 二、AdcHWUnits
    • 2.1 ADCChannnels
    • 2.2 ADCGroups
    • 2.3 AdcHwUnitInputClass
  • 总结

前言

本文为DaVinci 工具链,基于TC397芯片的MCAL-ADC模块配置解析,一点学习总结,抛砖引玉,让各位见笑了。


配置内容主要包括以下部分

一、ADCGeneral

2是实现去初始化功能的API

3、13都是实现错误检测功能,这里用到了所以都配为ON

5、队列机制: 只有在AdcNonAutosarDmaResultHandling is false [STD_OFF]
AdcPriorityImplementation(15) is ADC_PRIORITY_NONE. 这种情况下才能编辑。
排队机制被禁用的话,则一次只处理一个转换。

6、16是启用AdcGroup功能的API,必须勾选。

7 是使能ADC的通知函数功能的API

8实现硬件触发功能

9是验证ADC驱动程序的初始化是否完成

10 选择反初始化API的模式,默认的操作模式为SUPERVISOR

11、添加/删除所有电源状态管理相关api (ADC_SetPowerState, ADC_GetCurrentPowerState, ADC_GetTargetPowerState, ADC_PreparePowerState),指示HW是否提供低电源状态管理;(黑点代表这个功能目前没有设置)

12、对转换器状态轮询进行等待的最大等待时间,要确保下一次转换开始的时候,上一次的转换已经完成,转换器已经进入了空闲状态;为了确保转换器处于空闲状态,需要对转换器状态轮询进行等待,其最大等待时间由AdcMaxChConvTimeCount中输入的值定义

12的取值与15-ADC转换优先级(AdcPriorityImplementation)和5、队列机制使能(AdcEnableQueuing)有关。
当15选择的是软件硬件优先级机制都可用,或者选择优先级机制不可用并且ADC队列使能开关打开时,12的取值范围为16-16962;
当15选择的是只有硬件优先级可以或者选择优先级机制不可用并且ADC队列使能未打开时,12的选择范围为0–16962;

15 、有三种优先级机制可以选择分别是:
AdcPriorityHw(硬件优先级机制):只有硬件优先级机制可用
(AdcPriorityHwSw):硬件和软件优先级都可用;
 ADC_PRIORITY_NONE :优先级机制不可用;
软件触发组的组优先级通常配置为低于硬件触发组的组优先级级别;

18、ADC结果缓冲区中,ADC原始结果的对齐方式(左/右对齐)。举例如下

19、确定ADC驱动程序的结果处理模式;
ADC_INTERRUPT_MODE_RESULT_HANDLING:中断模式传输,转换结果在请求源ISR (AUTOSAR模式)中传输。
ADC_DMA_MODE_RESULT_HANDLING:使用DMA通道模式传输转换结果。ADC_POLLING_MODE_RESULT_HANDLING:轮询模式,使用同步api传输转换结果。

20、参数定义运行时api将在其中操作的特权模式。
由于ADC驱动程序访问SFRs(特殊功能寄存器),在监控器模式下操作ADC驱动程序更加高效。因此,默认的操作模式是supervisor。
当AdcInitDeInitApiMode(第10个配置项)配置为User-1模式时,AdcRuntimeApiMode必须配置为User-1模式

21、AdcSafetyEnable 安全使能
22、AdcSleepMode :
该参数决定ADC驱动程序是否接受或拒绝来自SCU的休眠模式请求。
ADC_SLEEP_MODE_ACCEPT: 接受SCU的睡眠模式请求 ;
ADC_SLEEP_MODE_REJECT: 拒绝SCU的睡眠模式请求;
SCU - 系统控制单元(system control Unit)负责处理系统控制任务;

23、AdcStartupCalibApi(启动校准功能):从代码中添加/删除服务Adc_GetStartupCalStatus()和Adc_TriggerStartupCal()。启用这个API之后就能实现触发返回ADC硬件组的启动校准状态了;
Adc_GetStartupCalStatus() :该API返回ADC硬件组的启动校准状态
Adc_TriggerStartupCal() :该API触发启动校准。该API可以从任何核调用,在调用API之前,应该确保所有核的初始化序列都已经结束。

24、AdcSupplyVoltage
该参数将模拟电路调整到所选的电源电压:
ADC_VOLTAGE_3P3V: 选择3.3V固定电源接通;
ADC_VOLTAGE_5V: 选择固定5V电源接通;
ADC_VOLTAGE_CONTROLLED_BY_SUPPLY: 电压范围由硬件支持的电源控制;(默认)

25、AdcSyncConvEnable :启用或禁用ADC硬件组之间的同步转换。

26、AdcTriggerOneConversionEnable: 该参数允许在API Adc_TriggerStartupCal()中触发启动校准之前,为每个配置的HW单元执行一个虚拟转换

27、 AdcVersionInfoApi 获取版本信息;

二、AdcHWUnits

1、AdcAnalogClockSyncDelay :参数决定模拟时钟同步时延。延迟应小于或等于AdcPrescale-1(DIVA)。
范围 : 0–7,默认为0;
作用:让ADC延时进行同步采样

2、AdcCalibrationSampleTime :参数决定校准采样时间
ADC_CAL_TIME_2_TIMES_TADCI: 校准采样时间 = 2 x tADCI (默认)
ADC_CAL_TIME_4_TIMES_TADCI: Calibration sample time = 4 x tADCI
ADC_CAL_TIME_6_TIMES_TADCI: Calibration sample time = 6 x tADCI
ADC_CAL_TIME_8_TIMES_TADCI: Calibration sample time = 8 x tADCI
tADCI ==1/fADCI
tADCI = Analog clock
3、选择时钟资源,这里选择的是系统时钟
4、硬件单元的ID,这里为ADC0;

5、AdcIdlePrechargeEnable
该参数决定采样电容是否开启预充电。
电动汽车预充电路的主要作用是给电机控制器(即逆变器)的大电容进行充电,以减少接触器接触时火花拉弧,降低冲击,增加安全性。电容并联在电源两端的时候,当电源接通瞬间,电容两端的电压不会突变,而电容两端的电流会突变。
如果没有预充电路,那接触器会因为大电流发生粘连或损坏,影响电机控制器的安全性和可靠性。

6、7没有使用到,作用比较小
8、AdcPostCalibrationDisable
参数决定是否启用或禁用 后校正。这里没怎么研究,之后专门介绍一下ADC采样的校准与后校正;

9、AdcPrechargeReference
参数决定是否使用VDDM/VSSM预充(ADC的主电源)
VDDM-------电源引脚
VSSM--------接地引脚

10、AdcPrescale
参数定义从fADC生成模拟内部时钟(fADCDI)的分压器。
该参数的低倍数为1,因为用于生成模拟频率的分压器是执行转换时必须使用的。
范围 :2—32
默认值 :4;

11、AdcReferencePrechargePhases
该参数确定参考输入的预充电时钟相位,可以选择提前预充1个时钟相位或者两个相位,默认为PHASE_1;

12、AdcRequestSource0ConvMode
参数确定请求源的转换启动模式。请求源的转换启动模式配置是可编辑的,只有在启用优先级机制(AdcPriorityImplementation–Genaral部分的选项15)时才适用。
adc_cancel_injt_repeat_mode:请求源可以取消其他源正在进行的转换
ADC_WAIT_FOR_START_MODE:请求源等待从其他源完成当前转换

15、AdcSampleSyncEnable
参数用于确定ADC采样时间同步是否启用。
同步采样一般应用于交流信号中,是指多个ADC的采集时刻完全同步。

16、AdcSyncConvMode
参数确定硬件组以独立模式还是同步模式运行。同步采样模式,例如三相电机需要采样UVW三个电流数据,所以必须使用同步采样,同步采样电机的三个数据一般要设置一个主模式,两个从模式;

ADC_STAND_ALONE : 独立运行(默认)
ADC_SYNC_MASTER : 主模式运行
ADC_SYNC_SLAVE : 从模式运行

参数AdcSyncConvMode决定了主HW组和从HW组。
ADC驱动程序支持跨ADC硬件组的通道同步转换。该特性可以通过adcsyncconvable、AdcSyncConvMode和AdcSyncConvChannelEnable配置参数启用。参数AdcSyncConvMode决定了主HW组和从HW组。
当Adc通道组在主HW组上被触发时,所有通过AdcSyncConvChannelEnable标记为同步转换的通道也将在从HW组上被触发。

2.1 ADCChannnels

1、An Channel Num
TC397有些硬件单元有8个通道,有些有16个,需要查看原理图确定。

3、启用了限制检查功能的ADC通道必须分配给ADC组,并且该Group只能有一个ADC通道

4、AdcChannelRefVoltsrcHigh :每个通道的上升参考电压源,配置选项有两个;
ADC_USES_CH0:使用通道CH0作为转换的参考电压。
ADC_USES_VREF:使用模拟参考电压作为转换的参考电压。

5、AdcChannelRefVoltsrcLow
该参数默认值添加到ADC_USES_VAGND中,因为硬件只支持EVADC模拟接地引脚,使用模拟参考地作为转换的参考电压。
参考电压:这个参考电压也叫做基准电压,如果没有基准电压,就无法确定被测信号的准确幅值。例如基准电压为2.5V,则当被测信号达到2.5V时ADC输出满量程读数,使用者就会知道ADC输出的满量程等于2.5V。不同的ADC,有的是外接基准,也有的是内置基准无需外接,还有的ADC外接基准和内置基准都可以用,但外接基准优先于内置基准。

6、InputClassSelection:每个VADC HW单元有4个输入类(2个全局输入类和2内核输入类)用于配置通道分辨率和采样时间。选择的输入类参数值为信道分辨率和信道采样时间。

7、启用此通道的同步转换。该通道的转换也将触发从HW组上相同模拟通道编号的转换;

2.2 ADCGroups

Group与Channel、HWUnit的关系:

  • 任何Channel都必须挂靠到Group下面,上层/API都是操作Group的,不能直接去操作Channel。
    每个Group下面可以挂一个或多个Channel,但至少有一个Channel.

    如果启用了全局限制检查功能并为ADC通道启用了通道特定限制检查,则通道组仅包含一个ADC通道

    如果挂了多个Channel,则这些Channel必须属于同一硬件单元。不能跨多个物理单元。

    一个Channel可以同时属于多个Group,如上CH0,CH1。但这种情况需要用户自己合理管控转换顺序。否则可能会出现冲突

ADC-Group与Channel、HWUnit详解参考这里

1、2为通道别名

3、组转换结果的访问模式类型,(模数转换之后需要设置如何访问转换后的结果)
有两种模式
ADC_ACCESS_MODE_SINGLE 单值访问模式—直接访问
ADC_ACCESS_MODE_STREAMING 流访问模式—缓存访问
streaming模式不允许在one-shot模式下软件触发时使用

4、AdcGroupConversionMode: ADC模数转换的模式–如何进行转换
ADC_CONV_MODE_CONTINUOUS :ADC通道组的转换在软件API调用(启动)后持续执行。转换本身是自动运行的(不需要额外的软件或硬件触发器)。
ADC_CONV_MODE_ONESHOT : ADC通道组的转换在触发后执行一次。

5、GroupID— 组的别名

6、AdcGroup的优先级,范围是0到255,越大优先级越高;

7、AdcGroupTriggSrc :选择Group的触发源,可以选硬件或者软件触发;
依赖关系::AdcGroupConvMode:触发源HW对于连续转换模式不可用。

8、AdcHwExtGateSelect:参数为组配置硬件门控源。值的范围取决于设备。
当触发器通过GATE输入时,AdcHwExtGateSelect应该是CCU6(AdcHwExtTrigSelect = ADC_TRIG_15_GxREQTRP_GxREQGTySEL)

9、AdcHwExtTrigSelect:为触发请求源配置请求引脚外部触发信号。

10、AdcHwGateSignal :此参数为要启用的请求源的门控信号级别。
如果选择ADC_GATE_SIGNAL_HIGH,高电平触发转换。
如果选择ADC_GATE_SIGNAL_LOW,低电平触发转换。
AdcHwExtTrigSelect ==ADC_USE_GATE_PIN_TO_TRIG.时,这个参数不可编辑;
AdcHwTrigType == HW_TRIGG_TIMER时,这个参数不可编辑;

11、AdcHwTrigSignal:
ADC_HW_TRIG_BOTH_EDGES: 上升,下降沿都触发
ADC_HW_TRIG_FALLING_EDGE:下降沿触发;
ADC_HW_TRIG_RISING_EDGE: 上升沿触发;

当AdcHwExtTrigSelect作为GTM(定时器)时,AdcHwTrigSignal应该是ADC_HW_TRIG_RISING_EDGE。
当AdcHwExtTrigSelect是通过GATE_PIN ,并且AdcHwExtGateSelect是GTM或CCU6 (Timer)时,AdcHwTrigSignal应该选择 ADC_HW_TRIG_RISING_EDGE。

12、AdcStreamingBufferMode
将流缓冲区配置为“线性缓冲区”(即,一旦流缓冲区满,ADC驱动程序就会停止转换)或“环形缓冲区”(如果到达流缓冲区的末端,则环绕)
ADC_STREAM_BUFFER_CIRCULAR :即使流缓冲区已满(达到的样本数量),ADC驱动程序也会通过绕流缓冲区本身继续转换。

ADC_STREAM_BUFFER_LINEAR : 一旦流缓冲区满(达到采样数),ADC驱动程序就停止转换;
依赖:AdcGroupAccessMode:仅对流访问模式有效

13、AdcStreamingNumSamples(没截图到):
在流访问模式下,每个通道要获取的ADC值的数量。
在单访问模式下,该参数假设值为1,因为每个通道只处理一个样本。
范围: 1-255;

AdcGroupDefinition :分配AdcChannels给AdcGroups。

Res Reg Definition :此参数定义用于存储此特定ADC转换结果的结果寄存器。对于AdcGroupDefinition的节点,该参数的值应按降序排列。

2.3 AdcHwUnitInputClass

AdcChConvMode
参数定义标准转换的降噪级别。
ADC_NOISE_REDUCTION_STEPS_0: 标准转换
ADC_NOISE_REDUCTION_STEPS_1: 一个额外的降噪转换步骤
ADC_NOISE_REDUCTION_STEPS_3: 3 个额外的降噪转换步骤
ADC_NOISE_REDUCTION_STEPS_7: 7 个额外的降噪转换步骤

AdcChPreChargeClkCycles
参数定义用于标准转换的模拟输入预充电时钟周期数。四个选择项:
ADC_INPUT_PRECHARGE_CYCLES_0: 没有预先充电
ADC_INPUT_PRECHARGE_CYCLES_16: 预先16个时钟周期
ADC_INPUT_PRECHARGE_CYCLES_32: 预先32个时钟周期
ADC_INPUT_PRECHARGE_CYCLES_8: 预先8个时钟周期

AdcChSampleTime
参数定义要添加到2个采样时钟周期的最小采样阶段的额外时钟周期数。
范围 0-31

总结

未完成问题:
ADC硬件触发配置原理,AD采样时间、转换时间、校准时间、后校正时间计算,
ADC Buffer Access Mode Example。后续更新

【搞一点AUTOSAR】基于TC397的MACL_ADC配置(Davinci工具链)相关推荐

  1. 【搞一点AUTOSAR】MCAL-ADC转换请求和转换队列

    系列文章目录 [搞一点AUTOSAR]基于TC397的MACL_ADC配置(Davinci工具链) [搞一点AUTOSAR]基于TC397的MACL-ADC配置解读(使用EB) 文章目录 系列文章目录 ...

  2. 嵌入式 配置arm工具链

    嵌入式 配置arm工具链 一.简述    记--在Ubuntu18.04配置4.4.1版本的arm工具链,使用arm工具链编译程序生成的可执行文件可以在开发板运行.         工具链:链接:ht ...

  3. 制定交叉编译工具_配置交叉编译工具链-嵌入式Linux

    注意:使用我们提供的Ubuntu映象文件时,请按照我们的目录结构,手动设置交叉编译工具链以及编译的架构环境变量配置,(建议配置为永久生效),这里我们提供了两种交叉编译工具链,分别是buildroot构 ...

  4. CLion配置WSL工具链

    文章目录 前言 解决方案 验证 前言 在我们使用CLion时,如果本地装了Linux子系统(如Ubuntu),想用WSL工具链,但Credentials一直报错,这时可以用下面的解决方案. 如果你还没 ...

  5. 配置交叉编译工具链-嵌入式Linux

    在线课堂:https://www.100ask.net/index(课程观看) 论  坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taoba ...

  6. 个推Node.js 微服务实践:基于容器的一站式命令行工具链

    2019独角兽企业重金招聘Python工程师标准>>> 作者:个推Node.js 开发工程师 之诺 背景与摘要 由于工程数量的快速增长,个推在实践基于 Node.js 的微服务开发的 ...

  7. mac怎么查node版本_Node.js 微服务实践:基于容器的一站式命令行工具链

    作者:个推Node.js 开发工程师 之诺 背景与摘要 由于工程数量的快速增长,个推在实践基于 Node.js 的微服务开发的过程中,遇到了如下问题: 1. 每次新建项目都需要安装一次依赖,这些依赖之 ...

  8. Node.js 微服务实践:基于容器的一站式命令行工具链

    作者:个推Node.js 开发工程师 之诺 背景与摘要 由于工程数量的快速增长,个推在实践基于 Node.js 的微服务开发的过程中,遇到了如下问题: 每次新建项目都需要安装一次依赖,这些依赖之间基本 ...

  9. Node.js 微服务实践:基于容器的一站式命令行工具链...

    作者:个推Node.js 开发工程师 之诺 背景与摘要 由于工程数量的快速增长,个推在实践基于 Node.js 的微服务开发的过程中,遇到了如下问题: 每次新建项目都需要安装一次依赖,这些依赖之间基本 ...

  10. 【dMRI】desktop docker配置FSL工具链环境

    1.自动下载并启动 docker run --rm -it -v "D:/USC/LONI-student-worker/FSL_workshop":/usr/src/app di ...

最新文章

  1. 计算机兴趣小组活动实施方式,信息技术兴趣小组活动计划
  2. 【java实训课】工程项目文件(IDEA+MYSQL)
  3. python 接口测试 如何写配置文件_python接口自动化测试 - configparser配置文件解析器详细使用...
  4. java线程同步的实现_【Java多线程系列三】实现线程同步的方法
  5. WORD设置别人只可阅读,不可更改文档?
  6. 扩展中国剩余定理 exCRT 学习笔记
  7. json对象的封装与解析
  8. Linux常用基本命令总结
  9. Ubuntu server 20.4 配置静态ip
  10. 李飞飞宣布辞职后首次演讲!提出AI三原则;BAT大佬上海打假人工智能
  11. 小米、街电、携程等名企找人了,免费内推
  12. magicbookpro做php开发,荣耀MagicBook Pro测评:全面屏专业生产力工具
  13. Acquisition-CreateAcqFifo
  14. 计算机主机突然断电有什么影响吗,断电对电脑硬件会产生哪些影响
  15. 安装双系统时进行多重引导,最好先安装Windows再装Linux
  16. 前端设计稿转代码现状,会不会失业?
  17. 用gitbash提交代码步骤
  18. a的b次方对p取模 a乘b对p取模 快速幂
  19. Pandas-高级处理(七):透视表(pivot_table)【以指定列作为行索引对另一指定列的值进行分组聚合操作】、交叉表(crosstab)【统计频率】
  20. 小时候真傻,居然盼着长大

热门文章

  1. Linux下修改MTU值
  2. c语言FD_SET头文件,select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
  3. iOS 9 Spotlight搜索 OC版
  4. NLP 论文领读 | 缺少有标注的数据集怎么训练文本检索模型?来看看 LaPraDoR怎么做的吧
  5. 【加速 PyTorch 模型训练的 9 个技巧】
  6. java 为pdf添加水印图片
  7. 激励视频广告 Android,激励视频广告
  8. 我内心深处最温柔的痛楚,你是否还能感知?
  9. TMS570快速上手指南(0)--概述
  10. 原生JS实现FlappyBird游戏 超详细解析 快来做一个自己玩吧