I.MX6U设置I2C复用和电气特性函数IOMUXC_SetPinMux和IOMUXC_SetPinConfig解析

news2024/12/22 22:07:50

1.

在【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 第627页中有提到bsp_ap3216c.c中IO初始化,配置 I2C IO属性函数如下:
unsigned char ap3216c_init(void)
{
IOMUXC_SetPinMux(IOMUXC_UART4_TX_DATA_I2C1_SCL, 1);
IOMUXC_SetPinMux(IOMUXC_UART4_RX_DATA_I2C1_SDA, 1);
IOMUXC_SetPinConfig(IOMUXC_UART4_TX_DATA_I2C1_SCL, 0x70B0);
IOMUXC_SetPinConfig(IOMUXC_UART4_RX_DATA_I2C1_SDA, 0X70B0);
}

2.

要看懂这四句话,先到fsl_iomuxc.h文件中找到宏和函数的定义:

#define IOMUXC_UART4_TX_DATA_I2C1_SCL 0x020E00B4U, 0x2U, 0x020E05A4U, 0x1U, 0x020E0340U
#define IOMUXC_UART4_RX_DATA_I2C1_SDA 0x020E00B8U, 0x2U, 0x020E05A8U, 0x2U, 0x020E0344U

static inline void IOMUXC_SetPinMux(uint32_t muxRegister,
uint32_t muxMode,
uint32_t inputRegister,
uint32_t inputDaisy,
uint32_t configRegister,
uint32_t inputOnfield)
{
*((volatile uint32_t *)muxRegister) =
IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(muxMode) | IOMUXC_SW_MUX_CTL_PAD_SION(inputOnfield);

if (inputRegister)
{
    *((volatile uint32_t *)inputRegister) = IOMUXC_SELECT_INPUT_DAISY(inputDaisy);
}

}

static inline void IOMUXC_SetPinConfig(uint32_t muxRegister,
uint32_t muxMode,
uint32_t inputRegister,
uint32_t inputDaisy,
uint32_t configRegister,
uint32_t configValue)
{
if (configRegister)
{
*((volatile uint32_t *)configRegister) = configValue;
}
}

上面四句话展开为:
IOMUXC_SetPinMux(0x020E00B4U, 0x2U, 0x020E05A4U, 0x1U, 0x020E0340U,1)
IOMUXC_SetPinMux(0x020E00B8U, 0x2U, 0x020E05A8U, 0x2U, 0x020E0344U,1)
IOMUXC_SetPinConfig(0x020E00B4U, 0x2U, 0x020E05A4U, 0x1U, 0x020E0340U,0x70B0)
IOMUXC_SetPinConfig(0x020E00B8U, 0x2U, 0x020E05A8U, 0x2U, 0x020E0344U,0x70B0)

2.1

不难看出函数IOMUXC_SetPinMux(0x020E00B4U, 0x2U, 0x020E05A4U, 0x1U, 0x020E0340U,1)设置下面muxRegister寄存器,inputRegister寄存器
寄存器地址:0x020E00B4U
寄存器名称:SW_MUX_CTL_PAD_UART4_TX_DATA SW MUX Control Register
(IOMUXC_SW_MUX_CTL_PAD_UART4_TX_DATA)

IOMUXC_SetPinMux函数中设置语句为:
*((volatile uint32_t *)muxRegister) =
IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(muxMode) | IOMUXC_SW_MUX_CTL_PAD_SION(inputOnfield);

上面两个宏的定义在MCIMX6Y2.h中

#define IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(x) (((uint32_t)(((uint32_t)(x)) << IOMUXC_SW_MUX_CTL_PAD_MUX_MODE_SHIFT)) & IOMUXC_SW_MUX_CTL_PAD_MUX_MODE_MASK)

#define IOMUXC_SW_MUX_CTL_PAD_SION(x) (((uint32_t)(((uint32_t)(x)) << IOMUXC_SW_MUX_CTL_PAD_SION_SHIFT)) & IOMUXC_SW_MUX_CTL_PAD_SION_MASK)

最终设置 muxRegister value为0010 既手册中:
ALT2 — Select mux mode: ALT2 mux port: I2C1_SCL of instance: i2c1

在这里插入图片描述

2.2

寄存器地址:0x020E05A4U
寄存器名称:I2C1_SCL_SELECT_INPUT DAISY Register
(IOMUXC_I2C1_SCL_SELECT_INPUT)
IOMUXC_SetPinMux函数中设置语句为:
*((volatile uint32_t *)inputRegister) = IOMUXC_SELECT_INPUT_DAISY(inputDaisy);

上面IOMUXC_SELECT_INPUT_DAISY这个宏的定义也在MCIMX6Y2.h中
#define IOMUXC_SELECT_INPUT_DAISY(x) (((uint32_t)(((uint32_t)(x)) << IOMUXC_SELECT_INPUT_DAISY_SHIFT)) & IOMUXC_SELECT_INPUT_DAISY_MASK)

最终会设置 inputRegister value 为01,既UART4_TX_DATA 设置为ALT2:

在这里插入图片描述
UART4_TX_DATA 设置为ALT2,既复用为I2C1:
在这里插入图片描述

2.3

函数IOMUXC_SetPinConfig(0x020E00B4U, 0x2U, 0x020E05A4U, 0x1U, 0x020E0340U,0x70B0)设置configRegister寄存器
寄存器地址:0x020E0340U
寄存器名称:SW_PAD_CTL_PAD_UART4_TX_DATA SW PAD Control Register
(IOMUXC_SW_PAD_CTL_PAD_UART4_TX_DATA)

IOMUXC_SetPinConfig函数中设置语句为:
*((volatile uint32_t *)configRegister) = configValue;
set configRegister value with: 0x70B0
既设置了引脚的电气特性:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

另外两个函数同理推导。

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

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

相关文章

找工作时如何快速了解一家公司?看他们招聘就知道

每一位求职者&#xff0c;都希望自己能够对感兴趣或者符合自己期望条件的公司有一个全面而深入的了解。如何在找工作或者找实习的时候&#xff0c;快速地了解一家公司&#xff0c;那就看看他们的招聘吧&#xff01; 1、从招聘信息洞察公司格局 有些公司的招聘信息中&#xf…

java 网上点餐系统用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP 网上点餐系统是一套完善的web设计系统&#xff0c;对理解JSP java SERLVET mvc编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,eclipse开发&#xff0c;数据库为Mysql5.0&#…

2行代码将你的本地服务暴露在公网!

内网穿透 作为一个开发者&#xff0c;内网穿透的概念你一定听过。 内网穿透&#xff08;Intranet Penetration&#xff09;是指借助一定的技术手段&#xff0c;将处于私有网络&#xff08;内网&#xff09;中的主机或服务器暴露给外部网络&#xff08;公网&#xff09;用户&a…

【好玩的开源项目】Docker下部署HomeAssistant智能家居系统

【好玩的开源项目】Docker下部署HomeAssistant智能家居系统 一、HomeAssistant介绍1.1 HomeAssistant简介1.2 HomeAssistant特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、…

分享一下怎么做小程序营销活动

小程序营销活动已经成为现代营销的必备利器&#xff0c;它能够帮助企业提高品牌知名度、促进产品销售&#xff0c;以及加强与用户的互动。然而&#xff0c;要想成功地策划和执行一个小程序营销活动&#xff0c;需要精心设计和全面规划。本文将为您介绍小程序营销活动的策划和执…

谷歌浏览器中input输入框默认填充时的背景色设置

问题如下&#xff1a; 解决办法如下&#xff08;通过css3&#xff09;&#xff1a; input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active {-webkit-transition-delay: 111111s;-webkit-transition: color 11111s…

iOS报错命名空间“std”中的“unary_function”

刚刚将我的 Xcode 升级到 15.0&#xff0c;突然它开始在 RCT_Folly 中出现以下错误 No template named unary_function in namespace std; did you mean __unary_function?我尝试删除缓存数据和派生数据并清理构建。也尝试删除 pod 和 node_modules。但没有任何帮助。 于是我…

回文日期题解

【问题描述】 2020年春节期间&#xff0c;有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按“yyyymmdd”的格式写成一个8位数是20200202,恰好是一个回文数。我们称这样的日期是回文日期。 有人表示20200202是“千年一遇”的特殊日子。对此小明很不认同&am…

Unity之NetCode多人网络游戏联机对战教程(5)--ConnectionData与MemoryPack

文章目录 前言使用场景ConnectionData数据序列化处理MemoryPack安装MemoryPack日志输出后话学习链接 前言 ConnectionData 与 ConnectionApproval 是搭配使用的&#xff0c;在ConnectionApproval系列讲解中涉及的几个使用场景将会在这里讲解 使用场景 使用密码加入房间 玩家选…

极致分离卷积块 XSepConv 学习笔记 (附代码)

论文地址&#xff1a;https://arxiv.org/pdf/2002.12046.pdf 代码地址&#xff1a; 1.是什么&#xff1f; XSepConv是由清华大学提出的&#xff0c;它是一种新型的卷积神经网络模块&#xff0c;可以在保持计算量不变的情况下提高模型的性能。XSepConv的特点是将深度卷积和逐…

group by用法和SQL执行顺序详解

一、group by 1、作用 数据分组 -> 组内数据处理&#xff08;求组内的最大值、最小值、平均值等&#xff09; 2、案例&#xff1a; Order Details&#xff08;订单详情表&#xff09; 表结构&#xff1a;每个Order&#xff0c;都对应着好几个不同的Product&#xff0c;每…

尚硅谷大数据项目《在线教育之实时数仓》笔记005

视频地址&#xff1a;尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili 目录 第9章 数仓开发之DWD层 P031 P032 P033 P034 P035 P036 P037 P038 P039 P040 第9章 数仓开发之DWD层 P031 DWD层设计要点&#xff1a; &#xff08;1&#xff09;DWD层的设计依…

Azure 机器学习 - 使用 Visual Studio Code训练图像分类 TensorFlow 模型

了解如何使用 TensorFlow 和 Azure 机器学习 Visual Studio Code 扩展训练图像分类模型来识别手写数字。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员…

免费(daoban)gpt,同时去除广告

一. 内容简介 免费(daoban)gpt&#xff0c;同时去除广告&#xff0c;https://chat18.aichatos.xyz/&#xff0c;也可当gpt用&#xff0c;就是有点广告&#xff0c;大家也可以支持一下 二. 软件环境 2.1 Tampermonkey 三.主要流程 3.1 创建javascript脚本 点击添加新脚本 …

超详细!!!顺序表的实现

顺链表的实现 顺序表的概念及结构概念顺序表与数组的区别顺序表的结构 动态顺序表的实现头文件 "SeqList.h"定义结构体 SL 源文件顺列表的实现初始化顺列表 void SLInit(SL* ps)检查顺列表空间大小 void SLCheckCapacity(SL* ps)尾插数据 void SLPushBack(SL* ps,SLD…

java强转实验

不存在继承关系时&#xff0c;强转会出现编译时异常。即&#xff1a;无法将两个不同类型的对象做转换 当存在继承关系时&#xff0c;强转正常。备注&#xff1a;同名字段&#xff0c;类型一致&#xff0c;可以强转替代getset。同名字段&#xff0c;类型不一致&#xff0c;强转会…

网络安全之XSS漏洞

一. 引言 Cross-Site Scripting&#xff08;跨站脚本攻击&#xff09;简称XSS&#xff0c;是一种代码注入攻击。XSS 攻击通常指的是利用网页的漏洞&#xff0c;攻击者通过巧妙的方法注入 XSS 代码到网页&#xff0c;因为浏览器无法分辨哪些脚本是可信的&#xff0c;导致 XSS 脚…

matlab求解时变系统的Riccati矩阵微分方程

对于代数Riccati方程的求解网上能找到很多的资源&#xff0c;matlab也有成熟的函数&#xff0c;但是对于时变系统的Riccati矩阵微分方程&#xff0c;能找到的资料还比较少。 一、求解代数Riccati方程 可以在网上找到很多资料&#xff0c;如 https://blog.csdn.net/m0_622999…

python中有哪些你觉得超级牛的模块?

之前在做数据分析的时候&#xff0c;用过一个自动化生成数据探索报告的Python库&#xff1a;ydata_profiling 一般我们在做数据处理前会进行数据探索&#xff0c;包括看统计分布、可视化图表、数据质量情况等&#xff0c;这个过程会消耗很多时间&#xff0c;可能需要上百行代码…

Linux--线程--互斥锁

1.互斥量 a&#xff09;互斥量&#xff08;mutex&#xff09;从本质上来说是一把锁&#xff0c;一般在主线程中定义一个互斥量&#xff0c;就是定义一把锁。然后根据我们的需求来对线程操作这把锁。 b&#xff09;如果给所有的线程都加上锁了&#xff0c;线程们会去争取内存空…