IMX6 GPIO的定义

比如定义PAD_GPIO_19作为一个GPIO_4_5使用:

#define  MX6Q_PAD_GPIO_19__GPIO_4_5     (_MX6Q_PAD_GPIO_19__GPIO_4_5 | MUX_PAD_CTRL(NO_PAD_CTRL))

看上面的宏:

_MX6Q_PAD_GPIO_19__GPIO_4_5

它的定义是:

#define _MX6Q_PAD_GPIO_19__GPIO_4_5      IOMUX_PAD(0x0624, 0x0254, 5, 0x0000, 0, 0)

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

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

_pad_ctrl_ofs      控制寄存器的偏移地址(16进制) 该地址定义PAD是cmos还是schimitt输入,上拉还是下拉,阻抗多少om等功能,请查看寄存器;

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

_mux_mode      MUX模式,bit0~3,范围0~7,ALT的值,0~7,就是选引脚是gpio还是其他功能,一个pad是个确确实实能摸到的芯片的管脚,而这管脚有多种配置,实现不同的功能

_sel_input_ofs     SELECT_INPUT寄存器偏移地址(16进制)  当ALT的选择使得PAD作为其他PAD也能实现的功能时,这个寄存器才有用。比如关键PIN35\PIN45都能做UART_TXD,这个时候,就要在这个寄存器里,对_sel_input,进行设置,具体查看寄存器。

_pad_ctrl  一般取值为0(好吧,暂不追究)

因此一个PAD就可以出现下面这么多种配置:

  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

MUX_PAD_CTRL(NO_PAD_CTRL)

这个好像是一些上拉或下拉,还有电阻的控制。具体还待研究!

参照:

http://blog.csdn.net/xnwyd/article/details/9042159

谢谢!

时间: 2024-10-27 06:32:24

IMX6 GPIO的定义的相关文章

香蕉派和树莓派的不同点及GPIO引脚定义

今天淘宝买的香蕉派PVC外壳到了,把外壳装好,这个PVC外壳还是挺结实的,还带了个小风扇.香蕉派并不是一个简单的"克隆"树莓派的产品,香蕉派比树莓派有很多硬件及性能上的区别,最大的不同点在以下几个方面. 1. 所使用的芯片完全不同. 树莓派使用的是Broadcom ARM11内核, 香蕉派使用的是全智(Allwinner) ARM Cortex-A7 双核以CPU.  不同的ARM 架构造成了主要的不同点.  Banana Pi将在ARM V7架构上有更多的特性功能 ,并且能兼容ARM

RK3288的gpio设置

http://www.360doc.com/content/14/1227/18/14351252_436191812.shtml 目录 [隐藏] 1 简介 2 使用 2.1 输入输出 2.2 复用 简介 GPIO, 全称 General-Purpose Input/Output(通用输入输出),是一种软件运行期间能够动态配置和控制的通用引脚. RK3288 有 9 组 GPIO bank: GPIO0,GPIO1, ..., GPIO8.每组又以 A0~A7, B0~B7, C0~C7, D0

【智能家居】Raspberry Pi GPIO接口篇

General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,利用工业标准I2C.SMBus或SPI接口简化了I/O口的扩展.当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能. 本篇没啥可讲的,主要是贴图!但本文很重要第一是为后面文章做铺垫,第二你会经常来查GPIO接口!务必收藏好 :) 一.Raspberry Pi 全家福 我很佩服国外这个小伙伴,收集的这么全,居然还要出钱收购唯一

STM32之GPIO端口位带操作

#ifndef __SYS_H #define __SYS_H #include "stm32f10x.h" //位带操作 //把“位带地址+位序号”转换别名地址宏 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) //把该地址转换成一个指针 #define MEM_ADDR(addr) *((volatil

迅为4412开发板Linux驱动教程之GPIO的初始化

视频下载地址:http://pan.baidu.com/s/1c06oiti GPIO的初始化 ? 在内核源码目录下使用命令"ls drivers/gpio/*.o",可以看到"gpio-exynos4"被编译进了内核 – 生成.o文件代表最终被编译进了内核 – 除了menuconfig配置文件,还可以通过.o文件来判定该文件是否编译进了 内核 ? 在"gpio-exynos4.c"文件最下面一行 – core_initcall(exynos4_

4412 GPIO初始化

GPIO的初始化 ? 在内核源码目录下使用命令"ls drivers/gpio/*.o",可以看到"gpioexynos4"被编译进了内核.通过搜索*.o文件,可以知道内核编译内哪些文件.针对的看可以简化很多.– 生成.o文件代表最终被编译进了内核– 除了menuconfig配置文件,还可以通过.o文件来判定该文件是否编译进了 ls drivers/gpio/*.o 内核 ? 在"gpio-exynos4.c"文件最下面一行– core_init

4、树莓派3B+的GPIO

GPIO(General Purpose I/O Ports)意思为通用输入/输出端口. 可以在终端重直接查看GPIO的定义. 在终端中直接输入 gpio readall 原文地址:https://www.cnblogs.com/trilobita/p/10505648.html

【玩转开源】BananaPi R2——移植RPi.GPIO 到 R2

1. 首先给大家介绍一下什么是RPi.GPIO. 简单去讲,RPi.GPIO就是一个运行在树莓派开发板上可以通过Python去控制GPIO的一个中间件. 现在我这边做了一个基础功能的移植,接下来大家可以跟着我去学习一下RPi.GPIO是如何通过Python去实现控制开发板上的GPIO的. 2. 看一下效果图: 2.1 硬件实物运行效果 2.2 执行Python脚本打印的log 3. 那么RPi.GPIO在R2上是如何使用的呢? 3.1 首先在R2上面运行一个Ubuntu镜像,然后下载代码:git

linux并行与竞态

内核态的竞态与并行 中断屏蔽: local_irq_save(flags) local_irq_restore(flags) Telnet 192.168.x.x登录开发板 #if 0 ...... #endif 原子操作 原子操作指的是在执行过程中不会被别的代码所中断的操作. 分为 位 和 整型变量 两类原子操作. void atomic_set(atomic_t *v, int i);   //设置原子变量v的值为i atomic_t v = ATOMIC_INIT(0);