SOC的GPIO配置

SOC的GPIO配置

1 GPIO工作原理

Soc共集成40路双向GPIO,每一路GPIO的输入输出方向由方向寄存器来控制,管脚的输入输出电平值保存在相应的输入/输出值寄存器当中。外部信号输入至内部后经三级同步,再进行滤波,滤波宽度可通过相应的滤波宽度寄存器来选择配置,支持的滤波宽度范围为0~63个系统时钟周期。输入信号的脉冲宽度若能达到寄存器的设置值,则允许被采样,否则将被当做毛刺过滤。GPIO输出采用寄存器输出,通过写GPIO输出值寄存器直接将信号通过引脚向外部输出。GPIO模块的结构如图1所示:

图1 gpio结构

注意:数据手册上与实际使用上有冲突,手册上GPIO有60路可是实际使用过程中只有40路,40路GPIO分两组寄存器来进行配置,0-9路GPIO使用寄存器1的22-31位来配置,后30用寄存器2的0-29位来配置。

2 配置流程

GPIO的配置流程如下:

  1. 使能整个GPIO外设时钟,配置外设时钟寄存器(地址为0x40C00000)的24位为1。
  2. 配置引脚复用为GPIO,配置引脚复用寄存器(地址为0x40C00004)的第2位和第3位为0x0,使得中断复用引脚和外扩内存引脚都配置为GPIO功能。
  3. 配置GPIO模式寄存器GPIOEN器,使对应IO工作为GPIO口模式,如果GPIO编号小于10则配置GPIOEN1对应IO口的值为0x1,如果GPIO编号大于等于10则配置GPIOEN2对应IO口的值为0x1.
  4. 配置GPIO方向寄存器GPIODIR,配置其对应IO口为输入还是输出,对应位为1表示输出,对应位为0表示输入。
  5. 设置输出IO口的电平,配置GPIO输出电平寄存器GPIOODR的对应位为1表示输出高电平,对应位为0表示输出低电平。
  6. 获取输入IO口的电平值,获取GPIO输入电平寄存器GPIOIDR的对应位的数值,若为1表示获取到高电平,如为0表示获取到低电平。

3 数据结构封装

根据GPIO模块寄存器地址在内存分配图中的分布,将其地址定义为整型宏定义,将寄存器定义为各位各个功能位域的结构联合体。这样子将整型地址转换成寄存器的结构联合体指针,就能够通过寄存器位域去编写底层驱动了,图1表示宏定义寄存器的定义和类型转换,图2表示寄存器结构联合体定义。

 

图1

 

 

图2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值