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各个页面之间切换是否正常 ③ 发送网络请求时是…

【数据结构】_复杂度

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

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;请点击——…

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;无需公网…

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…

从 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模块,能够有效利用输入键之间的上下文信息,指导动态注意力矩阵的学习,从而…

pycharm集成通义灵码应用

在pycharm中安装通义灵码 1、打开files-settings 2、选中plugins-搜索”TONGYI Lingma“&#xff0c;点击安装 3.安装完成后在pycharm的右侧就有通义灵码的标签 4、登录账号 5、查看代码区域代码&#xff0c;每一个方法前面都多了通义灵码的标识&#xff0c;可以直接选择…

保姆级教程Docker部署Zookeeper官方镜像

目录 1、安装Docker及可视化工具 2、创建挂载目录 3、运行Zookeeper容器 4、Compose运行Zookeeper容器 5、查看Zookeeper运行状态 6、验证Zookeeper是否正常运行 1、安装Docker及可视化工具 Docker及可视化工具的安装可参考&#xff1a;Ubuntu上安装 Docker及可视化管理…

3.【BUUCTF】XSS-Lab1

进入题目页面如下 好好好&#xff0c;提示点击图片&#xff0c;点进去页面如下&#xff0c;且url中有传参&#xff0c;有注入点 发现题目给出了源码 查看得到本题的源码 分析一下代码 <!DOCTYPE html><!--STATUS OK--> <!-- 声明文档类型为 HTML5&#xff0c;告…

react关于手搓antd pro面包屑的经验(写的不好请见谅)

我们先上代码&#xff0c;代码里面都有注释&#xff0c;我是单独写了一个组件&#xff0c;方便使用&#xff0c;在其他页面引入就行了 还使用了官方的Breadcrumb组件 import React, { useEffect, useState } from react; import { Breadcrumb, Button } from antd; import { …

高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案

目录 一、Ollama 介绍 二、Ollama下载 2.1 官网下载 2.2 GitHub下载 三、模型库 四、Ollmal 使用 4.1 模型运行&#xff08;下载&#xff09; 4.2 模型提问 五、Ollama 常用命令 相关推荐 一、Ollama 介绍 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&…

Windows Docker笔记-Docker容器操作

在文章《Windows Docker笔记-Docker拉取镜像》中&#xff0c;已经拉取成功了ubuntu镜像&#xff0c;本章来讲解如何通过镜像来创建容器并运行容器。 这里再类比一下&#xff0c;加深理解&#xff0c;比如&#xff0c;我们现在想开一个玩具厂&#xff0c;我们的最终目的肯定是想…

Java语法糖详解

前言 在现代编程语言的发展历程中&#xff0c;语法糖&#xff08;Syntactic Sugar&#xff09;作为一种提升代码可读性和开发效率的重要特性&#xff0c;已经成为语言设计的重要组成部分。Java作为一门成熟且广泛应用的编程语言&#xff0c;在其长期演进过程中&#xff0c;语法…