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

目录

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.mzph.cn/news/589566.shtml

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

相关文章

PyQt5-控件之QDialog(UI-业务分离搭建自定义xDialog)

1.继承QtWidgets.QWidget自定义对话框 继承于QtWidgets.QWidget自定义一个对话框类&#xff1a;SelectingDlg class SelectingDlg(QtWidgets.QWidget): def __init__(self): super(SelectingDlg, self).__init__() self.initUI() def initUI(self):s…

数据结构和算法-B+树(性质 查找)

文章目录 B树叶子节点B树的查找第一种查找方式第二种查找方式 小结 B树 B树节点的关键个数1B树该节点的子树个数 B树节点的关键字个数和节点的子树个数一样 叶子节点包含全部关键字&#xff0c;并且都相互链接了 叶子节点 根节点也能是叶子节点 B树的查找 第一种查找方式…

HTTP分数排行榜

HTTP分数排行榜 介绍一、创建数据库二、创建PHP脚本三、上传下载分数四、测试 介绍 Unity中向服务器发送用户名和得分&#xff0c;并存入数据库&#xff0c;再讲数据库中的得分按照降序的方式下载到Unity中。 一、创建数据库 首先&#xff0c;我们要在MySQL数据库中建立一个…

Adobe ColdFusion 文件读取漏洞(CVE-2010-2861)

漏洞原理 Adobe ColdFusion是美国Adobe公司的一款动态Web服务器产品&#xff0c;其运行的CFML&#xff08;ColdFusion Markup Language&#xff09;是针对Web应用的一种程序设计语言。由于AJP协议设计存在缺陷导致内部相关的属性可控&#xff0c;攻击者可以构造属性值&#xff…

.NET Core中灵活使用反射

前言 前段时间有朋友问道一个这样的问题&#xff0c;.NET Core中如何通过Attribute的元数据信息来调用标记的对应方法。我第一时间想到的就是通过C#反射获取带有Custom Attribute标记的类&#xff0c;然后通过依赖注入&#xff08;DI&#xff09;的方式获取对应服务的方法并通…

中小微医院机构云服务(云HIS)平台源码

云HIS&#xff08;Cloud-Based Healthcare Information System&#xff09;重新定义了HIS&#xff0c;目标是为中小型医疗卫生机构提供优质经济的医疗卫生信息化产品及服务&#xff1b;是以健康档案为主线、以电子病历为核心、以云计算技术为基础的医疗卫生系统。云HIS作为基于…

王道考研计算机组成原理——存储系统

存储系统的基础知识 微信打开的时候会有一个人站在地球上&#xff0c;这个过程就是把程序从辅存转移到主存&#xff0c;数据只有调入主存当中才可以被CPU访问 cache&#xff1a;主存速度还是慢&#xff0c;为了进一步缓解CPU和主存之间的速度矛盾 在微信打视频聊天的时候&am…

Git 常用命令(从远程gitee/GitCode/GitHub下载项目到本地仓库)

​分布式项目控制管理gitGit 分布式版本控制系统(序章1)windows和linux操作Git(序章2) git在windows和ubuntu操作命令无异。本次举例平台&#xff1a;ubuntu18.04 查看是否安装和查看版本号 git --version # 仓库 # 在当前目录新建一个Git代码库$ git init​# 新建一个目录…

约翰瑟尔的故事

约翰瑟尔的故事 你即将看到的是“瑟尔效能机”创始者&#xff0c;约翰瑟尔的故事 据瑟尔原话&#xff0c;该装置会是通向自由能源的关键 “他”拥有“会飞”等不可思议的特性相关说法还有待证实&#xff0c;此记录篇仅为告知观者 制片方对瑟尔技术持中立态度 以下是我们所搜集…

【兔子王赠书第14期】《YOLO目标检测》涵盖众多目标检测框架,附赠源代码和全书彩图!

文章目录 写在前面YOLO目标检测推荐图书本书特色内容简介作者简介 推荐理由粉丝福利写在后面 写在前面 小伙伴们好久不见吖&#xff0c;本期博主给大家推荐一本关于YOLO目标检测的图书&#xff0c;该书侧重目标检测的基础知识&#xff0c;包含丰富的实践内容&#xff0c;是目标…

python编程从入门到实践(1)

文章目录 2.2.1命名的说明2.3字符串2.3.1使用方法修改字符串的大小写2.3.2 在字符串中使用变量2.3.3 制表符 和 换行符2.5.4删除空白2.5.5 删除前缀&#xff0b;后缀 2.2.1命名的说明 只能包含&#xff1a;字母&#xff0c;下划线&#xff0c;数字 必须&#xff1a;字母&#…

【LeetCode:34. 在排序数组中查找元素的第一个和最后一个位置 | 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Linux驱动学习—pinctl和gpio子系统

1、pinctl和gpio子系统&#xff08;一&#xff09; 1.1pinctrl 子系统主要工作内容 <1>获取设备树中 pin 信息&#xff0c;管理系统中所有的可以控制的 pin&#xff0c; 在系统初始化的时候&#xff0c; 枚举所有可以控制的 pin&#xff0c; 并标识这些 pin。 <2>…

【年度征文邀请,老题目新解法,描述我的一些编程心得】2023-12-30

缘由本论坛年度征文邀请 之前论坛给的一个笔耕不辍实体已经给后辈玩了&#xff0c;那波浪上的孙猴儿会随波逐流摇来晃去的&#xff0c;后辈挺喜欢的。 前几天回复了一个整数正序分解&#xff0c;虽说是老话题了&#xff0c;不过常有新想法&#xff0c;其实整数正序分解整合不…

计算机网络物理层 习题答案及解析

2-1 下列选项中&#xff0c;不属于物理层接口规范定义范畴的是&#xff08; D &#xff09;。 A. 引脚功能 B. 接口形状 C. 信号电平 D. 传输媒体 【答案】D 【解析】 2-2 某网络在物理层规定&#xff0c;信号的电平范围为- 15V~15V &#xff0c; 电线长…

js 对象

js 对象定义 <!DOCTYPE html> <html> <body><h1>JavaScript 对象创建</h1><p id"demo1"></p> <p>new</p> <p id"demo"></p><script> // 创建对象&#xff1a; var persona {fi…

CSS 丝带形状效果

CSS 丝带形状效果如图&#xff1a; 通过CSS创建折叠丝带形状 这里代码应该比较清晰易懂&#xff0c;clip-path 的值应该也容易理解。要注意的是&#xff0c;我们使用了 color-mix() 函数&#xff0c;这个属性允许创建主颜色的深色版本。现在如果我们将元素旋转相反的方向&#…

「Kafka」生产者篇

「Kafka」生产者篇 生产者发送消息流程 在消息发送的过程中&#xff0c;涉及到了 两个线程 ——main 线程和Sender 线程。 在 main 线程中创建了 一个 双端队列 RecordAccumulator。 main线程将消息发送给RecordAccumulator&#xff0c;Sender线程不断从 RecordAccumulator…

使用STM32 HAL库实现RS232串口通信的步骤和技巧

本文将介绍如何使用STM32 HAL库来实现RS232串口通信&#xff0c;包括步骤、API函数的调用方法和一些技巧。具体将讨论串口配置、发送和接收数据的方法&#xff0c;并提供相关示例代码。 引言&#xff1a; STM32 HAL库为嵌入式系统提供了简化和标准化的编程接口&#xff0c;方便…

什么是零日攻击?

1. 什么是零日漏洞 零日攻击是指利用零日漏洞对系统或软件应用发动的网络攻击。 零日漏洞也称零时差漏洞&#xff0c;通常是指还没有补丁的安全漏洞。由于零日漏洞的严重级别通常较高&#xff0c;所以零日攻击往往也具有很大的破坏性。目前&#xff0c;任何安全产品或解决方案…