Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31040218
  • 博文数量: 230
  • 博客积分: 2868
  • 博客等级: 少校
  • 技术积分: 2223
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-08 21:48
个人简介

Live & Learn

文章分类

全部博文(230)

文章存档

2022年(2)

2019年(5)

2018年(15)

2017年(42)

2016年(24)

2015年(13)

2014年(1)

2012年(5)

2011年(58)

2010年(56)

2009年(9)

我的朋友

分类: LINUX

2017-04-22 10:53:38

系统平台珠海鼎芯D328 -- 基于i.MX6Q

系统版本:Linux3.0.35


一、GPIO使用函数

#include

1. 申请GPIO,并占用:

int gpio_request(unsigned gpio, const char *label);

int gpio_request_one(unsigned gpio, unsigned long flags, const char *label);

flags -- GPIO属性,例如:GPIOF_OUT_INIT_HIGH

*label -- GPIO名称


2. 释放GPIO的占用:

void gpio_free(unsigned gpio);


3. 设定GPIO传输方向:

输入:int gpio_direction_input(unsigned gpio);

输出:int gpio_direction_output(unsigned gpio, int value);


4. 获取GPIO的值:

int gpio_get_value(unsigned gpio);


5. 设置GPIO的值:

int gpio_set_value(unsigned gpio, int value);



6. 配置GPIO上拉下拉:( 关于IMx6中gpio的上拉,并未用到此类函数,需要配置相关寄存器,其中系统本身已经配置好部分IO,如需再配置其他IO需要手动 )



int gpio_pull_updown(unsigned gpio, unsigned value);

value = 0, normal

value = 1, pull up

value = 2, pull down


二、GPIO中断使用


1. GPIO转中断:

static inline int gpio_to_irq(unsigned gpio);

这个函数将GPIO的PIN值转换为相应的IRQ值(中断号),可以传给set_irq_type()、request_irq()和free_irq()使用;


2. 中断转GPIO:

irq_to_gpio()

这个函数返回的GPIO编号通常用来调用gpio_get_value(),比如在沿触发的中断中获取引脚的状态


3. GPIO中断申请:

static inline int__must_check request_irq(unsigned intirq, irq_handler_t handler, unsigned long flags, const char *name, void *dev);

irq        要申请的硬件中断号;

handler    向系统登记的中断处理函数,是一个回调函数,中断发生时,系统调用这个函数,dev参数将被传递;

flags      是中断处理的属性,

*name     设备名称

*dev       将被传递的参数,在中断共享时会用到,一般设置为这个设备的device结构本身或者NULL。

当flags发生时,触发中断。


4. 设置中断触发方式:

set_irq_type( gpio_to_irq(unsigned gpio),IRQF_TRIGGER_FALLING )



三、GPIO在基于i.MX6的Linux3.0.35内核中的配置(这里均已GPIO_6_11为例)


1. GPIO管脚特定模式的相关配置在arch/arm/mach-mx6/iomux_mx6q.h文件中。


2. GPIO的宏定义配置参数在iomux-v3.h文件中


3. GPIO板级初始化管脚在board-mx6q_sabresd.h文件中


4. GPIO在内核的中使用名称定义


四、针对i.MX6DQ手册查看GPIO的配置与寄存器


1. 一个IC上的引脚,通过一个n选1的多路开关,把需要的外设连接到该引脚上。具体额配置通过IOMUXC_SW_MUX_CTL_PAD寄存器来实现。

如下图所示,是IOMUXC_SW_MUX_CTL_PAD_NAND_CS0_B的IO复用配置,主要分2部分,SION和IO复用;

SION:是软件强行配置模式,配置了该模式后,该IO的具体电平不由所连接的模块决定,而是可以由软件写入决定,该功能估计是在调试设备时使用;

IO复用:写入不同的配置,IO引脚所连接到对应的模块;

还有一个配套的寄存器是IOMUXC_SW_PAD_CTL_PAD,主要是用于配置管脚的上下拉、开漏、驱动强度、信号变化率等功能!


2. 配套的寄存器IOMUXC_SW_PAD_CTL_PAD_NAND_CS0_B,主要是用于配置管脚的上下拉、开漏、驱动强度、信号变化率等功能!


3. GPIO管脚模式、信号、配置和寄存器的对应关系等

阅读(1473) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~