6、英飞凌-AURIX-TC3XX: PWM实验之使用 GTM -ATOM 实现
目录
- 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
干扰。应用:通过ARU
将ATOM
连接到GTM
中MCS、DPLL或PSM
子模块。以产生具有复杂的PWM
,在燃油喷射系统中应用广泛。每个ATOM
子模块包含8个输出通道,它们可以在几种配置的操作模式下相互独立运行。
2、ATOM子模块的框架
框架图如下:
ATOM
与TOM
模块相似,但也存在一些区别:
①、
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
接收到新的时间戳,新的时间戳被直接加载到通道操作寄存器中。当通道操作寄存器的比较匹配发生时,影子寄存器可以在后台加载CPU
和ARU
传输的数据。
③、ATOM
信号输出PWM
模式(SOMP
):通过将其操作寄存器与子模块内部计数器进行比较,ATOM
通道可以将像TOM
子模块一样生成简单的PWM
信号。不同的是:当ATOM
通道运行操作寄存器时,影子寄存器可以在后台加载CPU
和ARU
传输的数据。
④、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
之间的数据交换,通过影子寄存器SR0
和SR1
以及ATOM[i]_CH[x]STAT
寄存的ACBI
和ACBO
位字段实现。
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]_STAT
的ACBI
位字段中,在内部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 实现相关推荐
- 5、英飞凌-AURIX-TC3X7: PWM实验之使用 GTM -TOM 实现
目录 5.英飞凌-AURIX-TC3X7: PWM实验之使用 GTM -TOM 实现 1.GTM -TOM简介 2.TOM框图 3.TOM全局通道控制--TGC0, TGC1 4.实验简介 4.1.实 ...
- 英飞凌 AURIX TC3XX 系列单片机的链接文件
前言 程序在完成编译后,每个".c"文件会生成".o"目标文件,此时代码无法通过目标文件运行,还需要通过链接文件为每个目标文件和系统标准库等链接起来,根据链接文 ...
- 英飞凌 AURIX TC3XX 系列单片机的 NVM-Flash 介绍
前言 本文讲述的是英飞凌 AURIX TC3XX 系列多核单片机的 Flash,仅对 Flash 简单介绍,方便快速上手使用.下面基于 AURIX TC377 系列介绍. 其中包括 PFlash 和 ...
- 英飞凌 AURIX TC3XX 系列单片机的 SOTA 功能介绍
1.前言 本文讲述的是英飞凌 AURIX TC3XX 系列多核单片机的 SOTA 功能介绍:SOTA 称为软件在线升级,即不依赖下载调试器的情况下,通过CAN.UART等方式实现应用程序的更新. 和O ...
- 英飞凌 AURIX TC3XX 系列单片机的 SOTA 功能实现
1.前言 通过前一章了解到了 AURIX TC3XX 系列单片机的 SOTA 功能,下面讲述如何实现 SOTA 功能.以 TC37X 为例,附完整代码实现 在实现 SOTA 功能前,有必要简单了解一下 ...
- 英飞凌 AURIX TC3XX 系列单片机的 NVM-Flash 功能代码实现
前言 上一篇介绍了 Flash 的一些基本知识,这一篇主要如何进一步封装 illD 库的Flash驱动代码,并进行使用.以 TC37X 为例子,附完整代码实现. 通过封装可以快速上手使用,同时在一定程 ...
- Aurix TC3xx系列MCU ADC模块简介(一)
文章目录 1 前言 2 ADC模块简介(TC3xx) 1.1 ADC模块特点 1.2 转换器内部结构 1.3 转换时间 3 EDSADC模块简单介绍 >>返回总目录<< 1 前 ...
- 基于英飞凌AURIX的平衡单车组逐飞BLDC项目开源
简 介: 本文转载了来自于SeekFree科技关于无刷直流电机电路设计开源方案,仅供大家学习使用.对于参加全国大学生智能车竞赛的同学请注意:室内单车组平衡轮驱动允许直接使用直流电机驱动,也允许使用无刷 ...
- 英飞凌AURIX HSM介绍
英飞凌AURIX HSM介绍 参考手册:英飞凌培训ppt HSM Introduction 1. HSM介绍与架构概述 HSM: Hardware Security Module,硬件安全模块,如下图 ...
最新文章
- 好程序员web前端分享值得参考的css理论:OOCSS、SMACSS与BEM
- vue连线 插件_【Vue CLI】手把手教你撸插件
- poj3678详解(2-SAT)
- 数据结构与算法分析-第2章
- fail-fast(快速失败/报错机制)-ConcurrentModificationException
- 帮助创建未来的 .NET 客户端开发
- 身体对腐朽灵魂的一次震撼:向京的雕塑与观众的行为
- 递归Java_递归的Java实现
- “自带大屏”的便利店,你见过吗?
- 软件_crontab任务配置失败原因总结和技巧
- 【ER网络?BA网络?WS网络?NW网络?】复杂网络分析+数据集+代码实现
- 用Python实现从Oracle到GreenPlum的表结构转换
- iphone编程资源站
- c/c++中指针学习的两个绝好例子
- 【论文】解读AM-GCN: Adaptive Multi-channel Graph Convolutional
- 将jmeter响应结果中部分数据保存到本地文件
- 2.4.3 Mybatis 高级查询, 复杂映射, 返回主键, 动态SQL if, set, foreach, 核心配置文件深入,plugins标签, 多表查询, 嵌套查询
- 中国java第一人 北大_“大满贯”学霸,清华四大力学全部满分第一人!北大还没有...
- JAVA 网络编程中TCP和UDP
- tensorflow自定义GPU版本op节点