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

刘满贵

7年用户 1450经验值
私信 关注
[经验]

在Firefly-RK3399开发板上使用并控制LED灯及GPIO口

LED使用

Firefly-RK3399开发板上有2个LED灯,如下表所示

1.jpg

以设备(LED子系统)的方式控制LED

1.jpg

使用trigger方式控制LED(参考leds-class.txt)

首先在DT里将两个LED描述如下

1.jpg

Simple trigger LED

  1. 定义LED触发器

    DEFINE_LED_TRIGGER(ledtrig_default_control);

  2. 注册该触发器

    led_trigger_register_simple("ir-user-click", &ledtrig_default_control);

  3. 控制LED的亮

    led_trigger_event(ledtrig_default_control, LED_FULL);

Complex trigger LED

查看都支持那些trigger

cat /sys/class/leds/firefly:blue:power/trigger

使用某个trigger触发

echo "timer" > /sys/class/leds/firefly:blue:power/trigger

GPIO使用(以GPIO0_B4为例)

DT里描述GPIO0_B4如下

配置管脚MUX为GPIO模式(默认是GPIO模式,这里是为了读者更明白原理)

1.jpg

以GPIO的模式使用该PIN脚

1.jpg

IO-Domain

在复杂的片上系统(SOC)中,设计者一般会将系统的供电分为多个独立的block,这称作电源域(Power Domain),这样做有很多好处,例如:

  • 在IO-Domain的DTS节点统一配置电压域,不需要每个驱动都去配置一次,便于管理
  • 依照的是Upstream的做法,以后如果需要Upstream比较方便
  • IO-Domain的驱动支持运行过程中动态调整电压域,例如PMIC的某个Regulator可以1.8v和3.3v的动态切换,一旦Regulator电压发生改变,会通知IO-Domain驱动去重新设置电压域

使用工具IO来调试

查看GPIO1_B3引脚的复用情况

  1. 从主控的datasheet查到GPIO1对应寄存器基地址为:0xff320000

  2. 从主控的datasheet查到GPIO1B_IOMUX的偏移量为:0x00014

  3. GPIO1_B3的iomux寄存器地址为:基址(Operational Base) + 偏移量(offset)=0xff320000+0x00014=0xff320014

  4. 用以下指令查看GPIO1_B3的复用情况:

    io -4 -r 0xff320014 ff320014: 0000816a

  5. 如果想复用为GPIO,可以使用以下指令设置

    io -4 -w 0xff320014 0x0000812a

原作者:54shady

更多回帖

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