【奇葩瑞萨-004】RX系列单片机的GPIO初始化
RX系列单片机的GPIO初始化
- 与IO口相关的寄存器
- 端口(PORT)寄存器
- 端口功能控制(MPC)寄存器
- MPC.PmnFPS的设置过程
- MPC寄存器设置注意事项
- 端口Pmn的初始化
- 不同端口模式下,PORT、MCP寄存器的配置顺序
- 感想:与STM32 GPIO配置的对比
以RX66T单片机和RX130单片机为例。
与IO口相关的寄存器
端口的配置,就是写入端口配置相关寄存器的过程。
就瑞萨RX系列单片机而言,包括PORT寄存器和MPC寄存器。
端口(PORT)寄存器
- PDR:GPIO方向寄存器,读/写型
1:输出
0:输入(默认值)
PORTm.PDR.BITn对应Pmn。
有些端口只内建了输入逻辑门电路,即便将其PDR位设置为1,也是无效的。
不存在的端口只可配置PDR(目的:省电),至于①哪些端口不存在、②PDR该配置成0还是1,就要参考目标单片机的数据手册“Initialization of the Port Direction Register (PDR)”章节。
-
PODR:GPIO输出电平寄存器,读/写型
1:输出H
0:输出L(默认值)
PORTm.PODR.BITn对应Pmn。
有些端口只内建了输入逻辑门电路,即便将其PODR位设置为1,也不能输出。 -
PIDR:端口输入电平寄存器,只读型
1:输入了H
0:输入了L
PORTm.PIDR.BITn对应Pmn。
不论Pmn的PDR位和PMR位如何设置,只要其MPC寄存器没有被配置为模拟模式(0x80),Pmn的瞬时输入电平就总能通过PIDR读出。 -
PMR:端口模式寄存器,读/写型
1:外设模式
0:GPIO模式(默认值)
PORTm.PMR.BITn对应Pmn。 -
ODRy(y = 0, 1):端口开漏寄存器,读/写型
1:CMOS输出
0:NMOS开漏输出(默认值)
PORTm.ODR0/1.BITx与Pmn的对应关系是
PORTm.ODR0 | BIT6 | BIT4 | BIT2 | BIT0 |
---|---|---|---|---|
Pmn | Pm3 | Pm2 | Pm1 | Pm0 |
PORTm.ODR1 | BIT6 | BIT4 | BIT2 | BIT0 |
Pmn | Pm7 | Pm6 | Pm5 | Pm4 |
-
PCR:端口输入上拉寄存器,读/写型
1:有内部上拉
0:无内部上拉(默认值)
PORTm.PCR.BITn对应Pmn。
如果端口设置为外部总线端口(WAIT端口除外)、通用输出口,外设输出口,那么PCR的设置是无效的。
不存在端口不可配置PCR位,必须保留默认值0。 -
暂时不表:DSCR,DSCR2:端口驱动能力寄存器
端口功能控制(MPC)寄存器
-
PWPR:MPC写保护寄存器,读/写型
BIT7:PFSWE写保护位 0:可写入 1:不可写入
BIT6:FPS写保护位 0:可写入 1:不可写入
其它:保留位,必须保留默认值0。 -
FPS:端口功能寄存器,读/写型
BIT7:ASEL,模拟功能选择位
BIT6:ISEL,EXTI功能选择位
BIT5~0:PSEL,外设功能选择位
MPC.PmnFPS对应Pmn。
不同Pmn的上述BIT支持情况不同,应参考目标单片机的数据手册“Multi-Function Pin Controller (MPC)–Register Descriptions”章节。不支持的BIT位不可设定,必须保留默认值0。 -
暂时不表:PFCSE
-
暂时不表:PFCSS0
-
暂时不表:PFAOE0、PFAOE1
-
暂时不表:PFBCR0、PFBCR1、PFBCR2、PFBCR4
MPC.PmnFPS的设置过程
- 复位PMR位
- 设定外设端口的输入/输出方向
- 关闭FPS写保护
- 整体写入PmnFPS
- 打开FPS写保护
- 根据需要,置位PMR位
MPC寄存器设置注意事项
- 设置PmnFPS前,必须确保Pmn的PMR为0;否则,会有不可预料的信号在Pmn输入或输出。
- PmnFPS的设定值必须参照芯片手册。如果写入值超出手册的范围,则不能保证写入操作的正确性。
- 不能把同一个外设功能分配给多个引脚。比如一个UART只能有1个TX通道,不能有多个TX通道。
- 凡是模拟模式端口,要先设置为普通输入(先令PORTm.PMR.BITn=0,后令PORTm.PDR.BITn=0),再令PmnFPS的ASEL位为1(MPC.PmnFPS=0x80),以避免精度下降。
- PMR、PDR、PmnFPS的组合是有限的,如下:
状态 | PMR | PDR | FPS.ASEL | FPS.ISEL | FPS.PSEL | 注意 |
---|---|---|---|---|---|---|
复位后 | 0 | 0 | 0 | 0 | 000000b | 复位后端口是普通输入口 |
普通输入 | 0 | 0 | 0 | 0/1 | x | |
普通输出 | 0 | 1 | 0 | 0 | x | |
外设功能 | 1 | x | 0 | 0/1 | 外设功能 | |
中断输入 | 1 | 0 | 0 | 1 | x | |
不可屏蔽中断 | x | x | x | x | x | |
模拟模式 | 0 | 0 | 1 | x | x | |
触摸 | 1 | 0 | 0 | 0 | 11001b | 可当作一种外设功能 |
EXTAL/XTAL | 0 | 0 | x | x | x |
注: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寄存器的配置顺序
- 设置为复位后的状态
寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
---|---|---|---|---|---|---|
设定值 | 0 | 0 | 0 | 0 | 0x00 | - |
- 设置为浮空输入&无中断
寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
---|---|---|---|---|---|---|
设定值 | 0 | 0 | 0 | 0 | 0x00 | - |
- 设置为上拉输入&无中断
寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
---|---|---|---|---|---|---|
设定值 | 0 | 0 | 0 | 1 | 0x00 | - |
- 设置为普通输出H
寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
---|---|---|---|---|---|---|
设定值 | 0 | 1 | 1 | 0 | 0x00 | - |
- 设置为普通输出L
寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
---|---|---|---|---|---|---|
设定值 | 0 | 0 | 1 | 0 | 0x00 | - |
- 设置为外设功能
寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
---|---|---|---|---|---|---|
设定值 | 0 | 0 | 0 | 0 | 查表 | 1 |
- 设置为模拟模式
寄存器 | PMR | PODR | PDR | PCR | PmnPFS | PMR |
---|---|---|---|---|---|---|
设定值 | 0 | 0 | 0 | 0 | 0x80 | - |
※1:"-"表示跳过
※2:应按照表格中从左到右的顺序设置寄存器
感想:与STM32 GPIO配置的对比
- 比照STM32,RX的PMR设置,相当于32上设置AFIO。
- RX比STM32的端口设置多了MPC,即“IO挂靠在哪个外设上”的设置。
- 在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 命令时…...
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爬取商品页面的示例代码: 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,是逐个插入,放到后边 然后是修改,直接对下标赋值 看结果</...
微服务服务拆分和远程调用
一、服务架构比较 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目&#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,Bender,Herman引入至CT重建中,称为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安装 安装环境 虚拟机版本:centos7.9 虚拟机ip:192.168.5.144 oracle版本:11g oracle安装包:p13390677_112040_Linux-x86-64_1of7.zip,p13390677_112040_Linux-x86-64_2of7.zip,p13390677_11204…...
网络防御(9)
.一、SSL工作过程是什么? SSL位于应用层和传输层之间,它能够为基于TCP等可靠连接的应用层协议提供安全性保证。SSL协议本身分为两层: 上层为SSL握手协议(SSL handshake protocol)、SSLpassword变化协议(S…...
Spring核心与设计思想
文章目录 Spring是什么?认识Spring IoC容器传统的开发图书管理系统设计可能导致的问题 使用IoC容器 Spring是什么? Spring是一个用于构建企业级应用程序的开源框架,它为Java开发者提供了一种简化和加速应用程序开发的方式。Spring框架提供了…...
【stream的使用】使用stream.filter过滤List对象
Stream初相识 概括讲,可以将Stream流操作分为3种类型: 创建Stream Stream中间处理 终止Steam 每个Stream管道操作类型都包含若干API方法,先列举下各个API方法的功能介绍。 开始管道 主要负责新建一个Stream流,或者基于现有的数组…...
Flink多流处理之connect拼接流
Flink中的拼接流connect的使用其实非常简单,就是leftStream.connect(rightStream)的方式,但是有一点我们需要清楚,使用connect后并不是将两个流给串联起来了,而是将左流和右流建立一个联系,作为一个大的流,并且这个大的流可以使用相同的逻辑处理leftStream和rightStream,也可以…...
对任意类型数都可以排序的函数:qsort函数
之前我们学习过冒泡排序: 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内容不更新解决方法
场景: table组件绑定的数据变化时,页面没有重新渲染,常见于子组件中使用table组件 原理: 创建实例时 数组在vue中没有被监听到,属于非响应式数据,数组的下标变化无法监听到 解决方式: <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容器执行命令,修改Html内容,添加“Hello World”5. 停止与开始容器6. 删除容器…...
js字符串替换
在JavaScript中,字符串替换 有多种方法,下面介绍其中一些比较常用的方法。 使用replace()方法、 replace()方法用于在字符串中查…...
网络防御(2)
1. 什么是防火墙? 2. 状态防火墙工作原理? 3. 防火墙如何处理双通道协议? 一、什么是防火墙? 防火墙是一种网络安全设备或软件,用于保护计算机网络免受未经授权的访问,并管理网络流量。它作为一个安全边界…...
[RCTF2019]DontEatMe
前言 一道迷宫题,但是输入被加密后使用,迷宫也需要在程序中找出并没有直接输出 分析 反调试 发现有两个比较特殊的地方,随机数和创建了新线程,随机数后面又被重新赋值给覆盖了,暂时不用管,ZwSetInformat…...
6. CSS(三)
目录 一、盒子模型 (一)网页布局的本质 (二)盒子模型组成 (三)边框(border) (四)表格的细线边框 (五)内边距(padding…...
计算机网络—HTTP
这里写目录标题 HTTP是什么HTTP常见状态码HTTP常见字段GET与POST的区别Get和Post是安全和幂等吗PUT幂等,不安全DELETE幂等,不是安全 HTTP缓存技术HTTP缓存实现技术 HTTP1.0优缺点和性能HTTP1.1优缺点和性能HTTP2优缺点和性能HTTP3优缺点和性能HTTP和HTTP…...
Tomcat线程池原理
1. 一个 SpringBoot 项目能同时处理多少请求?tomcat容器, 200 次。 2. 怎么来的? 而点击这些线程,查看其堆栈消息,可以看到 Tomcat、threads、ThreadPoolExecutor 等关键字 基于“短时间内有 200 个请求被立马处理…...
踩坑 视觉SLAM 十四讲第二版 ch13 编译及运行问题
一、安装Geset 库 sudo apt-get install libgtest-dev cd /usr/src/gtest sudo mkdir build cd build sudo cmake .. //一定要以sudo的方式运行,否则没有写入权限 sudo make //这个也一样要以sudo的方式 sudo cp libgtest*.a /usr/local/lib //将生成…...
【设计模式】-装饰器模式
Java 设计模式之装饰器模式 前言 在软件开发中,经常有需求对已有的对象进行功能的扩展,但是传统的继承方式会导致类的数量快速增多,且难以维护。为了解决这个问题,装饰器模式应运而生。 装饰器模式是一种结构型设计模式ÿ…...
七月学习总结
一晃暑期七月份已经结束了,八月份需要做的事情更多。 在成长的路上不断地迷茫,不断地前进。到底才能完成对自己地救赎。 目前想的就是以后走软件开发,往架构方向做,主语言Java或者go,408基础一定要扎实,计…...
Camunda 7.x 系列【6】Spring Boot 集成 Camunda 7.19
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 前言2. Camunda Platform Run3. Spring Boot 版本兼容性4. 集成 Spring Boot5. 启动项目…...
Kubernetes —调度器配置
目录 配置文件 扩展点 调度插件 多配置文件 应用于多个扩展点的插件 调度程序配置迁移 你可以通过编写配置文件,并将其路径传给 kube-scheduler 的命令行参数,定制 kube-scheduler 的行为。 调度模板(Profile)允许你配置 k…...
国内做性视频网站有哪些/百度开户返点
AMD公司今日发布AMD EPYC™(霄龙)7000系列高性能数据中心处理器,与全球服器生态系统的合作伙伴共同开启数据中心发展的新时代。AMD与众多客户和合作伙伴共同启动了全球发布会,带来了一系列系统和性能演示,以及客户的背书。AMD EPYC采用创记录…...
淄博微网站/重庆seo霸屏
这是一份 JavaScript 冒泡排序的代码: functionbubbleSort(arr) {for (var i 0; i < arr.length - 1; i) {for (var j 0; j < arr.length - i - 1; j) {if (arr[j] > arr[j 1]) {var temp arr[j];arr[j] arr[j 1];arr[j 1] temp;}}}return arr;...
门户网站建设注意事项/国内ip地址 免费
一、背景 公司的项目前段时间发版上线后,测试反馈用户的批量删除功能报错。正常情况下看起来应该是个小BUG,可怪就怪在上个版本正常,且此次发版未涉及用户功能的改动。因为这个看似小BUG我了解到不少未知的东西,在这里和你们分享下…...
贵阳免费网站建设/企业营销策划
转载地址:http://www.cnblogs.com/rollenholt/archive/2011/08/28/2156357.html java中的多线程 在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。 对于直接继承Thread的类来说,代…...
北京公司模板网站好/石家庄网络关键词排名
前面的直接插入算法,以抓牌为例,假设手气比较好,抓牌的顺序是从A直到K,那么在这整个过程中都无需进行任何的插入动作,只需要将每次抓到的牌放在最后即可。假设现在手上已经抓到的牌的顺序中逆序比较少,则抓…...
怎么免费下wordpress/国外网站seo免费
vue弹窗加校验点击添加专区的按钮出现添加专区的弹窗根据elementui里面的dialog和form表单写的<div slot"setting"><el-button type"primary" click"addSub true">添加专区</el-button> </div>addSub是控制弹窗的显示隐…...