AURIX TC275学习笔记4 官方GTM例程 GTM_TOM_PWM_1

文章目录

  • 概述
    • 其他例程
  • 代码分析
    • IfxGtm_enable()
    • IfxGtm_Cmu_enableClocks()
    • IfxGtm_Tom_Pwm_initConfig()
    • IfxGtm_Tom_Pwm_init()
    • IfxGtm_Tom_Pwm_start()
    • fadeLED()

概述

目的:呼吸灯,也即用GTM TOM模块输出PWM波控制LED的亮度明暗变化。
官方文档:GTM TOM PWM generation
网友博客:TOM模块的配置以及控制PWM的输出,以及TOM作为ADC模块的触发源,ADC采集到信号后通过DMA发送到寄存器

其他例程

当前适用于TC275 Lite的开发板有以下例程,后期慢慢研究。
在这里插入图片描述

代码分析

initGtmTomPwm();函数用来初始化GTM外设:

/* This function initializes the TOM */
void initGtmTomPwm(void)
{IfxGtm_enable(&MODULE_GTM);                                     /* Enable GTM                                   */IfxGtm_Cmu_enableClocks(&MODULE_GTM, IFXGTM_CMU_CLKEN_FXCLK);   /* Enable the FXU clock                         *//* Initialize the configuration structure with default parameters */IfxGtm_Tom_Pwm_initConfig(&g_tomConfig, &MODULE_GTM);g_tomConfig.tom = LED.tom;                                      /* Select the TOM depending on the LED          */g_tomConfig.tomChannel = LED.channel;                           /* Select the channel depending on the LED      */g_tomConfig.period = PWM_PERIOD;                                /* Set the timer period                         */g_tomConfig.pin.outputPin = &LED;                               /* Set the LED port pin as output               */g_tomConfig.synchronousUpdateEnabled = TRUE;                    /* Enable synchronous update                    */IfxGtm_Tom_Pwm_init(&g_tomDriver, &g_tomConfig);                /* Initialize the GTM TOM                       */IfxGtm_Tom_Pwm_start(&g_tomDriver, TRUE);                       /* Start the PWM                                */
}

IfxGtm_enable()

void IfxGtm_enable(Ifx_GTM *gtm)
{uint16 psw = IfxScuWdt_getCpuWatchdogPassword();IfxScuWdt_clearCpuEndinit(psw);gtm->CLC.B.DISR = 0;IfxScuWdt_setCpuEndinit(psw);
}

这个函数比较好理解,核心就是这句gtm->CLC.B.DISR = 0;,对应了手册中DISR寄存器,赋值为0就是使能。
在这里插入图片描述

IfxGtm_Cmu_enableClocks()

这个函数只有一行

void IfxGtm_Cmu_enableClocks(Ifx_GTM *gtm, uint32 clkMask)
{gtm->CMU.CLK_EN.U = clkMask;
}

其中clkMask的传入参数是#define IFXGTM_CMU_CLKEN_FXCLK (0x00800000),也就是第23位是1,即使能固定时钟FXCLK。
在这里插入图片描述
在这里插入图片描述

IfxGtm_Tom_Pwm_initConfig()

这个就是在配置句柄之前先把句柄初始化。

void IfxGtm_Tom_Pwm_initConfig(IfxGtm_Tom_Pwm_Config *config, Ifx_GTM *gtm)
{config->gtm                      = gtm;config->tom                      = IfxGtm_Tom_0;config->tomChannel               = IfxGtm_Tom_Ch_0;config->clock                    = IfxGtm_Tom_Ch_ClkSrc_cmuFxclk0;config->period                   = 20;config->dutyCycle                = 10;config->signalLevel              = Ifx_ActiveState_high;config->oneShotModeEnabled       = FALSE;config->synchronousUpdateEnabled = FALSE;config->immediateStartEnabled    = TRUE;config->interrupt.ccu0Enabled    = FALSE;config->interrupt.ccu1Enabled    = FALSE;config->interrupt.mode           = IfxGtm_IrqMode_pulseNotify;config->interrupt.isrProvider    = IfxSrc_Tos_cpu0;config->interrupt.isrPriority    = 0;config->pin.outputPin            = NULL_PTR;config->pin.outputMode           = IfxPort_OutputMode_pushPull;config->pin.padDriver            = IfxPort_PadDriver_cmosAutomotiveSpeed1;
}

IfxGtm_Tom_Pwm_init()

这个函数是将用户的配置写入寄存器。

IfxGtm_Tom_Pwm_start()

开启PWM输出。这个函数中又分成了3个子函数。

void IfxGtm_Tom_Pwm_start(IfxGtm_Tom_Pwm_Driver *driver, boolean immediate)
{/* Enable channel if not enabled already */IfxGtm_Tom_Tgc_enableChannel(driver->tgc[0], driver->tomChannel, TRUE, immediate);IfxGtm_Tom_Tgc_enableChannelOutput(driver->tgc[0], driver->tomChannel, TRUE, immediate);/* Trigger the start now */IfxGtm_Tom_Tgc_trigger(driver->tgc[0]);
}

其中IfxGtm_Tom_Tgc_trigger()函数是操作GLB_CTRL寄存器,这个寄存器的功能介绍在手册25.11.2 TOM Global Channel Control (TGC0, TGC1)。也可以参考文章:

  • 【学一点英飞凌】AutoSar-MCAL-Gtm-TOM模块

寄存器的描述在手册25.11.8.1 Register TOMi_TGC0_GLB_CTRL
在这里插入图片描述

fadeLED()

TOM已经配置完成,接下来周期性的调整占空比即可。

void fadeLED(void)
{if((g_fadeValue + FADE_STEP) >= PWM_PERIOD){g_fadeDir = -1;                                             /* Set the direction of the fade                */}else if((g_fadeValue - FADE_STEP) <= 0){g_fadeDir = 1;                                              /* Set the direction of the fade                */}g_fadeValue += g_fadeDir * FADE_STEP;                           /* Calculation of the new duty cycle            */setDutyCycle(g_fadeValue);                                      /* Set the duty cycle of the PWM                */
}

在这个setDutyCycle()函数中,代码实现居然是重新初始化TOM……
单独配置占空比的寄存器会不会更省资源一些……

void setDutyCycle(uint32 dutyCycle)
{g_tomConfig.dutyCycle = dutyCycle;                              /* Change the value of the duty cycle           */IfxGtm_Tom_Pwm_init(&g_tomDriver, &g_tomConfig);                /* Re-initialize the PWM                        */
}

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

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

相关文章

ASP.NET Core中间件的概念及基本使用

什么是中间件 中间件是ASP.NET Core的核心组件&#xff0c;MVC框架、响应缓存、身份验证、CORS、Swagger等都是内置中间件。 广义上来讲&#xff1a;Tomcat、WebLogic、Redis、IIS&#xff1b;狭义上来讲&#xff0c;ASP.NET Core中的中间件指ASP.NET Core中的一个组件。中间件…

app专项测试(网络测试流程)

一、网络测试的一般流程 step1&#xff1a;首先要考虑网络正常的情况 ① 各个模块的功能正常可用 ② 页面元素/数据显示正常 step2&#xff1a;其次要考虑无网络的情况 ① APP各个功能在无网络情况下是否可用 ② APP各个页面之间切换是否正常 ③ 发送网络请求时是…

Vue el-input密码输入框 按住显示密码,松开显示*;阻止浏览器密码回填,自写密码输入框;校验输入非汉字内容;文本框聚焦到内容末尾;

输入框功能集合 <template><div style"padding: 10px"><!-- 密码输入框 --><el-input:type"inputType"v-model"password"placeholder"请输入密码"auto-complete"new-password"id"pwd"style…

【数据结构】_复杂度

目录 1. 算法效率 2. 时间复杂度 2.1 时间复杂度概念 2.2 准确的时间复杂度函数式 2.3 大O渐进表示法 2.4 时间复杂度的常见量级 2.5 时间复杂度示例 3. 空间复杂度 3.1 空间复杂度概念 3.2 空间复杂度示例 1. 算法效率 一般情况下&#xff0c;衡量一个算法的好坏是…

Day48_20250130【回校继续打卡】_单调栈part1_739.每日温度|496.下一个更大元素I|503.下一个更大元素II

Day48_20250130_单调栈part1_739.每日温度|496.下一个更大元素I|503.下一个更大元素II 20250130补完 739.每日温度 题目 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0…

ASP.NET Core中间件Markdown转换器

目录 需求 文本编码检测 Markdown→HTML 注意 实现 需求 Markdown是一种文本格式&#xff1b;不被浏览器支持&#xff1b;编写一个在服务器端把Markdown转换为HTML的中间件。我们开发的中间件是构建在ASP.NET Core内置的StaticFiles中间件之上&#xff0c;并且在它之前运…

Text2Sql:开启自然语言与数据库交互新时代(3030)

一、Text2Sql 简介 在当今数字化时代&#xff0c;数据处理和分析的需求日益增长。对于众多非技术专业人员而言&#xff0c;数据库操作的复杂性常常成为他们获取所需信息的障碍。而 Text2Sql 技术的出现&#xff0c;为这一问题提供了有效的解决方案。 Text2Sql&#xff0c;即文…

将Deepseek接入pycharm 进行AI编程

目录 专栏导读1、进入Deepseek开放平台创建 API key 2、调用 API代码 3、成功4、补充说明多轮对话 总结 专栏导读 &#x1f338; 欢迎来到Python办公自动化专栏—Python处理办公问题&#xff0c;解放您的双手 &#x1f3f3;️‍&#x1f308; 博客主页&#xff1a;请点击——…

【人工智能】使用Python实现图像风格迁移:理论、算法与实践

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 图像风格迁移是一种利用深度学习技术将一张图像的内容与另一张图像的风格相结合的技术。本文将深入探讨图像风格迁移的基本理论和实现方法,…

ASP.NET Core筛选器Filter

目录 什么是Filter&#xff1f; Exception Filter 实现 注意 ActionFilter 注意 案例&#xff1a;自动启用事务的筛选器 事务的使用 TransactionScopeFilter的使用 什么是Filter&#xff1f; 切面编程机制&#xff0c;在ASP.NET Core特定的位置执行我们自定义的代码。…

缓存类为啥使用 unordered_map 而不是 map

性能考虑&#xff1a; std::unordered_map 是基于哈希表实现的&#xff0c;而 std::map 是基于红黑树实现的。对于查找操作&#xff0c;std::unordered_map 的平均查找时间复杂度是 O ( 1 ) O(1) O(1)&#xff0c;而 std::map 的查找时间复杂度是 O ( l o g n ) O(log n) O(l…

113,【5】 功防世界 web unseping

进入靶场 代码审计 <?php // 高亮显示当前 PHP 文件的源代码&#xff0c;方便开发者查看代码结构和内容 highlight_file(__FILE__);// 定义一个名为 ease 的类 class ease {// 私有属性 $method&#xff0c;用于存储要调用的方法名private $method;// 私有属性 $args&…

Android记事本App设计开发项目实战教程2025最新版Android Studio

平时上课录了个视频&#xff0c;从新建工程到打包Apk&#xff0c;从头做到尾&#xff0c;没有遗漏任何实现细节&#xff0c;欢迎学过Android基础的同学参加&#xff0c;如果你做过其他终端软件开发&#xff0c;也可以学习&#xff0c;快速上手Android基础开发。 Android记事本课…

绿联NAS安装cpolar内网穿透工具实现无公网IP远程访问教程

文章目录 前言1. 开启ssh服务2. ssh连接3. 安装cpolar内网穿透4. 配置绿联NAS公网地址 前言 本文主要介绍如何在绿联NAS中使用ssh远程连接后&#xff0c;使用一行代码快速安装cpolar内网穿透工具&#xff0c;轻松实现随时随地远程访问本地内网中的绿联NAS&#xff0c;无需公网…

关于React前端

React 是一个用于构建用户界面的开源JavaScript库&#xff0c;由Facebook开发并维护。它专注于构建单个页面的视图层&#xff0c;允许开发者使用声明式编程范式来创建交互式的、可复用的UI组件。React 以其高效、灵活和强大的生态系统而闻名&#xff0c;广泛应用于现代前端开发…

DNN(深度神经网络)近似 Lyapunov 函数

import torch import torch.nn as nn import torch.optim as optim import matplotlib.pyplot as plt # from torchviz import make_dot import torchviz# 1. Lyapunov 函数近似器&#xff08;MLP 结构&#xff09; class LyapunovNet(nn.Module):def __init__(self, input_dim…

GitHub 使用教程:从入门到进阶

1. GitHub账号注册 访问 GitHub 官网 (https://github.com)点击 “Sign up” 按钮填写用户名、邮箱和密码验证邮箱完成注册 2. 基础配置 2.1 安装Git 访问 Git 官网下载安装包运行安装程序&#xff0c;按提示完成安装打开终端&#xff0c;设置用户信息&#xff1a; git co…

从 HTTP/1.1 到 HTTP/3:如何影响网页加载速度与性能

一、前言 在最近使用Apipost时&#xff0c;突然注意到了http/1.1和http/2&#xff0c;如下图&#xff1a; 在我根深蒂固的记忆中&#xff0c;对于http的理解还停留在TCP协议、三次握手。由于我的好奇心&#xff0c;于是触发了我被动“开卷”&#xff0c;所以有了这篇文章&…

6 加密技术与认证技术

6 加密技术与认证技术 6.1:对称加密与非对称加密技术 6.1.1:对称加密 对称加密:; 特点: 1、加密强度不高&#xff0c;但效率高;2、密钥分发困难。 常见对称密钥&#xff08;共享秘钥&#xff09;加密算法:DES、3DES(三重DES)、RC-5、IDEA算法。 6.1.1.2非对称加密技术 非对称…

【Block总结】CoT,上下文Transformer注意力|即插即用

一. 论文信息 标题: Contextual Transformer Networks for Visual Recognition论文链接: arXivGitHub链接: https://github.com/JDAI-CV/CoTNet 二. 创新点 上下文Transformer模块(CoT): 提出了CoT模块,能够有效利用输入键之间的上下文信息,指导动态注意力矩阵的学习,从而…