gpio优点
低功耗:GPIO具有更低的功率损耗(大约1μA,μC的工作电流则为100μA)。
集成IIC从机接口:GPIO内置IIC从机接口,即使在待机模式下也能够全速工作。
小封装:GPIO器件提供小的封装尺寸 ― 3mm x 3mm QFN!
低成本:您不用为没有使用的功能买单。
快速上市:不需要编写额外的代码、文档,不需要任何维护工作。
灵活的灯光控制:内置多路高分辨率的PWM输出。
可预先确定响应时间:缩短或确定外部事件与中断之间的响应时间。
更好的灯光效果:匹配的电流输出确保均匀的显示亮度。
布线简单:仅需使用2条就可以组成IIC总线或3条组成SPI总线。
与ARM 的几组GPIO引脚,功能相似,GPxCON 控制引脚功能,GPxDAT用于读写引脚数据。另外,GPxUP用于确定是否使用上拉电阻。 x为A,B,,H/J,
GPAUP 没有上拉电阻。
三、GPIO系统结构
如前面提醒的一样,一个可选的实现结构使得平台支持不同种类的GPIO控制器使用同一个编程接口变得简单。这个结构称为gpiolib。
作为一个调试目的,如果debugfs有效,一个/sys/kernel/debug/gpio文件在那里将被找到。它列出了所有的通过这个结构注册的GPIO控制器,和GPIO当前的使用状态。
Controller Drivers: gpio_chip
控制器驱动:gpio_chip
在这个架构中,每个GPIO控制器被封装为一个“gpio_chip”结构体,此结构体中包含了每个控制器的通用信息:
--确定GPIO方向的方法
--存取GPIO值的方法
--声明方法是否休眠的flag
--可选的debugfs dump方法(展现附加的状态如上拉配置等)
--用于诊断目的的标签
每个实例也有自己的私有数据,可能来自device.platform_data:它的个GPIO和它暴露几个GPIO.
实现一个gpio_chip的代码应该支持多个控制器的实例,可能使用驱动模型。代码会配置每个gpio_chip并且执行gpiochip_add()。移除一个GPIO控制器是少见的,使用gpio_remove()移除一个不再有效的GPIO控制器。
大多数时候,一个gpio_chip是一个实例独有的结构,它的一些状态值不暴露给GPIO接口,如编址、电源管理等等。编码解码器之类的芯片会有复杂的非GPIO状态。
所有的debugfs dump 方式通常应该忽略那些未作为GPIO请求的信号。他们可以使用gpiochip_is_requested(),此函数返回与GPIO相关的label或是NULL。