NXP实战笔记(二):S32K3xx基于RTD-SDK在S32DS上配置PIT与STM中断并反转IO

news2024/11/29 18:26:01

目录

1、PIT

1.1、PIT概述

1.2、PIT的配置

1.3、Dio配置

1.4、中断配置

1.5、测试代码

1.6、测试结果

2、STM

2.1、STM概述

2.2、STM的配置

2.3、测试代码

2.4、测试结果


1、PIT

1.1、PIT概述

        PIT是一组定时器,可用于引发中断和触发器,包括一个专用的实时中断(RTI),它运行在一个单独的时钟上,可用于系统唤醒。

        S32K3XX有三个PIT实例

PIT的关键功能如下

1、定时产生触发脉冲的能力

2、可屏蔽中断

3、操作RTI的中断的能力,即使总线时钟被关闭

4、省电与单独的输入时钟为RTI定时器。所有其他计时器共享一个共同的核心时钟

5、每个计时器的独立超时时间

6、当计时器启用连锁模式时,它会在前一个计时器过期后计数。前一个定时器到期。如果定时器 n-1 倒计时到 0、计数器 n 的值就会递减 1。

7、第一个定时器(PIT0)不能链接到任何其他定时器

四个32位定时器通道,时钟源来自AIPS_SLOW_CLK

PIT_0中的一个RTI定时器(也只有RTI)在SIRC (32 KHz)上运行,并支持在STANDBY模式下运行

PIT是向下计数的,这点要非常注意。

计时器和模块由 "AIPS_SLOW_CLK "时钟控制

所有 PIT 实例都能生成周期性触发器,这些触发器可通过 TRGMUX 可通过 TRGMUX 路由至电机控制 IP,如eMIOS、LCU、BCTU、ADC。

包括 RTI 在内的所有 PIT 通道中断共享一个 IRQ 中断向量

1.2、PIT的配置

1、点击工程目录下的.mex文件

弹出界面如下

功能按钮介绍如下

2、新建一个Pit模块

选择驱动配置,此处裸机是必选的,否则报错

解释概念:OSIF_COUNTER_DUMMY  OSIF_COUNTER_SYSTEM  OSIF_COUNTER_CUSTOM区别。

OSIF_COUNTER_DUMMY:这是一个虚拟的计数器,不与任何硬件或软件时钟相关联,只用于测试或调试目的。它的值可以通过OSIF_SetCounter函数手动设置,或者通过OSIF_IncrementCounter函数自增1。

OSIF_COUNTER_SYSTEM:这是一个系统级的计数器,与MCU的内核时钟相关联,用于提供高精度的时间测量和延时功能。它的值可以通过OSIF_GetSysTimestamp函数获取,或者通过OSIF_TimeDelay函数设置延时1。

OSIF_COUNTER_CUSTOM:这是一个自定义的计数器,可以与任何硬件或软件时钟相关联,用于实现特定的应用需求。它的值可以通过OSIF_GetCounter函数获取,或者通过OSIF_SetCounter函数设置1。

3、选择硬件通道

PIT0_0与PIT0_1组合成一个64bit的计数器,这样子不容易超时。PIT0_2用于中断触发。时间基准。

PIT0_0配置如下

PIT0_1配置如下

注意此处多了一个ChainMode配置,用于与PIT0_0组合成64bit的链表

PIT0_2的配置

用于产生中断函数

Pit Hardware Module:用于选择PITx,也就是用哪个PIT

Pit  Channel 用于选择PIT的具体通道

ChainMode:是否形成链表的形式,注意此处只能Chain0才能与其他的组成链表。

Pit Channel Mode:是连续触发还是单次

1.3、Dio配置

点击引脚配置选项

选择功能,注入标签

注意配置Port,假设需要调用,例如翻转电平等,一定要添加DIO模块

1.4、中断配置

注意此处的1与2都为固定的,2句柄函数,在源码里面找,有的话必须填写一致,没有的话通过IntCtrl_Ip_InstallHandler 与IntCtrl_Ip_EnableIrq插入即可。

生成代码:点击更新源码即可

1.5、测试代码

1、初始化
#define INT_SYS_DisableIRQGlobal() __asm(" cpsid i")
#define INT_SYS_EnableIRQGlobal()  __asm(" cpsie i")
	INT_SYS_DisableIRQGlobal();
	Clock_Ip_Init(&Clock_Ip_aClockConfig[0]);	/* Initialize Clock */
	Pit_Ip_Init(0, &PIT_0_InitConfig_PB);
	Pit_Ip_InitChannel(0, PIT_0_CH_0);
	Pit_Ip_InitChannel(0, PIT_0_CH_1);
	Pit_Ip_InitChannel(0, PIT_0_CH_2);
	Pit_Ip_StartChannel(0, 2, 30000);
	Pit_Ip_EnableChannelInterrupt(0, 2);
	Pit_Ip_SetLifetimeTimer(0);
	IntCtrl_Ip_Init(&IntCtrlConfig_0);
	Siul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0);
    INT_SYS_EnableIRQGlobal();

注意一下30000的含义,首先看时钟,PIT的时钟为30MHz,1ms也就是运行了30000个Ticks。

执行代码
#define UNUSED(x)     (void)x
volatile uint32 PitRunning = 0;
uint64 PitRunPre  = 0;/*此处64bit为PIT0_0与PIT0_1的组合*/
uint64 PitRunLas  = 0;
uint64 PitRunLasx  = 0;
double PitRunTime = 0;
double PitRunTimex = 0;
void Pit0_Ch2_Callback(uint8 channel)
{

	PitRunPre = Pit_Ip_GetLifetimeTimer(0);
	PitRunTimex =  ((double)(PitRunLasx - PitRunPre))/30000.0;
	PitRunning++;
	if(PitRunning >=1000)
	{
		Siul2_Dio_Ip_TogglePins(LED_PORT,1<<LED_PIN);
		PitRunning = 0;
	}

	UNUSED(channel);
	PitRunLas = Pit_Ip_GetLifetimeTimer(0);
	PitRunTime = ((double)(PitRunPre - PitRunLas))/30000.0;
	PitRunLasx = PitRunPre;

}

1.6、测试结果

2、STM

2.1、STM概述

1、时钟源可在 CGM 中选择- AIPS_PLAT_CLK 或 FXOSC 或 FIRC

2、32bit可选择分频为1~256

3、一个32bit的比较寄存器

4、每个比较通道均有一个中断源

当启用时,计数器以模块频率除以8位预分频器值连续递增

STM有四个相同的比较通道。当通道被启用并且其比较值与计时器计数匹配时,STM设置通道中断标志并在该通道上生成IRQ。

2.2、STM的配置

1、如果应用中有两套时钟设置,则使用双时钟模式。预分频器和备用预分频器分别用于两种时钟模式。分别用于两种时钟模式。

2、启用该选项后,驱动程序代码 更新 STM 通道比较值 比较值。发生时更新 STM 通道比较值。

禁用该选项,则 STM 比较中断仅在计数器发生一次时发生。则 STM 比较中断在一个计数器周期内只发生一次。周期只发生一次。如果需要重复中断,则 中断回调函数必须相应地更新 比较值。

STM的时钟如下

此时48分频,也就是1MHz

2.3、测试代码

初始化
	IntCtrl_Ip_Init(&IntCtrlConfig_0);

	Stm_Ip_Init(0, &STM_0_InitConfig_PB);
	Stm_Ip_InitChannel(0, &STM_0_ChannelConfig_PB[0]);
	Stm_Ip_EnableChannel(0,0);
	Stm_Ip_StartTimer(0, 0);
	Stm_Ip_StartCounting(0,0,1000);
执行代码
void STM0_0_CallBack(uint8 channel)
{

	PitRunPre = Pit_Ip_GetLifetimeTimer(0);
	PitRunTimex =  ((double)(PitRunLasx - PitRunPre))/30000.0;
	PitRunning++;
	if(PitRunning >=1000)
	{
		Siul2_Dio_Ip_TogglePins(LED_PORT,1<<LED_PIN);
		PitRunning = 0;
	}

	UNUSED(channel);
	PitRunLas = Pit_Ip_GetLifetimeTimer(0);
	PitRunTime = ((double)(PitRunPre - PitRunLas))/30000.0;
	PitRunLasx = PitRunPre;

}

2.4、测试结果

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

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

相关文章

【AI】人类视觉感知特性与深度学习模型(2/2)

目录 二、人类视觉感知特性对深度学习模型的启发 2.1 视觉关注和掩盖与调节注意力模型的关系 1.视觉关注和掩盖 2. 注意力机制模型 2.2 对比敏感度与U形网络的联系 2.3 非局部约束与点积注意力的联系 续上节 【AI】人类视觉感知特性与深度学习模型&#xff08;1/2&#…

【如何选择Mysql服务器的CPU核数及内存大小】

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容&#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…

python练习2【题解///考点列出///错题改正】

一、单选题 【文件】 *1.【单选题】 ——文件&#xff1a;读取方法 下列哪个选项可以从文件中读取任意字节的内容&#xff1f;&#xff08;C &#xff09;A A.read() B.readline() C.readlines() D.以上全部 A\B\C三种方法都是可以读取文件中任意的字节内容的&#xff0…

emacs:Searching for program: No such file or directory,sml;

首先&#xff0c;编辑一个现有的或新的 SML 文件&#xff08;如果没有其他方便的方法&#xff0c;可尝试C-x C-f test.smlC-x C-f test.sml 创建一个新文件&#xff09;。你会看到 Emacs 窗口底部的模式显示从 "基本"&#xff08;或其他任何模式&#xff09;变成了 S…

【ArcGIS微课1000例】0084:甘肃积石山地震震中100km范围内历史灾害点分布图(2005-2020)

甘肃积石山地震震中100km范围内历史灾害点分布图(2005-2020)。 文章目录 一、成果预览二、实验数据三、符号化四、地图整饰一、成果预览 本实验最终效果图如下所示: 二、实验数据 以下数据可以从本专栏配套的实验数据包中0084.rar中获取。 1. 历史灾害数据。为2005-2020时…

【c++】使用vector存放键值对时,明明给vector的不同键赋了不同的值,但为什么前面键的值会被后面键的值给覆盖掉?

错误描述 运行程序得到结果如下图所示&#xff08;左边是原始数据&#xff0c;xxml文件中真实数据的样子&#xff0c;右图是程序运行得到的结果结果&#xff09;&#xff1a; 对比以上两图可以发现&#xff0c;右图中两个实例的三个属性值都来自左图中的第二个User实例&#x…

思维训练-怎样设计一个MQ

架构师需要做各种设计&#xff0c;要不断地提高自己的设计能力。这有没有方法可以训练呢&#xff1f;有的&#xff0c;就是看到什么、想到什么&#xff0c;就假设对面坐着产品经理&#xff0c;一起讨论怎么把它设计出来。比如怎样设计一个MQ 我&#xff1a;首先我确认一下需求。…

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项样题卷①

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项&#xff08;高职组&#xff09; 样题&#xff08;第1套&#xff09; 目录 2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项&#xff08;高职组&#xff09; 样题&#xff08;第1套&#xff09; 模块一…

系统学习Python——装饰器:函数装饰器-[装饰器状态保持方案:外层作用域和非局部变量]

分类目录&#xff1a;《系统学习Python》总目录 我们在某些情况下可能想要共享全局状态。如果我们真的想要每个函数都有自己的计数器&#xff0c;要么像前面的文章那样使用类&#xff0c;要么使用Python3.X中的闭包函数&#xff08;工厂函数&#xff09;和nonlocal语句。由于这…

【产品设计】表对象建模

随着不断深入的拆解&#xff0c;从产品经理的设计方法到系统的拆解&#xff0c;每一部分都有值得探索的地方。 随着不断深入的拆解&#xff0c;从产品经理的设计方法&#xff0c;到经典系统的拆解&#xff0c;到零代码平台的构建&#xff0c;一直在走系统建设方法路线。如今再看…

SpringBoot解决前后端分离跨域问题:状态码403拒绝访问

最近在写和同学一起做一个前后端分离的项目&#xff0c;今日开始对接口准备进行 登录注册 的时候发现前端在发起请求后&#xff0c;抓包发现后端返回了一个403的错误&#xff0c;解决了很久发现是【跨域问题】&#xff0c;第一次遇到&#xff0c;便作此记录✍ 异常描述 在后端…

【AIGC风格prompt】风格类绘画风格的提示词技巧

风格类绘画风格的提示词展示 主题&#xff1a;首先需要确定绘画的主题&#xff0c;例如动物、自然景观、人物等。 描述&#xff1a;根据主题提供详细的描述&#xff0c;包括颜色、情感、场景等。 绘画细节&#xff1a;描述绘画中的细节&#xff0c;例如表情、纹理、光影等。 场…

设计模式(4)--对象行为(11)--访问者

1. 意图 表示一个作用于某对象结构中的各元素的操作。 使你可以在不改变各元素的类的前提下定义于作用于这些元素的新操作。 2. 五种角色 抽象访问者(Visitor)、具体访问者(Concrete Visitor)、抽象元素(Element)、 具体元素(Concrete Element)、对象结构(ObjectStructure) 3…

回顾2023在CSDN的足迹与2024展望

目录 一、关于博主 二、2023的历程 1、博客分类 2、年度创作数据 3、解锁勋章 4、主要的方向 二、技术感悟 1、技术深入 2、还是实践 三、展望2024 今天是2024年的第一天&#xff0c;告别2023年&#xff0c;让我们以全新的姿态&#xff0c;去迎接新的一年的挑战。2023年…

影视后期:Pr 调色处理之风格调色

写在前面 整理一些影视后期相关学习笔记博文为 Pr 调色处理中风格调色&#xff0c;涉及下面几个Demo 好莱坞电影电影感调色复古港风调色赛博朋克风格调色日系小清晰调色 理解不足小伙伴帮忙指正 简单地说就是害怕向前迈进或者是不想真正地努力。不愿意为了改变自我而牺牲目前所…

Xgboost分类模型的完整示例

往期精彩推荐 数据科学知识库机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归PySpark大数据处理详细教程 定义问题 UCI的蘑菇数据集的主要目的是为了分类任务&#xff0c;特别是区分蘑菇是可食用还是有毒。这个数据集包含了蘑菇的各种特征&#xff0c;如…

WorkQueue模型

WorkQueues&#xff0c;也被称为任务队列模型。当消息处理比较耗时的时候&#xff0c;可能生产消息的速度会远远大于消息的消费速度。长此以往&#xff0c;消息就会堆积越来越多&#xff0c;无法及时的处理。此时就可以使用work模型&#xff1a;让多个消费者绑定到一个队列&…

IDEA错误: 找不到或无法加载主类 com.atguigu.springcloud.EurekaServer7001_App

第一种方法&#xff1a; 可以手动点击maven中的compile编译一下&#xff0c;如下图&#xff1a; 第二种方法&#xff1a; 在pom.xml文件中加入编译插件&#xff1a; <build><plugins><!-- 编译插件 --><plugin><artifactId>maven-compiler-plu…

matlab概率论例子

高斯概率模型&#xff1a; [f,xi] ksdensity(x): returns a probability density estimate, f, for the sample in the vector x. The estimate is based on a normal kernel function, and is evaluated at 100 equally spaced points, xi, that cover the range of the da…

如何在Linux系统中安装Redis

原本Redis官网提供了Windows和Linux两个版本&#xff0c;但从 2011-12-29 以后不再更新Windows版本&#xff08;https://github.com/dmajkic/redis/downloads&#xff09;&#xff0c;加之企业生产环境通常使用Linux系统&#xff0c;所以这里在Linux系统中演示如何安装Redis。 …