在linux或android系统中,假如我们要配置飞思卡尔IMX6处理器的GPIO管脚,比如是GPIO_19这个管脚,那么要像这样:

  1. #define  MX6Q_PAD_GPIO_19__GPIO_4_5     \
  2. (_MX6Q_PAD_GPIO_19__GPIO_4_5 | MUX_PAD_CTRL(NO_PAD_CTRL))

其中_MX6Q_PAD_GPIO_19__GPIO_4_5定义为:

  1. #define _MX6Q_PAD_GPIO_19__GPIO_4_5         \
  2. IOMUX_PAD(0x0624, 0x0254, 5, 0x0000, 0, 0)

这个IOMUX_PAD宏是定义GPIO的关键宏,其原型为:

  1. #define IOMUX_PAD(_pad_ctrl_ofs, _mux_ctrl_ofs, _mux_mode, _sel_input_ofs,
  2. _sel_input, _pad_ctrl)

IOMUX_PAD宏有6个参数,每个参数的意思是:

参数

含义

_pad_ctrl_ofs

控制寄存器的偏移地址(16进制)

_mux_ctrl_ofs

MUX控制寄存器的偏移地址(16进制), 用于选择引脚的功能

_mux_mode

MUX模式,bit0~3,范围0~7

_select_input_ofs

SELECT_INPUT寄存器偏移地址(16进制)

_select_input

Daisy Chain模式, bit0~1,范围0~3

_pad_ctrl

bits to be set in register _pad_ctrl_ofs for configuration selection

具体的含义要结合IMX6数据手册【Chapter 36 IMOUX Controller(IOMUXC)】的内容。

以下就GPIO_19这个管脚的配置进行说明:

1、_pad_ctrl_ofs

找到数据手册page 2433:

从上图可知:_pad_ctrl_ofs = 0x624

2、_mux_ctrl_ofs、_mux_mode

找到数据手册page 2055的内容:

如上图,_mux_ctrl_ofs取值为0x254,_mux_mode范围为000~110

只有_mux_mode = 0时,_select_input_ofs和_select_input才有效,其余时候_select_input_ofs和_select_input 都为0。

3、_select_input_of、_select_input

当_mux_mode = 0时,_select_input_ofs的取值需参考数据手册page 2654:

此时_select_input_ofs=0x8e8,_select_input=0x1

4、_pad_ctrl

_pad_ctrl一般取值为0

综上所述,GPIO_19的配置宏定义如下:

  1. #define _MX6Q_PAD_GPIO_19__KPP_COL_5            \
  2. IOMUX_PAD(0x0624, 0x0254, 0, 0x08E8, 1, 0)
  3. #define _MX6Q_PAD_GPIO_19__ENET_1588_EVENT0_OUT     \
  4. IOMUX_PAD(0x0624, 0x0254, 1, 0x0000, 0, 0)
  5. #define _MX6Q_PAD_GPIO_19__SPDIF_OUT1           \
  6. IOMUX_PAD(0x0624, 0x0254, 2, 0x0000, 0, 0)
  7. #define _MX6Q_PAD_GPIO_19__CCM_CLKO         \
  8. IOMUX_PAD(0x0624, 0x0254, 3, 0x0000, 0, 0)
  9. #define _MX6Q_PAD_GPIO_19__ECSPI1_RDY           \
  10. IOMUX_PAD(0x0624, 0x0254, 4, 0x0000, 0, 0)
  11. #define _MX6Q_PAD_GPIO_19__GPIO_4_5         \
  12. IOMUX_PAD(0x0624, 0x0254, 5, 0x0000, 0, 0)
  13. #define _MX6Q_PAD_GPIO_19__ENET_TX_ER           \
  14. IOMUX_PAD(0x0624, 0x0254, 6, 0x0000, 0, 0)
  15. #define _MX6Q_PAD_GPIO_19__SRC_INT_BOOT         \
  16. IOMUX_PAD(0x0624, 0x0254, 7, 0x0000, 0, 0)

以上的宏定义来自imx6的linux源码的arm/arch/palt-mxc/include/mach/iomux-mx6q.h

飞思卡尔IMX6处理器的GPIO配置方式的更多相关文章

  1. [i.MX]飞思卡尔IMX6处理器的GPIO-IOMUX_PAD说明

    在linux或android系统中,假如我们要配置飞思卡尔IMX6处理器的GPIO管脚,比如是GPIO_19这个管脚,那么要像这样: #define MX6Q_PAD_GPIO_19__GPIO_4_ ...

  2. 飞思卡尔 imx6 GC0308 摄像头驱动配置调试过程

    GC0308摄像头驱动程序使用的是linux v4l2协议,通过i2c信号进行控制.GC0308摄像头.对上电时序要求非常严格,一定要依据datasheet初始化摄像头. 本驱动使用的3.10内核,所 ...

  3. 飞思卡尔imx6开发板Linux下GPIO驱动

    控制GPIO_1_28的输出: #define MY_BOMB_GPIO       IMX_GPIO_NR(1, 28) 配置为输出方式: gpio_direction_output (MY_BOM ...

  4. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(2)- Boot配置(BOOT Pin/eFUSE)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Boot配置. 在上一篇文章 Boot简介 里痞子衡为大家介绍了Boot基本原理以及i.MXRT Bo ...

  5. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(3)- KBOOT配置(FOPT/BOOT Pin/BCA)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT配置. KBOOT是支持配置功能的,配置功能可分为两方面:一.芯片系统的启动配置:二.KBO ...

  6. 飞思卡尔开发板-迅为IMX6开兼容单核 双核 四核Plus开发板

    飞思卡尔开发硬件接口介绍: 核心板参数 尺寸:51mm*61mm CPU:Freescale Cortex-A9 四核 i.MX6Q,主频 1.2 GHz 内存:2GB DDR3 存储:16GB EM ...

  7. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU启动那些事(2)- Boot配置(BOOT Pin/eFUSE)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的Boot配置. 在上一篇文章 Boot简介 里痞子衡为大家介绍了Boot基本原理以及i.MXR ...

  8. 盘点飞思卡尔i.MX多媒体处理器前世今生 (转)

    现如今,移动处理器领域,大家关注最多的是德州仪器.高通.展讯.MTK,甚至包括Intel,但是请别忘记飞思卡尔,他的i.MX处理器已经发展到第六代. 那么我们今天就来盘点下i.MX的前世今生吧. i. ...

  9. 基于飞思卡尔i.MX 6Quad Sabrelite开发板的触摸屏调试

    1      概述 本次任务是在飞思卡尔i.MX 6Quqd Sabrelite开发板上调试触屏驱动,触屏芯片是Goodix的gt828芯片,触屏接口是I2C. 操作系统:android 4.0.4 ...

随机推荐

  1. 剑指Offer——完美+今日头条笔试题+知识点总结

    剑指Offer--完美+今日头条笔试题+知识点总结 情景回顾 时间:2016.9.28 16:00-18:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:完美世界笔试 ...

  2. Java进阶(四十二)Java中多线程使用匿名内部类的方式进行创建3种方式

    Java中多线程使用匿名内部类的方式进行创建3种方式 package cn.edu.ujn.demo; // 匿名内部类的格式: public class ThreadDemo { public st ...

  3. Hazelcast集群原理分析

    简介 hazelcast其中一个很重要的应用就是可以将多个应用服务器组成一个分布式环境的应用,形成一个cluster.这个cluster可以选举出一个master来对外工作.而cluster中的各台服 ...

  4. SQL Server 执行计划操作符详解(1)——断言(Assert)

    前言: 很多很多地方对于语句的优化,一般比较靠谱的回复即使--把执行计划发出来看看.当然那些只看语句就说如何如何改代码,我一直都是拒绝的,因为这种算是纯蒙.根据本人经验,大量的性能问题单纯从语句来看很 ...

  5. java.util.Arrays类详解(源码总结)

    概述 Arrays类位于java.util包下,是一个对数组操作的工具类.今天详细的看了看Arrays类的4千多行源码,现将Arrays类中的方法做一个总结(JDK版本:1.6.0_34).Array ...

  6. React Native开发工具Nuclide使用

    之前写RN的时候首选webstorm,这是之前做前端已经习惯的工具,其实RN开发官网推荐的是Nuclide工具, Nuclide是Fackbook专门为React开发IDE,今天也来尝试下,如果对we ...

  7. Android初级教程反射+AIDL+内容观察者监控黑名单号码代码模板

    对于想要拦截一些莫名的陌生号码,就需要电话拦截功能与删除其电话记录功能.拦截的主要业务逻辑,分别是在一个服务里面进行:1.注册电话监听:2.取消注册电话监听(当然注册于取消是在服务里面建立一个广播接收 ...

  8. 【Unity技巧】四元数(Quaternion)和旋转

    四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法--矩阵旋转和欧拉旋转. ...

  9. React Native入门教程2 -- 基本组件使用及样式

    在上一篇文章中,我们学会了如何搭建React Native的环境(React Native入门教程(笔记) 1 – 开发环境搭建),不知道你们是否搭建好了呢,如果还没有,那么快动起小手,来体验RN带给 ...

  10. Android用AlarmManager实现后台任务-android学习之旅(63)

    因为Timer不能唤醒cpu,所以会在省电的原因下失效,所以需要唤醒cpu在后台稳定化的执行任务,AlarmManager能够唤醒cpu 这个例子讲解了如何通过Service来在后他每一个小时执行.特 ...