Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1502928
  • 博文数量: 108
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 997
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-29 09:58
个人简介

兴趣是坚持一件事永不衰竭的动力

文章分类

全部博文(108)

文章存档

2021年(1)

2020年(10)

2019年(19)

2018年(9)

2016年(23)

2015年(43)

2013年(3)

我的朋友

分类: 嵌入式

2019-03-29 15:46:02





原文地址: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) |
给主人留下些什么吧!~~