Autosar MCAL-GTM之TOM

news2024/9/24 7:19:19

文章目录

  • 前言
  • 定时器输出模块(TOM)
    • TOM产生PWM的原理
    • TOM中断
      • 中断使能
      • 中断模式
      • 中断映射
    • CFG中TOM通道配置
      • TOM Channel Enable
        • TomChDisableOnTgcTrigger
        • TOM Channel Enable
      • TOM Channel Output
        • TomChOutputDisableOnTgcTrig
        • TomChannelOutputControl
        • TomChannelOutputSignalLevel
        • TomChannelPortPinSelect
      • TOM Channel Timer parameters
        • PWM更新方式
        • PWM输出模式
        • Tom Ch DCyc Compare Shadow Val Sr1
        • Tom Ch Period Compare Shadow Val Sr0
        • TomChEnableForceUpdate
        • TomChResetCn0OnForceUpdate
        • TomChUpdateEnableOnCn0Reset
        • TomChannelBitReversalMode
        • TomChannelClockSelect(重要)
        • TomChannelCounterCn0Reset(重要)
        • TomChannelCounterValCn0
        • TomChannelDutyCycleCompareValCm1(重要)
        • TomChannelPeriodCompareValCm0
        • TomChannelGatedCounterMode
        • TomChannelOneShotMode
        • TomChannelSpeMode
        • TomChannelTriggerOutput(重要)
      • TOM Channel Usage
  • 总结

前言

在前面的文章中,我们介绍了GTM中的CMU模块,TIM模块,用来进行PWM波的周期与占空比测量。本文将介绍GTM中的另一个模块TOM,该模块是用来产生PWM波的,主要介绍芯片手册中的内容及Davinci CFG中的配置项。

定时器输出模块(TOM)

TOM产生PWM的原理


上图很好的描述了TOM产生PWM的原理,下面用文字进行解释:

CCU0主要用来对CN0计数,该计数的频率取决于CMU_FXCLK时钟,该时钟在CMU模块中配置,具体可以看我之前的CMU文章

寄存器TOMi_CHx_CTRL的配置位RST_CCU0,用来配置Reset CN0,有两种方式,一种为当计数器值等于比较值CM0时,另一种为由前一通道产生的trigger(通道0由通道15)。一般来说,CM0的值作为PWM的周期

当计数器寄存器CN0大于或等于寄存器CM0时,子单元CCU0触发SOU子单元和随后的TOM子模块信道(信号TRIG_CCU0)。

在子单元CCU1中,计数器寄存器CN0与寄存器CM1的值进行比较。如果CN0大于或等于CM1,则子单元CCU1触发SOU子单元(信号TRIG_CCU1)一般来说,CM1的值作为PWM的占空比

如果RST_CCU0配置为由CM0触发,则:

如果CM0=0或CM0=1,则占空比为0%,与CM1无关,CN0不计数

CM1=0的配置表示输出0%占空比

CM1>=CM0的配置表示100%占空比

如果RST_CCU0配置为由前一个通道trigger触发,则:

CM0定义边缘到SL的值,CM1定义边缘到-SL的值,这个不太明白,实际配置为前一个通道触发后还是会按CM0为周期,CM1为占空比来用

如果CM0=CM1,则输出为100%SL(CM0具有更高的优先级)

如果CM0=0,输出保持在其最后值(CN0停止计数)

TOMi_CHx_CTRLSL位用来确认输出的有效电平,SL=0时,CN0计数在CM1前输出低电平,之后翻转为高电平,到达CM0时再翻转为低电平,周期结束。SL=1时,CN0计数在CM1前输出高电平,之后翻转为低电平,到达CM0时再翻转为高电平,周期结束,如下图所示,通过CM0配置周期,CM1配置占空比:

TOM通道输出引脚TOM[i]_CH[x]_OUT上的输出电平被捕获在寄存器TOMi_CHx_STAT的位OL

一般配置为PWM输出的TOM通道,CN0的Reset方式选择CN0达到CM0时触发。

TOM中断

中断使能

TOM中断有两个地方可以产生,一个是CN0计数到达CM0时产生的中断,一般称为Period中断,一个是CN0计数到达CM1时产生的中断,一般称为Duty中断。在Davinci CFG中的配置如下:


对应的寄存器为TOMi_CHx_IRQ_ENCCU0TC_IRQ_EN与CCU1TC_I
RQ_EN位

中断模式

GTM的中断有四种模式:

Level interrupt mode:默认中断模式是电平中断模式。在这种模式下,每个发生的中断事件都被收集在寄存器IRQ_NOTIFY中,与寄存器IRQ_EN和EIRQ_EN的相应启用位无关

Pulse interrupt mode:在脉冲中断模式下,如果IRQ_EN被启用,则每个中断事件将在IRQ_bit信号上产生一个脉冲。

从图中可以看出,如果IRQ_EN或IRQ_EN,IRQ_NOTIFY寄存器中的中断位总是被清除

Pulse-notify interrupt mode:在脉冲通知中断模式下,所有中断事件都被捕获在寄存器IRQ_notify中。如果寄存器IRQ_EN启用中断,则每个中断事件也将在IRQ_bit信号上产生一个脉冲。如果中断在寄存器IRQ_EN中被启用并且寄存器IRQ_NOTIFY的相应位被置位,则信号IRQ_occurred将为高。

这种中断方式在TOM中经常会使用,用来触发对应的回调函数进行相关处理。

Single-pulse interrupt mode:在单脉冲中断模式中,中断事件总是在寄存器IRQ_NOTIFY中捕获,与IRQ_EN的状态无关。然而,只有公共中断集中启用的中断的第一个中断事件被转发到信号IRQ_line。同一中断集的其他中断事件不能在信号IRQ_line上产生脉冲,直到寄存器IRQ_NOTIFY中启用中断的相应位被清除事件清除。如果设置了IRQ_EN和IRQ_NOTIFY寄存器位,则IRQ_occurred信号线将为高电平


在Davinci CFG中的配置如下:


Tom Notification用来配置中断触发的回调函数

中断映射

TOM通道与TOM中断对应关系:

2个通道为一组,最后作为中断源:

该中断源最终与OS中对应的TOM中断对应。同时在Irq模块中也要配置开启对应的中断及配置优先级。

CFG中TOM通道配置

TOM Channel Enable

TomChDisableOnTgcTrigger


该配置表示TOM通道是否在Tgc Trigger触发时禁止计数。如果配置为真,则寄存器TOMi_TGC0_ENDIS_CTRL中的ENDIS_CTRLx位值为01B,Tgc Trigger有三种方式,如下图:

一种为对寄存器TOMi_TGC0/1_GLB_CTRL中的HOST_TRIG写1触发,这个在CFG软件中没有体现。

一种为寄存器TOMi_TGC0/1_INT_TRIG配置。CFG中配置如下图:


一种为TGC Timebase trigger,通过GTM中的TBU模块中的计时器TBU_TS0/1/2与寄存器TOMi_TGC0_ACT_TB中的ACT_TB位比较,大于后触发。CFG中配置如下图:


一个是选择Timebase,与寄存器TOMi_TGC0_ACT_TB中TBU_SEL位对应
一个是使能触发,这个应该是软件做的
一个设置比较值,与寄存器TOMi_TGC0_ACT_TB中的ACT_TB对应,该值的范围为0-0xffffff
这个触发功能很少用到。

TOM Channel Enable

配置通道使能的方式:
一种为AT_START,即在开始时就一直使能,通过寄存器TOMi_TGC0_ENDIS_STAT中的ENDIS_STAT0位配置为10B实现

一种为ON_GLOBAL_TRIGGER,即通过GLOBAL_TRIGGER触发使能,通过寄存器TOMi_TGC0_ENDIS_STAT中的ENDIS_STAT0位配置为00B或11B,且寄存器TOMi_TGC0_ENDIS_CTRL中的ENDIS_CTRLx位值为10B后,即可通过上述的三种trigger方式来使能通道。一般很少用,基本都是用AT_START

CFG中配置如下图:

TOM Channel Output

TomChOutputDisableOnTgcTrig

与上面的TomChDisableOnTgcTrigger类似,这里是禁止通道输出,对应的寄存器为TOMi_TGC0_OUTEN_CTRL中的OUTEN_CTRLx,需要设置为01B
CFG中配置如下图:

TomChannelOutputControl

配置何时使能通道的输出,对应寄存器为TOMi_TGC0_OUTEN_CTRL中的OUTEN_CTRL0及TOMi_TGC0_OUTEN_STAT中的OUTEN_STAT0

CFG中配置如下图:

一般使用时配置为ENABLE_OUTPUT_AT_START.

TomChannelOutputSignalLevel

该配置项为TOM输出的PWM初始电平,为Low时先输出低电平,为High时先输出高电平。对应寄存器为TOMi_CHx_CTRL中的SL位

CFG中配置如下图:

TomChannelPortPinSelect

选择TOM输出的对应PIN角,该配置项需要与硬件原理图对应,关于TOM通道和PIN角的对应,可以直接在手册中搜索对应的Pin角即可找到。

CFG中配置如下图:

TOM Channel Timer parameters

在讲配置参数之前,需要再引入一些概念。在TOM中,两个动作寄存器CM0和CM1可以用影子寄存器SR0和SR1的内容重新加载,此处我们引入占空比同步更新和异步更新。

PWM更新方式

同步更新:如下图所示,通过对SR1寄存器值更新,使得TOM输出在下一个周期才同步一起更新CM1

异步更新:如下图所示,通过直接对CM1寄存器值更新,使得TOM输出可能本次周期内输出就发生改变

PWM输出模式

**连续模式:**如下图所示,该模式下通道使能后,PWM会一直连续输出。


One-shot模式:如下图所示,PWM在write CN0后触发一次,每次对CN0写值才会触发PWM输出,且PWM延时时间由CM0减写入的CN0值决定。

CFG中的配置项:

Tom Ch DCyc Compare Shadow Val Sr1

该配置项为用于更新比较寄存器CM1的TOM通道x影子寄存器SR1,用来更新占空比

Tom Ch Period Compare Shadow Val Sr0

该配置项为用于更新比较寄存器CM0的TOM通道x影子寄存器SR0,用来更新周期

TomChEnableForceUpdate

该配置项是选择是否启用强制更新,该触发来自于TGC中的CTRL_TRIG,通过寄存器TOMi_TGC0_FUPD_CTRL中的FUPD_CTRL0选择是否启用该功能

CFG中的配置:

TomChResetCn0OnForceUpdate

和上面的类似,通过寄存器TOMi_TGC0_FUPD_CTRL中的RSTCN0_CH0选择是否在ForceUpdate触发后Reset CN0.

CFG中的配置:

TomChUpdateEnableOnCn0Reset

配置TOM通道从SR0、SR1和CLK_SRC_SR更新寄存器CM0、CM1和CLK-SRC,对应寄存器TOMi_TGC0_GLB_CTRL中的UPEN_CTRL0


CFG中的配置:

TomChannelBitReversalMode

启用信道的位反转模式。设置通道的BITREV位。这仅适用于通道15。基本没用过

CFG中的配置:

TomChannelClockSelect(重要)

选择Tom通道的时钟,该时钟作为CN0计数的频率,例如此处选择的Fixed Clock 0为100M,则当CM0设置为50000时,PWM频率为2Khz

TomChannelCounterCn0Reset(重要)

选择CN0 Reset的方式,一般作为PWM输出时选择CN0到达CM0时触发。一般在需要PWM错相位时,会用到由前一个通道的trigger触发。

TomChannelCounterValCn0

配置CN0的值,一般在PWM连续模式下不用设置

TomChannelDutyCycleCompareValCm1(重要)

配置占空比的值CM1,此处TOM中我们没有配置,后面通过PWM模块来设置

TomChannelPeriodCompareValCm0

配置周期CM0的值,此处TOM中我们没有配置,后面通过PWM模块来设置

TomChannelGatedCounterMode

启用通道的门控计数器模式。对应寄存器TOMi_CHx_CTRL中的GCM位。这仅适用于通道0至7,仅适用于连接到SPE模块的TOM实例。目前没有用过

TomChannelOneShotMode

选择PWM输出模式为One-shot模式,该模式在前面有介绍过了。对应寄存器中TOMi_CHx_CTRL中的OSM

TomChannelSpeMode

启用/禁用通道的传感器模式评估模式。这将设置通道的SPE位。这仅适用于通道0至7。对应寄存器TOMi_CHx_CTRL中的SPEM位。目前没有用过

TomChannelTriggerOutput(重要)

配置TOM通道的trigger触发选择,有两种选择:

TRIG_FROM_PREVIOUS_CHANNEL:trigger来源于上个一个通道的trigger

CCU0_TRIG_OF_CHANNEL:CN0到达CM0时产生的trigger
对于连续的TOM通道,使用TRIG_FROM_PREVIOUS_CHANNEL,以达到PWM错相的功能。(需要引入一个Timer的TOM通道,用来作为Trigger)

TOM Channel Usage

USED_BY_OTHER_DRIVERS_OR_UNUSED: 指定此通道未使用或由其他模块(GPT/PWM)配置。使用CFG中的PWM模块以实现后面的PWM功能

USED_BY_GTM_DRIVER:指定将此通道配置为复杂驱动程序。在使用TOM中断及回调函数时,需要配置为USED_BY_GTM_DRIVER

总结

以上,TOM的配置就介绍完了。如果需要使用中断,还需要配置Irq模块及OS中添加对应的中断及中断源。TOM往上的模块为PWM,实际使用时调用的PWM模块中的函数来设置占空比。后面会继续介绍PWM模块的配置及使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【项目_05】tabcontrol的搭建及回显、使用keep-alive缓存页面、移动端适配 | 基于Vue3全家桶

💭💭 ✨:tabcontrol的搭建及回显、使用keep-alive缓存页面   💟:东非不开森的主页   💜: 总不能还没努力就向生活妥协吧💜💜   🌸: 如有错误或不足之处,希…

【双向ConvLSTM Network:遥感融合】

D2TNet: A ConvLSTM Network With Dual-Direction Transfer for Pan-Sharpening (D2TNet: 双向传输的卷积长短期记忆递归神经网络用于泛锐化) 本文提出了一种高效的具有双向传输的卷积长短期记忆递归神经网络(convolutional long short-ter…

Java Agent 探针技术

Java 中的 Agent 技术可以让我们无侵入性的去进行代理,最常用于程序调试、热部署、性能诊断分析等场景,现如今比较火热的分布式链路追踪项目Skywalking,就是通过探针技术去捕获日志,将数据上报OAP观察分析平台。 Java Agent 技术简…

Socket编程实现TCP、UDP样例

文章目录一.Socket简介二.Socket实现TCPTCP通信简介使用对象及方法简介代码实现服务端代码客户端代码三.Socket实现UDPUDP通信简介UDP程序的使用步骤代码实现服务端代码客户端代码一.Socket简介 socket套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元.…

私企招聘:思特威社会招聘

关于我们 思特威(上海)电子科技股份有限公司 SmartSens Technology (股票简称:思特威,股票代码:688213)是一家从事CMOS图像传感器芯片产品研发、设计和销售的高新技术企业,总部设立…

pads logic 生成参考编号带分隔符以及不统计不贴元器件的BOM

1.查看BOM报告 ,这里可以通过下面的方法 Step1:点击文件 Step2: 勾选材料清单,然后点击设置 Step3:在弹出的如下窗口,选择剪切板视图 ,然后选择全选,然后复制,将数据粘贴到excel表格中即可。 2. 参考编号分隔符 …

以前不知道字节面试难在哪,现在体验到了,被虐的很惨

…(这里省略一些不清楚、不知道、忘记了之类的词藻,保留一丝尊严。) 接下来是关于redis哲学三连“是什么?为什么?怎么用?” 我把肚子里仅有的关于Redis的一滴墨水挤成了三滴,仍然没有给出他想要的。继续追问Redis的数据存储方式,操作方法…

微服务框架 SpringCloud微服务架构 微服务保护 30 初识Sentinel 30.1 雪崩问题及解决方案

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务保护 文章目录微服务框架微服务保护30 初识Sentinel30.1 雪崩问题及解决方案30.1.1 雪崩问题30.1.2 总结30 初识Sentinel 30.1 雪崩问…

类别不平衡Class-imbalance解决方法

类别不平衡是指分类任务中不同类别的训练样例数目差别很大的情况。 1、扩大数据集 2、欠采样 欠采样(under-sampling):对大类的数据样本进行采样来减少该类数据样本的个数,使其与其他类数目接近,然后再进行学习。 随…

第十四届蓝桥杯集训——JavaC组第九篇——位运算符

第十四届蓝桥杯集训——JavaC组第九篇——位运算符 目录 第十四届蓝桥杯集训——JavaC组第九篇——位运算符 值交换 异或值交换 其它位移符号&#xff1a; 这个稍微难度大一些&#xff0c;基础的有【&与、|或、^异或、<<左位移、>>右位移】。 我们一个一个…

游戏开发43课 移动游戏性能优化2

2. 资源优化 病从口入&#xff0c;资源好比是入口&#xff0c;它们若出现问题&#xff0c;会引发一连串性能问题。相反&#xff0c;资源若是优化得好&#xff0c;后面所有章节的性能都可受益。这也是把资源优化的章节提到最前的原因。 2.1 纹理优化 纹理优化的目的是让它们占…

多锦鑫能:低碳化、智能化、无人化矿山运营时代来临

全球气候变暖已经成为人类社会必须面对的重大课题&#xff0c;国际社会在推动节能减排、实现碳中和大目标上也已经达成一致意见。中国作为全球第二大经济体和负责任的大国&#xff0c;也明确向国际社会承诺&#xff0c;将在2030年实现碳达峰、2060年前实现碳中和目标。 围绕这…

[附源码]计算机毕业设计基于Vuejs的中国名茶销售平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

作者推荐 | 【分布式技术专题】「架构设计方案」图解学习法总结集群模式下的各种软负载均衡策略实现及原理分析

背景介绍 在分布式系统中&#xff0c;负载均衡是非常重要的环节&#xff0c;通过负载均衡将请求派发到网络中的一个或多个节点上进行处理。 通常来说&#xff0c;负载均衡分为硬件负载均衡及软件负载均衡。硬件负载均衡&#xff0c;顾名思义&#xff0c;在服务器节点之间安装专…

功能安全软件架构

已剪辑自: https://mp.weixin.qq.com/s/pCenGTqg2Xi_t7b8ebNHMA 1. E-GAS 安全架构思想 汽车功能安全旨在把电子电气系统失效而导致的人身危害风险控制在合理范围内。下图是常见的电子电气系统硬件构成图&#xff0c;一个电子电气系统的构成要素&#xff0c;除了图中可见的硬…

均值坐标参数化(MVC Parameterization)

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 均值坐标定义 均值坐标定义 v0是多边形v1v2v3...vn内的一点v_0是多边形v_1v_2v_3...v_n内的一点v0​是多边形v1​v2​v3​...vn​内的一点 就会存在均值坐标ϕi(v0)ω…

腾讯云服务器CVM快速配置购买教程,新手上云必备!

腾讯云服务器快速配置购买教程是新手必备的上云教程。主机教程网在本文中以腾讯云服务器为例&#xff0c;给大家带来一个完整的、手把手教学的服务器购买流程。助力快速完成服务器的购买、配置、以及网站的搭建&#xff0c;给新手节省宝贵的时间&#xff0c;避免采坑&#xff0…

线程相关学习记录(1)

认识线程 什么是线程 进程&#xff1a; 正常电脑中启动的某个程序应用&#xff0c;并且会获得计算机分配的资源&#xff08;cpu&#xff0c;内存&#xff0c;硬件设备&#xff09; 线程&#xff1a; 进程中为了完成某个功能&#xff0c;内部划分出的不同的资源分配单位。通常…

[附源码]Python计算机毕业设计SSM基于框架的旅游管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

MyBatis详细学习笔记

一、MyBatis简介 MyBatis是ORM框架&#xff0c;即对象关系映射框架。 二、搭建MyBatis 不同的MySQL版本使用的JDBC不同 com.mysql.jdbc.Driver // MySQL 5 com.mysql.cj.jdbc.Driver // MySQL 8不同版本的MySQL的url也不同 jdbc:mysql://localhost:3306/ssm // MySQL 5 jd…