瑞芯微Rockchip开发者社区
直播中

陈静

7年用户 1269经验值
私信 关注
[问答]

RK3288的GPIO操作方法是什么

GPIO寄存器的操作方法有哪几种呢?
RK3288的GPIO操作方法是什么?

回帖(1)

张霞

2022-3-9 11:07:50
3288LED驱动编写


1、LED硬件知识

LED驱动方式常见的有四种:



  • 方式1:使用引脚输出3.3v点亮LED,输出0v熄灭LED。
  • 方式2:使用引脚拉低到0v点亮LED,输出3.3v熄灭LED。
    有些情况下,如引脚输出能力不足,省电等原因,使用三极管驱动。
  • 方式3:使用引脚输出1.2v驱动三极管点亮LED,输出0v熄灭LED。
  • 方式4:使用引脚输出0v点亮LED,输出1.2v熄灭LED。
    从软件控制的角度讲,有输出高点压驱动LED,也有输出低电压驱动LED的。具体要看电路设计。


2、GPIO的一般结构




  • 有很多组GPIO,每组有多个GPIO
  • GPIO需要设置对应的时钟
  • GPIO需要设置对应的模式,一般可以用作很多功能
  • GPIO需要实则知对应的方向,输入还是输出
  • GPIO需要设置数值,输出的高低电平,输入则从寄存器读取数值。

3、普通的GPIO设置方法




  • 芯片一般有相关的章节,来介绍Clock 和 Power、GPIO功能。
  • 有对应的寄存器来设置引脚的功能模式。 一个引脚可以用于GPIO、串口、USB等其他功能。
  • 有对应的寄存器来设置GPIO的使能。
  • 对于已经设置为GPIO功能的引脚,有方向寄存器设置它的方向:输出、输入。
  • 对于已经设置为GPIO功能的引脚,有数据寄存器来写、都引脚电平状态。

4、GPIO寄存器的操作方法


寄存器有两种操作方法,主要的原则是不能影响到其他位。



  • 直接读写:读出对应寄存器、修改对应的位、写入寄存器。

    • val = data_reg
    • val = val | (1 << n);
    • data_reg = val;

  • set - and - clear protocol:



    • set_reg、clr_reg、data_reg三个寄存器对应的是同一个物理寄存器。
    • 要设置bit n: set_reg = (1 << n);
    • 要清除bit n:clr_reg = (1 << n);


5、3288的GPIO操作方法


5.1 怎么写LED驱动程序?




  • 看原理图,确定引脚位置,确定引脚要输出什么电平才能点亮LED,反之亦然。
  • 看芯片手册,确定寄存器操作方法:涉及到哪些寄存器?哪些位?寄存器地址是什么?
  • 编写驱动:先写框架,再写硬件操作的代码。

5.2 3288原理图






  • GPIO:General-Purpose Input/Output,通用的输入输出口
  • CRU:Clock & Reset Unit,使用和复位单元 通过CRU使能某一个GPIO模块
  • PMU:Power Managerment Unit,电源管理单元 有设置GPIO0的功能寄存器
  • GRF:General Register Files,通用寄存器文件 设置GPIO1~8的功能寄存器


板上的晶振时钟通过,GENERAL PLL倍频,通过选择器进入GeNERAL_MUX_CLK。GENERAL_MUX_CLK通过分频,一路给了PD_ALIVE,一路给了PD_PMU。PD_ALIVE提供GPIO1~8的时钟,PD_PMU提供GPIO0的时钟。3

基地址:在手册里overwrite里,有各个模块的memory map,里面有各个模块的基地址。

5.3 3288寄存器手册


想要驱动3288的led,就应该去找芯片手册上对应的章节来看。需要学习三个章节(CRU、PMU、CRF、GPIO)才能有一个整体的认识。

3288 分为GPIO0 ~ 8 9组 的GPIO0小组里面有A0 ~ A7、B0 ~ B7、C0 ~ C7 、 D0 ~ D7每一组有32个GPIO pin。
每一组的GPIO有Data 寄存器、Data Dir 寄存器、Ext Data寄存器。

当需要使用GPIO时,xxx寄存器设置方向寄存器输出或输入, xxx寄存器设置点位,xxx寄存器设置其他复用功能。





  • 有些芯片的GPIO是没有使能GPIO模块的。
  • ↩︎

  • 在芯片手册中确定的寄存器地址被称为
  • 物理地址
  • ,在Linux内核中无法直接使用。需要使用内核提供的ioremap把物理地址映射成
  • 虚拟地址

  • ↩︎

  • 工作中如果要找时钟,我觉得应该从下面找起,依次按着名字往上找。
  • ↩︎
举报

更多回帖

发帖
×
20
完善资料,
赚取积分