原文地址:https://blog.csdn.net/juebanrui1988/article/details/50704570
GPIO的所有操作都是基于编号的,可以说编号是一个GPIO的ID,TI AM335x系列处理器GPIO的编号规则如下:
pin_num=bank_num?32+pin_bank_num
pin_num=GPIO编号
bank_num=GPIO块编号
pin_bank_num=GPIO在GPIO块中的子编号
AM335x系列SOC有4个bank,每个bank有32个GPIO,一共支持 32*4=128
个GPIO,GPIO的bank表示方法为: bank0[0:31] bank1[0:31] bank2[0:31] bank3[0:31]。例如芯片上有一个pin为gpio1_26,
则这个pin的GPIO编号为:number=1*32+26=58
将GPIO映射到sysfs文件系统:
# echo 58 > /sys/class/gpio/export
设置GPIO方向(输入或输出):
# echo "out" > /sys/class/gpio/gpio58/direction
# echo "in" > /sys/class/gpio/gpio58/direction
设置GPIO电平
# echo 0 > /sys/class/gpio/gpio58/value // set gpio value to low
# echo 1 > /sys/class/gpio/gpio58/value // set gpio value to high
解除GPIO映射
echo 58 /sys/class/gpio/unexport
内核配置 有图片,见原文地址
驱动使用GPIO
驱动路径
am335x gpio驱动包含两个文件:
源码文件 说明
drivers/gpio/omap-gpio.c 处理器 gpio驱动
drivers/gpio/omap-gpiolib.c sysfs gpio驱动
如何在kernel中使用GPIO
API 实例 说明
gpio_request() err = gpio_request(67, “sample_name”); 申请GPIO资源
gpio_free() err = gpio_free(67); 释放GPIO资源
gpio_direction_input() err = gpio_direction_input(67); 将GPIO设为输出
gpio_direction_output() err = gpio_direction_output(67,1); 将GPIO设为输出并初始化高
gpio_get_value() val = gpio_get_value(); 读取GPIO的当前电平
如何在kernel中使用GPIO中断
API 实例 说明
gpio_to_irq() irq_num = gpio_to_irq(67); 获取GPIO中断号
request_irq() request_irq(irq_num, handler, 0, “gpio_test”, NULL); 申请中断
set_irq_type() set_irq_type(irq_num, IRQ_TYPE_EDGE_RISING); 设置中断类型
free_irq() free_irq(irq_num, NULL); 释放中断
注意:在使用gpio中断前要先申请对应的GPIO资源,在释放中断后要释放GPIO资源
阅读(2307) | 评论(0) | 转发(0) |