i.MX6DQ -- GPIO配置应用详解

    xiaoxiao2021-12-03  169

    i.MX6DQ -- GPIO配置应用详解

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

    系统版本:Linux3.0.35

    一、GPIO使用函数

    #include <linux/gpio.h>

    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管脚模式、信号、配置和寄存器的对应关系等

    转载请注明原文地址: https://ju.6miu.com/read-679958.html

    最新回复(0)