1046A-C2 GPIO的复用

  • 1046GPIO概况
    1、Ls1046 有四组 GPIO,分别为:
    在这里插入图片描述

注:GPIO1[13]只能做输出。
 GPIO 单元包括以下功能:
·支持 32 个通用输入/输出端口
·复位期间所有信号均为高阻态
·所有端口的开漏功能
·所有端口都可以选择在更改状态时生成中断
·端口可以与其他功能信号复用

2.GPIO 寄存器介绍
 GPIO 内存映射
GPIO1 base address: 230_0000h
GPIO2 base address: 231_0000h
GPIO3 base address: 232_0000h
GPIO4 base address: 233_0000h
在这里插入图片描述

a.GPIO direction register (GPDIR)
GPIO 方向寄存器(GPDIR)定义各个引脚的方向
方向,指示引脚是用作输入还是输出。
00000000000000000000000000000000b - 相应的引脚是输入。
00000000000000000000000000000001b - 相应的引脚是输出。
b. GPIO open drain register (GPODR) GPIO 开漏寄存器(GPODR)定义了各个端口驱动其输出的方
式。
开漏配置,指示信号是作为输出主动驱动还是开漏驱动器。该寄存器对 GPDIR 中编程为输入的信号
没有影响。
00000000000000000000000000000000b - 相应的信号作为输出被主动驱动。
00000000000000000000000000000001b - 相应的信号是漏极开路驱动器。作为输出,信号被驱动
为低电平有效,否则它不被驱动(高阻抗)。
c. GPIO data register (GPDAT)
GPIO 数据寄存器(GPDAT)承载各个端口的数据输入/输出。
数据,指写入该寄存器会锁存在外部引脚上显示的数据,前提是相应的 GPDIR 位配置为输出。Ubuntu_UM
FET1046A-C、OK1046A-C

  • 16 -
    当 GPDIR 处于输出模式时,GPDAT 读操作会在返回引脚处的数据。
    当 GPDIR 处于输入模式时,GPDAT 读操作返回端口的状态。
    d. GPIO interrupt event register (GPIER) GPIO 中断事件寄存器(GPIER)携带导致中断的事件的信
    息。
    GPIER 中的每个位对应一个中断源。通过写入来清除 GPIER 位。但是,写零无效。
    中断事件,指示相应的 GPIO 信号是否发生中断事件。
    00000000000000000000000000000000b - 相应的 GPIO 信号上没有发生中断事件。
    00000000000000000000000000000001b - 相应的 GPIO 信号发生中断事件。
    e. GPIO interrupt mask register (GPIMR) GP10 中断屏蔽寄存器(GPIMR)定义各个端口的中断屏蔽。
    发生屏蔽中断请求时,无论 GPIMR 状态如何,都会设置相应的 GPIER 位。当发生一个或多个非屏蔽
    中断事件时,GPIO 模块向中断控制器发出中断。
    中断掩码。指示是否屏蔽或未屏蔽相应 GPIO 信号的中断事件。
    00000000000000000000000000000000b - 屏蔽(禁用)输入中断信号。
    0000000000000000000000000000000001b - 未屏蔽(启用)输入中断信号。
    f. GPIO interrupt control register (GPICR) GPlO 中断控制寄存器(GPICR)确定相应的端口线是否在
    从高到低的变化或信号状态的任何变化时断言中断请求。
    边沿检测模式。相应的端口线根据以下内容断言中断请求:
    00000000000000000000000000000000b - 对端口状态的任何更改都会生成中断请求。
    00000000000000000000000000000001b - 端口上由高到低的更改生成中断请求。
    IRQ复用为GPIO
    IRQ做GPIO时需注意,在CPU手册3.4 Signal multiplexing details 章节中可以看到控制IRQ引脚功能的是IRQ_BASE和IRQ_EXT

我们可以先看一下CPU手册中对IRQ_BASE的介绍
在这里插入图片描述
在这里插入图片描述
从上图得知IRQ_BASE在设置引脚功能时,每一个脚都是独立的,设置哪一个引脚便把哪一位设置为1,IRQ3-11可做GPIO,全部设置为GPIO的时候需要每一位设置为1即111111111(3-11)然后再把这个二进制转换为十进制511即可,即IRQ_BASE=511。若只想配置IRQ的其中几个引脚为GPIO,则只需把对应的引脚位置置为1,比如配置IRQ11为GPIO1[31],取值为000000001转换为十进制,IRQ_BASE=1,同时记得把IRQ_EXT=0填写到RCW中。
复用GPIO1_28为例:
将IRQ8配置为GPIO[28]取值为000001000转换为十进制,IRQ_BASE=8,同时将IRQ_EXT=0填写到RCW中:

vi flexbuild/packages/firmware/rcw/ls1046ardb/FORLINX/rcw_1800_qspiboot_1133_5a59.rcw
故修改IRQ_BASE=8
添加以下字段

IRQ_BASE=8
IRQ_EXT=0

复用GPIO2[12]为例:
GPIO2有RCW字段IFC_GRP_[n]BASE和字段IFC_GRP[n]_BASE,共同决定,通过看手册的3.4.7章节,修改如下:
IFC_GRP_E1_BASE=1 ,ICF_GRP_E1_EXT=0

vi flexbuild/packages/firmware/rcw/ls1046ardb/FORLINX/rcw_1800_qspiboot_1133_5a59.rcw
添加以下字段

IFC_GRP_E1_BASE=1 
ICF_GRP_E1_EXT=0

保存退出,
进行编译:

root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder -c firmware -a arm64 -m ls1046ardb -b qspi -S 1133

生成镜像:

root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder -i mkfw -a arm64 -m ls1046ardb -b qspi -S 1133

生成的镜像在/build/images,将生成的firmware_ls1046ardb_uboot_qspiboot_1133_5a59.img
镜像替换掉出厂镜像,烧写
GPIO测试:

root@localhost:~# ls /sys/class/gpio/
export  gpio451  gpiochip384  gpiochip416  gpiochip448  gpiochip480  unexport
root@localhost:~# echo 448 > /sys/class/gpio/export
root@localhost:~# echo 508 > /sys/class/gpio/export
root@localhost:~# echo out > /sys/class/gpio/gpio508/direction
root@localhost:~# cat /sys/class/gpio/gpio508/value
0
root@localhost:~# echo 1 > /sys/class/gpio/gpio508/value
root@localhost:~# cat /sys/class/gpio/gpio508/value
1
root@localhost:~# echo 0 > /sys/class/gpio/gpio508/value
root@localhost:~# cat /sys/class/gpio/gpio508/value
0
root@localhost:~# echo 460 > /sys/class/gpio/export
root@localhost:~# echo out  > /sys/class/gpio/gpio460/direction
root@localhost:~# cat /sys/class/gpio/gpio460/value
0
root@localhost:~# echo 1  >  /sys/class/gpio/gpio460/value
root@localhost:~# cat /sys/class/gpio/gpio460/value
1
root@localhost:~# ls /sys/class/gpio/
export  gpio448  gpio451  gpio460  gpio508  gpiochip384  gpiochip416  gpiochip448  gpiochip480  unexport

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值