1 目的
FPGA的三个管脚与3516的三个GPIO口相连
通过FPGA控制3516的GPIO口从而控制编码码率
2 寻找FPGA与3516相连的管脚
2.1 确认FPGA的控制接口号
已知FPGA用于控制的三个GPIO接口如下所示
SDI_GPIO_control[0] LOC = L24
SDI_GPIO_control[1] LOC = K25
SDI_GPIO_control[2] LOC = K26
根据硬件原理图《XC7K-HI3516A-CHV1.1.pdf》查找这三根线对应的3516的接口
找到fpga上的3个管脚:L24,K25,K26,其分别对应于连线:EN3,EN2,EN1。
2.2 确认fpga对应的3516 GPIO口
根据硬件原理图如下:
找到EN3,EN2,EN1对应于3516管脚如下:
SDI_GPIO_control[0] LOC = L24 --- EN3 --- GPIO9_3
SDI_GPIO_control[1] LOC = K25 --- EN2 --- GPIO14_3
SDI_GPIO_control[2] LOC = K26 --- EN1 --- GPIO14_2
3 GPIO配置步骤
参考《Hi3516A/Hi3516D 专业型HD IP Camera Soc用户指南.pdf》,查询GPIO接口的配置方法。
GPIO配置需要三步走:
- 首先配置GPIO复用寄存器,需要调整寄存器的值保证对应的接口复用为GPIO接口;
- 配置GPIO方向寄存器GPIO_DIR,控制GPIO口是输入或输出数据;
-
3.1 GPIO复用寄存器的配置
以 GPIO9_3/UART1_RXD口为例,参考《Hi3516A/Hi3516D 专业型HD IP Camera Soc用户指南.pdf》。
找到复用寄存器概述,寻找对应于UART1_RXD口的寄存器。
从上表中找到 UART1_RXD口的寄存器 — muxctrl_reg31
muxctrl_reg31的物理地址 = 基地址(0x200F_0000)+ 偏移地址(0x07C)=0x200F_007c
根据下图可知将该寄存器设为 0 时复用为GPIO口。
由上面步骤已知复用寄存器物理地址和复用设置方式
使用himm命令如下:
#将GPIO9_3/UART1_RXD管脚复用为GPIO9_3
himm 0x200F007C 0X00
至此完成复用寄存器配置。
3.2 GPIO方向寄存器配置
参考《Hi3516A/Hi3516D 专业型HD IP Camera Soc用户指南.pdf》13.6GPIO章节
寻找GPIO9方向寄存器的物理地址
首先找到基地址0x201D_0000
然后找到方向寄存器的偏移地址 0x400
计算GPIO9的方向寄存器地址 = 基地址0x201D_0000 + 偏移地址 0x400 =0x201D_0400.
接下来找到方向寄存器配置方法
GPIO9_3 (从9_0开始命名)对应于 第四位 bit[3]— 0b0000 0000,全部置零,设为输入。
使用himm命令为:
// 控制GPIO9_3管脚为输入
himm 0x201D0400 0x00
至此 GPIO9_3方向寄存器配置完毕。
3.3读取GPIO数据寄存器
在程序中使用**HI_S32 HI_MPI_SYS_GetReg(HI_U32 u32Addr, HI_U32 *pu32Value)**
获取寄存器的值。获取管脚的值需要知道其物理地址,需要参考GPIO_DATA数据寄存器。
例如:
对第4个bit操作,即偏移地址为0b000010_0000,0x020 — X_3
对第3个bit操作,即偏移地址为0b00_0001_0000,0x010 — X_2
对第2个bit操作,即偏移地址为0b00_00001000,0x008
对第1个bit操作,即偏移地址为0b00_0000_0100,0x004
GPIO9_3,9_2,9_1,9_0.则X_3是对第四个bit操作,偏移地址0x020
其物理地址 = 基地址(0x201D0400)+ 偏移地址(0x020)= 0x201D_0020
GPIOx_x | 物理地址 |
---|---|
GPIO9_3 | 0x201D_0020 |
之后使用HI_MPI_SYS_GetReg()函数获取值。
//获取输入值
ret = HI_MPI_SYS_GetReg(0x201D0020, &SDI_GPIO_control_0);
至此成功获取fpga的控制信号。