当前位置: 首页 > news >正文

【奇葩瑞萨-004】RX系列单片机的GPIO初始化

RX系列单片机的GPIO初始化

  • 与IO口相关的寄存器
    • 端口(PORT)寄存器
    • 端口功能控制(MPC)寄存器
      • MPC.PmnFPS的设置过程
      • MPC寄存器设置注意事项
  • 端口Pmn的初始化
    • 不同端口模式下,PORT、MCP寄存器的配置顺序
  • 感想:与STM32 GPIO配置的对比

以RX66T单片机和RX130单片机为例。

与IO口相关的寄存器

端口的配置,就是写入端口配置相关寄存器的过程。
就瑞萨RX系列单片机而言,包括PORT寄存器和MPC寄存器。

端口(PORT)寄存器

  1. PDR:GPIO方向寄存器,读/写型
    1:输出
    0:输入(默认值)
    PORTm.PDR.BITn对应Pmn。

有些端口只内建了输入逻辑门电路,即便将其PDR位设置为1,也是无效的。
不存在的端口只可配置PDR(目的:省电),至于①哪些端口不存在、②PDR该配置成0还是1,就要参考目标单片机的数据手册“Initialization of the Port Direction Register (PDR)”章节。

  1. PODR:GPIO输出电平寄存器,读/写型
    1:输出H
    0:输出L(默认值)
    PORTm.PODR.BITn对应Pmn。
    有些端口只内建了输入逻辑门电路,即便将其PODR位设置为1,也不能输出。

  2. PIDR:端口输入电平寄存器,只读型
    1:输入了H
    0:输入了L
    PORTm.PIDR.BITn对应Pmn。
    不论Pmn的PDR位和PMR位如何设置,只要其MPC寄存器没有被配置为模拟模式(0x80),Pmn的瞬时输入电平就总能通过PIDR读出。

  3. PMR:端口模式寄存器,读/写型
    1:外设模式
    0:GPIO模式(默认值)
    PORTm.PMR.BITn对应Pmn。

  4. ODRy(y = 0, 1):端口开漏寄存器,读/写型
    1:CMOS输出
    0:NMOS开漏输出(默认值)
    PORTm.ODR0/1.BITx与Pmn的对应关系是

PORTm.ODR0BIT6BIT4BIT2BIT0
PmnPm3Pm2Pm1Pm0
PORTm.ODR1BIT6BIT4BIT2BIT0
PmnPm7Pm6Pm5Pm4
  1. PCR:端口输入上拉寄存器,读/写型
    1:有内部上拉
    0:无内部上拉(默认值)
    PORTm.PCR.BITn对应Pmn。
    如果端口设置为外部总线端口(WAIT端口除外)、通用输出口,外设输出口,那么PCR的设置是无效的。
    不存在端口不可配置PCR位,必须保留默认值0。

  2. 暂时不表:DSCR,DSCR2:端口驱动能力寄存器

端口功能控制(MPC)寄存器

  1. PWPR:MPC写保护寄存器,读/写型
    BIT7:PFSWE写保护位 0:可写入 1:不可写入
    BIT6:FPS写保护位 0:可写入 1:不可写入
    其它:保留位,必须保留默认值0。

  2. FPS:端口功能寄存器,读/写型
    BIT7:ASEL,模拟功能选择位
    BIT6:ISEL,EXTI功能选择位
    BIT5~0:PSEL,外设功能选择位
    MPC.PmnFPS对应Pmn。
    不同Pmn的上述BIT支持情况不同,应参考目标单片机的数据手册“Multi-Function Pin Controller (MPC)–Register Descriptions”章节。不支持的BIT位不可设定,必须保留默认值0。

  3. 暂时不表:PFCSE

  4. 暂时不表:PFCSS0

  5. 暂时不表:PFAOE0、PFAOE1

  6. 暂时不表:PFBCR0、PFBCR1、PFBCR2、PFBCR4

MPC.PmnFPS的设置过程

  1. 复位PMR位
  2. 设定外设端口的输入/输出方向
  3. 关闭FPS写保护
  4. 整体写入PmnFPS
  5. 打开FPS写保护
  6. 根据需要,置位PMR位

MPC寄存器设置注意事项

  1. 设置PmnFPS前,必须确保Pmn的PMR为0;否则,会有不可预料的信号在Pmn输入或输出。
  2. PmnFPS的设定值必须参照芯片手册。如果写入值超出手册的范围,则不能保证写入操作的正确性。
  3. 不能把同一个外设功能分配给多个引脚。比如一个UART只能有1个TX通道,不能有多个TX通道。
  4. 凡是模拟模式端口,要先设置为普通输入(先令PORTm.PMR.BITn=0,后令PORTm.PDR.BITn=0),再令PmnFPS的ASEL位为1(MPC.PmnFPS=0x80),以避免精度下降。
  5. PMR、PDR、PmnFPS的组合是有限的,如下:
状态PMRPDRFPS.ASELFPS.ISELFPS.PSEL注意
复位后0000000000b复位后端口是普通输入口
普通输入0000/1x
普通输出0100x
外设功能1x00/1外设功能
中断输入1001x
不可屏蔽中断xxxxx
模拟模式001xx
触摸100011001b可当作一种外设功能
EXTAL/XTAL00xxx

注:x表示不需要设定,推荐保留0。

端口Pmn的初始化

参考意法半导体STM8S单片机的标准库函数来设计,端口初始化函数提供3个参数
分别是目标端口编号,端口模式,端口MPC设置

void GPIO_Init(gpio_pin_t pin, gpio_mode_t mode, uint8_t mpc_config);
//pin: 想要设定的端口序号Pmn
//mode: 要设定的端口模式
//mpc_config:要设定的PmnFPS

注意:PmnFPS需要在MPC解锁时才可写入

不同端口模式下,PORT、MCP寄存器的配置顺序

  1. 设置为复位后的状态
寄存器PMRPODRPDRPCRPmnPFSPMR
设定值00000x00-
  1. 设置为浮空输入&无中断
寄存器PMRPODRPDRPCRPmnPFSPMR
设定值00000x00-
  1. 设置为上拉输入&无中断
寄存器PMRPODRPDRPCRPmnPFSPMR
设定值00010x00-
  1. 设置为普通输出H
寄存器PMRPODRPDRPCRPmnPFSPMR
设定值01100x00-
  1. 设置为普通输出L
寄存器PMRPODRPDRPCRPmnPFSPMR
设定值00100x00-
  1. 设置为外设功能
寄存器PMRPODRPDRPCRPmnPFSPMR
设定值0000查表1
  1. 设置为模拟模式
寄存器PMRPODRPDRPCRPmnPFSPMR
设定值00000x80-

※1:"-"表示跳过
※2:应按照表格中从左到右的顺序设置寄存器

感想:与STM32 GPIO配置的对比

  1. 比照STM32,RX的PMR设置,相当于32上设置AFIO。
  2. RX比STM32的端口设置多了MPC,即“IO挂靠在哪个外设上”的设置。
  3. 在RX上,当某端口作为UART-TX功能时,在发送空闲时,似乎要设置它为普通输出H,才能保证空闲时TX线路维持高电平(很离谱?)

相关文章:

【奇葩瑞萨-004】RX系列单片机的GPIO初始化

RX系列单片机的GPIO初始化 与IO口相关的寄存器端口(PORT)寄存器端口功能控制(MPC)寄存器MPC.PmnFPS的设置过程MPC寄存器设置注意事项 端口Pmn的初始化不同端口模式下,PORT、MCP寄存器的配置顺序 感想:与STM…...

【Git】Git切换地址

如何切换git代码地址? 1、查看当前远程 url git remote -v执行命令后,可以看见当前有2个URL。 远程 URL 在一般情况下有两个,分别是 fetch 和 push。 fetch URL 是用于从远程仓库获取最新版本的数据。当您运行 git fetch 命令时&#xf…...

elementUI点击当前行更改当前行状态(数据更新DOM不更新问题解决)

<template slot-scope"{row,$index}" slot"menu"><el-button v-if"row.editable" type"text" size"small" click"changeStatus(row,$index)">编辑</el-button><el-button v-else type"…...

python爬取阿里巴巴商品页面数据api

以下是使用Python爬取商品页面的示例代码&#xff1a; import requests from bs4 import BeautifulSoup# 定义要爬取的商品链接 url https://www.alibaba.com/product-detail/High-Quality-Custom-Logo-Printing-Black_60802527914.html# 发送请求 response requests.get(ur…...

angular-mat-select 多选 实现按选择顺序排序

mat-select 正常情况下,多选后,已选项是按列表顺序进行排序,如果我想实现按照点击项目的顺序进行排序,我该如何做呢? [参考网址](Angular order of selected option in multiple mat-select - Stack Overflow) sortComparator是Angular Material中mat-select组件的一个属…...

爬虫010_列表高级_添加_append_extend_修改_查询_in_not int_删除_del_pop_remove---python工作笔记029

然后再来看列表操作 首先添加append方法 然后插入,坐标是要插入的下标,右边是插入的内容 看结果 1,2,3,4,5,6 然后这个extend,是逐个插入,放到后边 然后是修改,直接对下标赋值 看结果</...

微服务服务拆分和远程调用

一、服务架构比较 单体架构&#xff1a;简单方便&#xff0c;高度耦合&#xff0c;扩展性差&#xff0c;适合小型项目。例如&#xff1a;学生管理系统 分布式架构&#xff1a;松耦合&#xff0c;扩展性好&#xff0c;但架构复杂&#xff0c;难度大。适合大型互联网项目&#x…...

MySQL8.1源码安装与部署

官方文档 https://downloads.mysql.com/archives/community/https://dev.mysql.com/doc/refman/8.1/en/binary-installation.html官方文档源码安装步骤 # Preconfiguration setup $> groupadd mysql $> useradd -r -g mysql -s /bin/false mysql # Beginning of source-b…...

algebraic reconstruction technique(ART)

数值线性代数的Kaczmarz方法被Gordon&#xff0c;Bender&#xff0c;Herman引入至CT重建中&#xff0c;称为ART方法。 A x b Axb Axb A A A为 m n m\times n mn的稀疏矩阵。 A A A的元素 a i j a_{ij} aij​表示像素 j j j对射线 i i i投影的贡献。 A A A的行向量 a i T a…...

oracle11g安装

oracle11g安装 安装环境 虚拟机版本&#xff1a;centos7.9 虚拟机ip&#xff1a;192.168.5.144 oracle版本&#xff1a;11g oracle安装包&#xff1a;p13390677_112040_Linux-x86-64_1of7.zip&#xff0c;p13390677_112040_Linux-x86-64_2of7.zip&#xff0c;p13390677_11204…...

网络防御(9)

.一、SSL工作过程是什么&#xff1f; SSL位于应用层和传输层之间&#xff0c;它能够为基于TCP等可靠连接的应用层协议提供安全性保证。SSL协议本身分为两层&#xff1a; 上层为SSL握手协议&#xff08;SSL handshake protocol&#xff09;、SSLpassword变化协议&#xff08;S…...

Spring核心与设计思想

文章目录 Spring是什么&#xff1f;认识Spring IoC容器传统的开发图书管理系统设计可能导致的问题 使用IoC容器 Spring是什么&#xff1f; Spring是一个用于构建企业级应用程序的开源框架&#xff0c;它为Java开发者提供了一种简化和加速应用程序开发的方式。Spring框架提供了…...

【stream的使用】使用stream.filter过滤List对象

Stream初相识 概括讲&#xff0c;可以将Stream流操作分为3种类型&#xff1a; 创建Stream Stream中间处理 终止Steam 每个Stream管道操作类型都包含若干API方法&#xff0c;先列举下各个API方法的功能介绍。 开始管道 主要负责新建一个Stream流&#xff0c;或者基于现有的数组…...

Flink多流处理之connect拼接流

Flink中的拼接流connect的使用其实非常简单,就是leftStream.connect(rightStream)的方式,但是有一点我们需要清楚,使用connect后并不是将两个流给串联起来了,而是将左流和右流建立一个联系,作为一个大的流,并且这个大的流可以使用相同的逻辑处理leftStream和rightStream,也可以…...

对任意类型数都可以排序的函数:qsort函数

之前我们学习过冒泡排序&#xff1a; int main() {int arr[] { 9,7,8,6,5,4,3,2,1,0 };int sz sizeof(arr)/sizeof(arr[0]);int i 0;for (i 0; i < sz-1; i) {int j 0;for (j 0; j < sz-1-i; j) {if (arr[j] > arr[j 1]){int temp 0;temp arr[j];arr[j] ar…...

vue数据更新table内容不更新解决方法

场景&#xff1a; table组件绑定的数据变化时&#xff0c;页面没有重新渲染&#xff0c;常见于子组件中使用table组件 原理&#xff1a; 创建实例时 数组在vue中没有被监听到&#xff0c;属于非响应式数据&#xff0c;数组的下标变化无法监听到 解决方式&#xff1a; <e…...

合宙Air724UG LuatOS-Air script lib API--record

record Table of Contents record record.start(seconds, cbFnc, type, quality, rcdType, format, streamRptLen) record.stop(cbFnc) record.getFilePath() record.getData(offset, len) record.getSize() record.delete() record.exists() record.isBusy() record 模块功能&…...

基于Vgg16和Vgg19深度学习网络的步态识别系统matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ................................................................ % 设置训练选项options …...

Java分布式微服务3——Docker

文章目录 Docker介绍安装DockerDocker基础操作Docker服务的启动镜像命令容器命令1. 从docker hub去查看Nginx容器的运行命令2. 查看所有容器状态3. 查看容器日志4. 进入Nginx容器执行命令&#xff0c;修改Html内容&#xff0c;添加“Hello World”5. 停止与开始容器6. 删除容器…...

js字符串替换

在JavaScript中&#xff0c;字符串替换 有多种方法&#xff0c;下面介绍其中一些比较常用的方法。 使用replace()方法、 replace()方法用于在字符串中查…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...