当前位置: 首页 > 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线路维持高电平(很离谱?)
http://www.lryc.cn/news/115094.html

相关文章:

  • 【Git】Git切换地址
  • elementUI点击当前行更改当前行状态(数据更新DOM不更新问题解决)
  • python爬取阿里巴巴商品页面数据api
  • angular-mat-select 多选 实现按选择顺序排序
  • 爬虫010_列表高级_添加_append_extend_修改_查询_in_not int_删除_del_pop_remove---python工作笔记029
  • 微服务服务拆分和远程调用
  • MySQL8.1源码安装与部署
  • algebraic reconstruction technique(ART)
  • oracle11g安装
  • 网络防御(9)
  • Spring核心与设计思想
  • 【stream的使用】使用stream.filter过滤List对象
  • Flink多流处理之connect拼接流
  • 对任意类型数都可以排序的函数:qsort函数
  • vue数据更新table内容不更新解决方法
  • 合宙Air724UG LuatOS-Air script lib API--record
  • 基于Vgg16和Vgg19深度学习网络的步态识别系统matlab仿真
  • Java分布式微服务3——Docker
  • js字符串替换
  • 网络防御(2)
  • [RCTF2019]DontEatMe
  • 6. CSS(三)
  • 计算机网络—HTTP
  • Tomcat线程池原理
  • 踩坑 视觉SLAM 十四讲第二版 ch13 编译及运行问题
  • 【设计模式】-装饰器模式
  • 七月学习总结
  • Camunda 7.x 系列【6】Spring Boot 集成 Camunda 7.19
  • Kubernetes —调度器配置
  • 【微信小程序】申请蓝牙、位置和数据库等相关权限