NanoPi-NEO-Core最近买了一块,这个板子使用全志H3。查看H3的数据手册,把GPIO这部分做个笔记。
H3有7组GPIO,如下
![](https://img-blog.csdnimg.cn/60a18903681a49c8b27d2e676aee4d02.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAamppbmw=,size_20,color_FFFFFF,t_70,g_se,x_16)
分别是PA,PC,PD,PE,PF,PG,PL.没有PB这一组
PA有22个端口
PC有19个端口
PD有18个端口
PE有16个端口
PF有7个端口
PG有14个端口
PL有12个端口
其中两组IO支持中断。PA和PG支持中断
PIO的基址为0x01c2_0800
抛却中断配置,主要PIO的寄存器有4个,Pn_CFG, Pn_DAT,Pn_DRV,Pn_PUL
每组IO有4个Pn_CFG寄存器,Pn_CFG0-Pn_CFG3,每4bit配置一个端口模式
PA有22个端口,则需要4×22=88bit,则需要配置寄存器Pn_CFG0-Pn_CFG2
例如PA的端口0配置,在Pn_CFG0的bit2-0,bit3保留位
![](https://img-blog.csdnimg.cn/86f894c1b4784d898d39b197d75eb570.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAamppbmw=,size_20,color_FFFFFF,t_70,g_se,x_16)
Pn_CFG地址计算:基址+n*36+(0-3)*4.
例如:
PA_CFG0地址=0x01c2_0800 + 0×36 +0×4=0x01c2_0800
PA_CFG1地址=0x01c2_0800 + 0×36 +1×4=0x01c2_0804
PA_CFG2地址=0x01c2_0800 + 0×36 +2×4=0x01c2_0808
PA_CFG3地址=0x01c2_0800 + 0×36 +3×4=0x01c2_080c
....
PC_CFG0地址=0x01c2_0800 + 1×36 +0×4=0x01c2_0824
每组IO有1个Pn_DAT寄存器,每一bit代表IO的状态。当IO配置输出,写此寄存器改变输出状态,当配置输入,读此值代表输入状态。
Pn_DAT地址计算:基址+n*36+(4)*4
例如:
PA_DAT地址=0x01c2_0800 + 0×36 +4×4=0x01c2_0810
PC_DAT地址=0x01c2_0800 + 1×36 +4×4=0x01c2_0834
.....
每组IO由2个Pn_DRV寄存器。此寄存器中每2bit表示一个IO的驱动能力。共有level0-level3
Pn_DRV 地址计算:基址+n*36+(5,6)*4
例如:
PA_DRV0地址=0x01c2_0800 + 0×36 +5×4=0x01c2_0814
PA_DRV1地址=0x01c2_0800 + 0×36 +6×4=0x01c2_0818
每组IO有2个Pn_PUL寄存器,此寄存器中每2bit表示IO上下拉配置。2'b00:上下拉禁止,2'b01:上拉,2'b10:下拉,2'b11:保留
Pn_PUL地址计算:基址+n*36+(7,8)*4
例如:
PA_PUL0地址=0x01c2_0800 + 0×36 +7×4=0x01c2_081c
PA_PUL1地址=0x01c2_0800 + 0×36 +8×4=0x01c2_0820
综上所述,每组IO有9个寄存器,所占空间9×4=36=0x24字节空间
io中断寄存器
只有PA和PG支持中断
![](https://img-blog.csdnimg.cn/4328761e3a1c499392d9da5a6a48bc31.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAamppbmw=,size_20,color_FFFFFF,t_70,g_se,x_16)
每组IO的中断,也是4类寄存器:PA_INT_CFG,PA_INT_CTL,PA_INT_STA,PA_INT_DEB
PA_INT_CFG0-3:每4bit配置一个IO的中断类型
4'b0000:上升沿
4'b0001:下降沿
4'b0010:高电平
4'b0011:低电平
4'b0100:双边沿
其它:保留
PA_INT_CTL:每bit控制中断的使能和禁止
PA_INT_STA:中断状态,每一bit表示中断状态,挂起或者没有中断挂起
PA_INT_DEB:中断防抖设置。