S32K3系列单片机开发笔记(SIUL是什么/配置引脚复用的功能·)

news2024/10/6 4:03:52

前言

今天花时间看了一下,SIUL2模块的相关内容,并参照文档,以及例程作了一些小记录,知道该如何使用这个外设,包括引脚的配置,中断配置,以及常用函数的使用等,但对其中的一些细节还需要跟深入的学习和了解。

一、SIUL2是什么?

系统集成单元:System Integration Unit Lite2 (SIUL2) 提供外部设备引脚上的功能和电气特性的控制和可配置性。
在这里插入图片描述

通过其功能框图可以看出其实就是一个用来管理引脚功能的单元,包括中断配置,DMA,端口复用等。

在这里插入图片描述

上表中展示了S32K3XX系列的引脚功能

外部中断实现概述:
在这里插入图片描述

芯片上的REQ输入引脚是中断或DMA请求的源。芯片为SIUL2提供了四种可能的中断向量。32个中断请求源映射到向量和通道如下:

在这里插入图片描述

二、GPIO使用步骤

1.配置参数

将PTB18配置成GPIO模式且为输出管脚(LED)
在这里插入图片描述

引脚参数选用默认即可,需要注意引脚的初始状态!

2.常用API

**Siul2_Port API**
Siul2_Port_Ip_PortStatusType Siul2_Port_Ip_Init(uint32 pinCount,
				const Siul2_Port_Ip_PinSettingsConfig config[])
用S32DS配置工具生成的给定结构初始化引脚。

void Siul2_Port_Ip_SetPullSel(Siul2_Port_Ip_PortType * const base,
                              uint16 pin,
                              Siul2_Port_Ip_PortPullConfig pullConfig)
启用给定引脚的上拉/下拉设置。

**Siul2_Dio API**
void Siul2_Dio_Ip_WritePin(Siul2_Dio_Ip_GpioType * const   base, 
    						Siul2_Dio_Ip_PinsChannelType   pin,  
    						Siul2_Dio_Ip_PinsLevelType     value)
向指定的引脚写入高低电平。
void Siul2_Dio_Ip_TogglePins(Siul2_Dio_Ip_GpioType * const base,
							  Siul2_Dio_Ip_PinsChannelType pins )
翻转指定引脚电平。   

2.Demo

在这里插入图片描述

通过延时实现LED闪烁。

三、外部中断配置

1、引脚配置

将引脚配置为外部输入中断,可以看出其中断通道为 20
在这里插入图片描述

2、中断配置

关于中断配置有两种方式,其一是使用Siul2_Icu,另一种是使用通用的中断控制器IntCtrl_Ip_1,选择其中一种方式即可。
使用Siul2_Icu配置:
在这里插入图片描述

其中我们需要关心的就是,触发方式,工作模式,以及中断服务函数。
在这里插入图片描述

启用这个IRQ通道中断

在这里插入图片描述

注意的是通道号需要与对应起来,就可以了。

使用IntCtrl_Ip_1配置:

1、添加一个Interrupt Controller

在这里插入图片描述

使能对应的中断向量,与前面的分组表有关,中断引脚使用的是IRQ_20所以在此使能SIUL_2_IRQn。
在这里插入图片描述

然后需要给其分配中断服务函数入口标识。
在这里插入图片描述

后面的回调函的名字需要与对应外设的peripheral_Ip_Irq.c或者peripheral_Ip.c中的中断名字一致。比如GPIO的就要选择Siul2_Icu_Ip_Irq.c文件中的SIUL2_EXT_IRQ_16_23_ISR填入。

三、Demo

/* Initialize clock */
    Clock_Ip_InitClock(&Mcu_aClockConfigPB[0]);

    Siul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0);

    /* Install Siul2 ISR */
    IntCtrl_Ip_InstallHandler(SIUL_2_IRQn, &SIUL2_EXT_IRQ_16_23_ISR, NULL_PTR);
    IntCtrl_Ip_EnableIrq(SIUL_2_IRQn);

    /* Initialize the Icu driver */
    Siul2_Icu_Ip_Init(0,&Siul2_Icu_Ip_0_Config_PB_VS_0);
    UserCountIrqCH0 = 0U;
    BlinkCount = 0U;
    
    Siul2_Icu_Ip_EnableInterrupt(0,20);
    Siul2_Icu_Ip_EnableNotification(0,20);


/*中断服务函数*/
void User_EdgeDetect0(void)
{
    /* increment IRQ counter */
    UserCountIrqCH0++;
    if(UserCountIrqCH0 % 2 == 0)
    {
        Siul2_Dio_Ip_WritePin(Digital_Output_LED_BLUE_PORT, Digital_Output_LED_BLUE_PIN, 1);
    }
    else
    {
        Siul2_Dio_Ip_WritePin(Digital_Output_LED_BLUE_PORT, Digital_Output_LED_BLUE_PIN, 0);
    }
}

四、常用中断API

/*用于注册一个处理函数(pfNewHandler)。*/
void IntCtrl_Ip_InstallHandler( IRQn_Type eIrqNumber,
                               const IntCtrl_Ip_IrqHandlerType pfNewHandler,
                               IntCtrl_Ip_IrqHandlerType* const pfOldHandler

/* 使能相应的中断(eIrqNumber) */
void IntCtrl_Ip_EnableIrq(IRQn_Type  eIrqNumber);

/* Icu模块初始化 */
Siul2_Icu_Ip_StatusType Siul2_Icu_Ip_Init(uint8 instance, const Siul2_Icu_Ip_ConfigType* userConfig)

/*Icu模块中断使能*/
void Siul2_Icu_Ip_EnableInterrupt(uint8 instance, uint8 hwChannel)

/*Icu模块user callback function使能。User callback function is registered in function Siul2_Icu_Ip_Init()*/
void Siul2_Icu_Ip_EnableNotification(uint8 instance, uint8 hwChannel)

/* 设置通道的检测状态,上升沿、下降沿、双边沿 */
Void Siul2_Icu_Ip_SetActivationCondition(uint8 instance, uint8 hwChannel, Siul2_Icu_Ip_EdgeType edge)

部分内容来源于网络,侵权请联系删除!

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

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

相关文章

如何利用代码快速生成mapper.xml的<resultMap>

一,问题引入 当我们开发 mapper.xml ---->dao接层 ---->service接口---->serviceImp ---->controller层, 其中在mapper.xml编写查询语句的sql时会遇到sql查询到的结果 涉及到多张表的字段,或者单张表的字段过多时, 这…

Python文件处理

文章目录 1️⃣基本语法2️⃣读取文件⚜️读取整个文件read()⚜️with 关键词⚜️逐行读取 3️⃣写入文件⚜️写入文件write()⚜️写入数字⚜️追加内容到文件 4️⃣读取和写入二进制文件 简介 读完本篇你将学会文件的创建、读取、写入等。 1️⃣基本语法 在Python中使用文件的…

ThreadLocal机制解读和源码分析

目录 线程数据共享和安全 -ThreadLocal 什么是 ThreadLocal 代码演示 创建Dog.java 创建Pig.java T2DAO.java T2DAO T1解读set T1Service 解读 get ThreadLocalTest这个是换一种法 ThreadLocal 原理分析图 1. ThreadLocal 原理分析图(重点 set 和 get) 线程数据共…

Go Fuzzing:发现你未曾发现的漏洞

文章目录 Fuzzing(模糊测试)要求示例模拟crash 总结参考资料 Fuzzing(模糊测试) go fuzz文档 对于软件开发者而言,一项重要的任务就是确保程序的安全性。而其中一种风险就是软件中可能存在的漏洞。传统的测试方法往往需要耗费大量的时间和人力,而使用F…

【C++: 模块二 ---运算符、流程控制语句】

C: 模块二 ---运算符、流程控制语句 一、运算符:1.1算数运算符:1.2赋值运算符:1.3比较运算符:1.4逻辑运算符:1.5三目运算符: 二、程序流程结构2.1顺序结构:2.2选择结构:&…

ChatGPT免费第一版本

最近利用空余时间做了一个供大家免费体验的chatgpt国内可直接访问的版本 输入12345gpt.com可直接访问 贴上GPT给我回复的内容,😀 当今社会,交流已经成为人们日常不可或缺的一部分。然而,随着技术的发展,人们对于交流工…

【Linux 裸机篇(七)】I.MX6U 中断系统

目录 一、中断向量表1. 中断向量偏移 二、中断系统简介1. 创建中断向量表 三、GIC 控制器简介1. 中断 ID 四、GIC 逻辑分块1. Distributor(分发器端)2. CPU Interface(CPU 接口端) 五、CP15 协处理器六、中断使能1. IRQ 和 FIQ 总中断使能2. ID0~ID1019 中断使能和禁止 七、中断…

【PXE高效的批量网络装机】

目录 一、PXE的概述1.1、PXE批量部署的优点1.2、搭建PXE满足的以下的前提条件1.3、搭建PXE远程安装 二、搭建PXE远程安装服务器1、安装并启动 TFTP 服务2、安装并启用 DHCP 服务3、准备 Linux 内核、初始化镜像文件4、准备PXE 引导程序5、安装FTP服务,准备CentOS 7 …

SpringMVC使用域对象共享数据

1、SpringMVC中的域对象 此处只有request、session、servletContext被使用,而page是jsp页面的域,不使用jsp。 request:一次请求的范围内session:一次会话的范围内servletContext:整个web的应用范围内 2、向request域…

MySQL高级第十七篇:数据库主从复制原理及保证数据一致性

MySQL高级第十七篇:数据库主从复制原理及保证数据一致性 一、概述1. 提升数据库的并发能力2. 主从复制的作用? 二、主从复制原理三、搭建一主一从环境四、如何解决数据一致性问题?1. 方案一、异步复制2. 方案二、半同步复制3. 方案三、组复制…

3.黑马Springboot原理篇自己修改笔记

原理篇 1.自动配置的工作流程 1.1 bean的加载方式 方式一&#xff1a;配置文件<bean/>标签 缺点&#xff1a;配置bean太繁琐 方式二&#xff1a;配置文件扫描注解定义bean⭐️ 获取bean方式 ①通过配置文件&#xff0c;扫描指定包&#xff0c;加载bean ②通过注解声…

C++ STL之string容器的模拟实现

目录 一、经典的string类问题 1.出现的问题 2.浅拷贝 3.深拷贝 二、string类的模拟实现 1.传统版的string类 2.现代版的string类&#xff08;采用移动语义&#xff09; 3.相关习题* 习题一 习题二 4.写时拷贝 5.完整版string类的模拟实现[注意重定义] MyString.h…

磁珠的工作原理

磁珠是一个耗能元器件&#xff0c;他能把频率相对较高的信号以热量的形式耗散掉&#xff0c;保留频率相对较低的信号。 主要有这种插件的磁珠&#xff0c;还有这种贴片的磁珠。 下面我们来看下磁珠具体工作原理。 磁珠的构造我们可以简单的看成一个导线穿过环形铁氧体的磁性材…

[渗透教程]-015-网络与系统渗透

文章目录 1.0基本概念2.0 网络与系统渗透基本原理2.1 渗透测试2.2 入侵和预防2.3 案例一:从信息收集到入侵提权2.3.1 从域名到ip2.3.2 从IP获取旁站2.3.3 收集系统与⽹络配置详细信息2.3.4 踩点2.3.5发现漏洞2.3.6漏洞利用2.3.7维持系统控制权2.3.8清理访问痕迹2.4 案例二:Goo…

TryHackMe-Jeff(boot2root | Hard?)

Jeff 你能破解杰夫的网络服务器吗&#xff1f; 如果你发现自己在暴力破解SSH&#xff0c;你就做错了。 端口扫描 循例nmap 进80&#xff0c;是一个空页面&#xff0c;查看源代码 将jeff.thm加入hosts 上gobuster /admin是空页面&#xff0c;/backups也没东西&#xff0c;/up…

Centos安全加固策略

目录 密码安全策略 设置密码的有效期和最小长度 设置用户密码的复杂度 登录安全策略 设置用户远程登录的安全策略 安全的远程管理方式 访问控制 限制root用户登录 修改ssh 22端口 设置登录超时时间 限制IP访问 安全审计 审核策略开启 日志属性设置 查看系统登录…

基础巩固、探寻Java装箱和拆箱的奥妙!

前言 今天在逛某知名论坛的时候&#xff0c;看到一篇"请不要使用包装类型&#xff0c;避免造成性能损失"的文章。一下子就吸引了我的注意。大意就是&#xff0c;能用基本数据类型就尽量用基本数据类型&#xff0c;因为包装类型自动拆箱、装箱会带来性能损失尤其是循环…

函数式编程#3纯函数的概念

纯函数的概念 文章目录 纯函数的概念纯函数的两种形式&#xff1a;调用目标本身,不会改变函数内部,不受函数外部影响 函数的副作用如何理解"相同的输入得到相同的输出"不是纯函数的映射关系是纯函数的映射关系 纯函数的两种形式&#xff1a; 调用目标本身,不会改变 …

gcc编译 与交叉编译(x86 to arm) (一)单个文件编译

1.1、gcc编译单个c程序&#xff08;hello.c) gcc hello.c -o hello (hello是生成的可执行程序的名字&#xff09;1.2、交叉编译hello.c 源平台&#xff1a; UOS_X86_64 目标平台&#xff1a;UOS_arm 方法&#xff1a;使用现成的交叉编译工具链 参考资料&#xff1a;交叉编译…

【UE】water插件的简单使用

UE Editor版本&#xff1a;4.26 目录 一、岛屿外观修改 二、波浪参数设置 三、水体海洋的颜色设置 四、 水体河流 五、创建可浮在水体上的actor 一、岛屿外观修改 1. 保证“Landmass”和“Water”插件已启用 启用后&#xff0c;搜索water可以看到如下组件 2. 激活地形编…