目录

  • 6、英飞凌-AURIX-TC3XX: PWM实验之使用 GTM -ATOM 实现
    • 1、ATOM 简介
    • 2、ATOM子模块的框架
    • 3、ATOM 通道的五种操作模式:
    • 4、ATOM通道结构
    • 5、ARU通信接口
    • 6、具体实验操作
      • 6.1、实验要求
      • 6.2、ATOM配置流程
        • 6.2.1、通过调用初始化函数initGtmAtomPwm()来完成 ATOM 初始化配置
        • 6.2.2、设置占空比
        • 6.2.3、PWM计算
      • 6.3、具体实现
        • 6.3.1、Cpu0_Main.c
        • 6.3.2、GTM_ATOM_PWM.c
        • 6.3.3、GTM_ATOM_PWM.h
        • 6.3.4、实验结果

6、英飞凌-AURIX-TC3XX: PWM实验之使用 GTM -ATOM 实现

博主创建了一个车规级处理器研发交流群,需要加群的小伙伴可以加我微信:_kevin0123456789
QQ:643470489,备注:车载研发,欢迎大家进群交流!

1、ATOM 简介

ATOM即与ARU单元相连接的定时器输出模块,是GTM模块中重要的输出子模块。因为ATOM可以通过ARU连接到其他模块,所以该输出模块可以生成复杂的输出信号而无须CPU干扰。应用:通过ARUATOM连接到GTMMCS、DPLL或PSM子模块。以产生具有复杂的PWM,在燃油喷射系统中应用广泛。每个ATOM子模块包含8个输出通道,它们可以在几种配置的操作模式下相互独立运行。

2、ATOM子模块的框架

框架图如下:

ATOMTOM模块相似,但也存在一些区别:

①、ATOM模块所需的工作时钟从CMU模块中生成的8个配置时钟CMU_CLK0-7中选择,如果使用到时间戳,则可以选择TBU模块中生成的3路TBU_TS0-2中的一个。

②、每个ATOM子模块包含8个输出通道,而TOM模块有多达16个输出的通道。

③、ATOM中的通道选择和控制用一个AGC单元控制,AGC控制器的功能和TOM通道的TGC控制器功能相似。

3、ATOM 通道的五种操作模式:

①、ATOM信号立即输出模式(SOMI):ATOM 通道根据通过ACBI 位字段接收到的ARU数据,在收到ARU数据后立即生成输出信号。由于ARU目的端的运行按照轮询方式进行,在这种模式下,考虑ARU往返时间的不确定性,输出信号可能会发生抖动。

②、ATOM信号比较输出模式(SOMC):ATOM 通道输出的信号代表ATOM操作寄存器中的时间戳,并可以将这些时间戳与TBU生成的时间戳进行比较。ATOM能够通过CPU 或 通过 ARU接收到新的时间戳,新的时间戳被直接加载到通道操作寄存器中。当通道操作寄存器的比较匹配发生时,影子寄存器可以在后台加载CPUARU传输的数据。

③、ATOM 信号输出PWM模式(SOMP):通过将其操作寄存器与子模块内部计数器进行比较,ATOM通道可以将像TOM子模块一样生成简单的PWM信号。不同的是:当ATOM通道运行操作寄存器时,影子寄存器可以在后台加载CPUARU传输的数据。

④、ATOM信号串行输出模式(SOMS):ATOM通道输出移位寄存器生成串行输出位流。移位的位数和移位方向是可配置的,移位频频由CMU_CLKx时钟信号之一确定。

⑤、ATOM信号缓冲输出模式比较(SOMB):ATOM通道输出信号代表位于ATOM操作寄存器中的时间戳。通过ARU接收到的新比较值首先存储在影子寄存器中,并且只有在发生先前的比较匹配事件时,才使用影子寄存器的内容来更新操作寄存器。

4、ATOM通道结构

ATOM通道与TOM通道的架构相似,区别:

①、ATOM模块中操作寄存器CN0、CM0、CM1和影子寄存器SR0、SR1等计数器都是24位,提高了计数器的精度;

②、ATOM通道主要由4个子单元构成,包括CCU0、CCU1、SOU和ACI

③、ARU通道接口单元负责ATOM模块与ARU之间的数据交换,通过影子寄存器SR0SR1以及ATOM[i]_CH[x]STAT寄存的ACBIACBO位字段实现。

5、ARU通信接口

ATOM信道具有一个ARU通信接口(ACI)子单元。该子单元负责从ARU之间和与ARU之间的数据交换。这是通过两个已实现的寄存器SR0、SR1以及ACBI和ACBO位字段来完成的,它们是ATOM[i]_CH[x]_STAT寄存器字段的一部分。

如果在ATOM[i]_CH[x]_CTRL寄存器内设置ARU_EN位,则通过在ATOM[i]_AGC_ENDIS_STAT寄存器内设置启用位来启用ATOM通道,并且CPU没有写入CM0、CM1、SR0、SR1寄存器的零,ATOM通道将在SOMP、SOMS、SOMC和SOMB模式下首先向ARU请求数据。

传入的ARU数据(53位宽信号ARU_CHx_IN)被ACI分成三部分,并通信到ATOM信道寄存器。在SOMI、SOMP、SOMS和SOMB模式中,传入的ARU数据ARU_CHx_IN的分割方式是,ARU数据的低24位(23至0)存储在SR0寄存器中,高24位(47至24)存储在SR1寄存器中。从52位到48位(CTRL_BITS)以SOMI、SOMP和SOMS模式存储在寄存器ATOM[i]_CH[x]_STATACBI位字段中,在内部ACB_SR寄存器中以SOMB模式存储。

6、具体实验操作

6.1、实验要求

通过GTM ATOM产生一个PWM信号。

6.2、ATOM配置流程

6.2.1、通过调用初始化函数initGtmAtomPwm()来完成 ATOM 初始化配置

其中包含以下步骤:

①、通过调用函数IfxGtm_enable()来启用GTM

②、使用IfxGtm_Cmu_SetClkFrequency()功能设置CMU时钟0频率为1 MHz。

③、通过调用函数IfxGtm_Cmu_enableClocks()来启用CMU时钟0。

函数IfxGtm_Atom_Pwm_initConfig()用其默认值初始化结构IfxGtm_Atom_Pwm_Config的一个实例。

IfxGtm_Atom_Pwm_Config结构允许设置以下参数来初始化模块:

atom-正在计数的atom的选择;

atomChannel-选择驱动GPIO的通道;

period-将PWM信号的周期设置为期望的值;

pin.outputPin-选择GPIO 口作为输出引脚;

synchronousUpdateEnable-启用同步更新的计时器。

6.2.2、设置占空比

占空比的设置是通过调用函数集duty()来完成的,其中包含以下步骤:

①、设置配置结构实例的对数循环参数,将PWM信号的占空比设置为所需值;

②、调用函数IfxGtm_Atom_Pwm_init()以使用新配置重新初始化和重新激活ATOM

6.2.3、PWM计算

6.3、具体实现

6.3.1、Cpu0_Main.c
#include "Ifx_Types.h"
#include "IfxCpu.h"
#include "IfxScuWdt.h"
#include "Bsp.h"
#include "GTM_ATOM_PWM.h"#define WAIT_TIME   10              /* Number of milliseconds to wait between each duty cycle change */IFX_ALIGN(4) IfxCpu_syncEvent g_cpuSyncEvent = 0;void core0_main(void)
{IfxCpu_enableInterrupts();/* !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!* Enable the watchdogs and service them periodically if it is required*/IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());/* Wait for CPU sync event */IfxCpu_emitEvent(&g_cpuSyncEvent);IfxCpu_waitEvent(&g_cpuSyncEvent, 1);/* Initialize a time variable */Ifx_TickTime ticksFor10ms = IfxStm_getTicksFromMilliseconds(BSP_DEFAULT_TIMER, WAIT_TIME);initGtmATomPwm();while(1){PWM_Duty();waitTime(ticksFor10ms);}
}
6.3.2、GTM_ATOM_PWM.c
/** GTM_ATOM_PWM.c**  Created on: 2022年12月16日*      Author: kevin*/
#include "GTM_ATOM_PWM.h"
#include "Ifx_Types.h"
#include "IfxGtm_Atom_Pwm.h"#define PWM                 IfxGtm_ATOM0_2N_TOUT5_P02_5_OUT
#define CLK_FREQ            1000000.0f
#define PWM_PERIOD          50000                                /* PWM period for the ATOM, in ticks                */IfxGtm_Atom_Pwm_Config g_atomConfig;                            /* Timer configuration structure                    */
IfxGtm_Atom_Pwm_Driver g_atomDriver;                            /* Timer Driver structure                           */
uint32 g_fadeValue = 25000;void setDutyCycle(uint32 dutyCycle);void initGtmATomPwm(void)
{// 1.初始哈GTMIfxGtm_enable(&MODULE_GTM);//2.设置CMU时钟频率IfxGtm_Cmu_setClkFrequency(&MODULE_GTM, IfxGtm_Cmu_Clk_0, CLK_FREQ);    /* Set the CMU clock 0 frequency        */IfxGtm_Cmu_enableClocks(&MODULE_GTM, IFXGTM_CMU_CLKEN_CLK0);            /* Enable the CMU clock 0               *///3.启动CMU时钟xIfxGtm_Atom_Pwm_initConfig(&g_atomConfig, &MODULE_GTM);g_atomConfig.atom = PWM.atom;                                       /* Select the ATOM depending on the LED     */g_atomConfig.atomChannel = PWM.channel;                             /* Select the channel depending on the LED  */g_atomConfig.period = PWM_PERIOD;                                   /* Set timer period                         */g_atomConfig.pin.outputPin = &PWM;                                  /* Set LED as output                        */g_atomConfig.synchronousUpdateEnabled = TRUE;                       /* Enable synchronous update                */IfxGtm_Atom_Pwm_init(&g_atomDriver, &g_atomConfig);                 /* Initialize the PWM         */IfxGtm_Atom_Pwm_start(&g_atomDriver, TRUE);                         /* Start the PWM              */}void PWM_Duty(void)
{/* Set the calculated duty cycle */setDutyCycle(g_fadeValue);
}/* This function sets the duty cycle of the PWM */
void setDutyCycle(uint32 dutyCycle)
{g_atomConfig.dutyCycle = dutyCycle;                 /* Set duty cycle                                           */IfxGtm_Atom_Pwm_init(&g_atomDriver, &g_atomConfig); /* Re-initialize the PWM                                    */
}
6.3.3、GTM_ATOM_PWM.h
/** GTM_ATOM_PWM.h**  Created on: 2022年12月16日*      Author: kevin*/#ifndef GTM_ATOM_PWM_H_
#define GTM_ATOM_PWM_H_void initGtmATomPwm(void);
void PWM_Duty(void);#endif /* GTM_ATOM_PWM_H_ */
6.3.4、实验结果

Welcome to follow my weixingongzhonghao "Kevin的学习站"

6、英飞凌-AURIX-TC3XX: PWM实验之使用 GTM -ATOM 实现相关推荐

  1. 5、英飞凌-AURIX-TC3X7: PWM实验之使用 GTM -TOM 实现

    目录 5.英飞凌-AURIX-TC3X7: PWM实验之使用 GTM -TOM 实现 1.GTM -TOM简介 2.TOM框图 3.TOM全局通道控制--TGC0, TGC1 4.实验简介 4.1.实 ...

  2. 英飞凌 AURIX TC3XX 系列单片机的链接文件

    前言 程序在完成编译后,每个".c"文件会生成".o"目标文件,此时代码无法通过目标文件运行,还需要通过链接文件为每个目标文件和系统标准库等链接起来,根据链接文 ...

  3. 英飞凌 AURIX TC3XX 系列单片机的 NVM-Flash 介绍

    前言 本文讲述的是英飞凌 AURIX TC3XX 系列多核单片机的 Flash,仅对 Flash 简单介绍,方便快速上手使用.下面基于 AURIX TC377 系列介绍. 其中包括 PFlash 和 ...

  4. 英飞凌 AURIX TC3XX 系列单片机的 SOTA 功能介绍

    1.前言 本文讲述的是英飞凌 AURIX TC3XX 系列多核单片机的 SOTA 功能介绍:SOTA 称为软件在线升级,即不依赖下载调试器的情况下,通过CAN.UART等方式实现应用程序的更新. 和O ...

  5. 英飞凌 AURIX TC3XX 系列单片机的 SOTA 功能实现

    1.前言 通过前一章了解到了 AURIX TC3XX 系列单片机的 SOTA 功能,下面讲述如何实现 SOTA 功能.以 TC37X 为例,附完整代码实现 在实现 SOTA 功能前,有必要简单了解一下 ...

  6. 英飞凌 AURIX TC3XX 系列单片机的 NVM-Flash 功能代码实现

    前言 上一篇介绍了 Flash 的一些基本知识,这一篇主要如何进一步封装 illD 库的Flash驱动代码,并进行使用.以 TC37X 为例子,附完整代码实现. 通过封装可以快速上手使用,同时在一定程 ...

  7. Aurix TC3xx系列MCU ADC模块简介(一)

    文章目录 1 前言 2 ADC模块简介(TC3xx) 1.1 ADC模块特点 1.2 转换器内部结构 1.3 转换时间 3 EDSADC模块简单介绍 >>返回总目录<< 1 前 ...

  8. 基于英飞凌AURIX的平衡单车组逐飞BLDC项目开源

    简 介: 本文转载了来自于SeekFree科技关于无刷直流电机电路设计开源方案,仅供大家学习使用.对于参加全国大学生智能车竞赛的同学请注意:室内单车组平衡轮驱动允许直接使用直流电机驱动,也允许使用无刷 ...

  9. 英飞凌AURIX HSM介绍

    英飞凌AURIX HSM介绍 参考手册:英飞凌培训ppt HSM Introduction 1. HSM介绍与架构概述 HSM: Hardware Security Module,硬件安全模块,如下图 ...

最新文章

  1. 好程序员web前端分享值得参考的css理论:OOCSS、SMACSS与BEM
  2. vue连线 插件_【Vue CLI】手把手教你撸插件
  3. poj3678详解(2-SAT)
  4. 数据结构与算法分析-第2章
  5. fail-fast(快速失败/报错机制)-ConcurrentModificationException
  6. 帮助创建未来的 .NET 客户端开发
  7. 身体对腐朽灵魂的一次震撼:向京的雕塑与观众的行为
  8. 递归Java_递归的Java实现
  9. “自带大屏”的便利店,你见过吗?
  10. 软件_crontab任务配置失败原因总结和技巧
  11. 【ER网络?BA网络?WS网络?NW网络?】复杂网络分析+数据集+代码实现
  12. 用Python实现从Oracle到GreenPlum的表结构转换
  13. iphone编程资源站
  14. c/c++中指针学习的两个绝好例子
  15. 【论文】解读AM-GCN: Adaptive Multi-channel Graph Convolutional
  16. 将jmeter响应结果中部分数据保存到本地文件
  17. 2.4.3 Mybatis 高级查询, 复杂映射, 返回主键, 动态SQL if, set, foreach, 核心配置文件深入,plugins标签, 多表查询, 嵌套查询
  18. 中国java第一人 北大_“大满贯”学霸,清华四大力学全部满分第一人!北大还没有...
  19. JAVA 网络编程中TCP和UDP
  20. tensorflow自定义GPU版本op节点

热门文章

  1. Python在cmd下pip快速下载安装包的国内安装镜像
  2. 远程往服务器上传送文件,服务器远程传送文件
  3. 阿里云认证证书合集(一起来考证)
  4. jQuery 学习-样式篇(五):jQuery 设置元素的 html 结构或 text 内容
  5. IP协议及MAC帧格式
  6. 是傻频日志呵阡啄凛仄
  7. 苹果为啥要在iOS 9中使用新字体?
  8. jmeter监听器之用表格察看结果(View Results in Table)
  9. ZOJ-1005-Jugs
  10. 网易云信直播聊天室:无上限人数系统不卡顿,是不是鱼与熊掌不能兼得?