/*******************************************************************************
* I.MX6 U-boot GPIO hacking
* 说明:
* 本文主要记录I.MX6 U-boot是如何设置GPIO口输入输出的,主要是考虑到这个阶段
* 并没有像Linux内核中的gpio_request一系列函数使用。
*
* 2016-3-7 深圳 南山平山村 曾剑锋
******************************************************************************/ cat bootable/bootloader/uboot-imx/board/freescale/mx6q_sabresd/mx6q_sabresd.c
......
#ifdef CONFIG_LCD
void lcd_enable(void)
{
......
mxc_iomux_v3_setup_pad(MX6DL_PAD_SD1_DAT2__GPIO_1_19); ---+
reg = readl(GPIO1_BASE_ADDR + GPIO_GDIR); ---*---------------+
reg |= ( << ); | |
writel(reg, GPIO1_BASE_ADDR + GPIO_GDIR); | |
| |
reg = readl(GPIO1_BASE_ADDR + GPIO_DR); | |
reg &= ~( << ); | |
writel(reg, GPIO1_BASE_ADDR + GPIO_DR); | |
...... | |
} | |
...... | |
| |
#define MX6DL_PAD_SD1_DAT2__GPIO_1_19 <---+ \ |
IOMUX_PAD(0x06D4, 0x02EC, , 0x0000, , NO_PAD_CTRL) | |
| |
/* | |
* configures a single pad in the iomuxer | |
*/ | |
int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad) <---+ |
{ |
u32 mux_ctrl_ofs = (pad & MUX_CTRL_OFS_MASK) >> MUX_CTRL_OFS_SHIFT; |
u32 mux_mode = (pad & MUX_MODE_MASK) >> MUX_MODE_SHIFT; |
u32 sel_input_ofs = (pad & MUX_SEL_INPUT_OFS_MASK) >> MUX_SEL_INPUT_OFS_SHIFT; |
u32 sel_input = (pad & MUX_SEL_INPUT_MASK) >> MUX_SEL_INPUT_SHIFT; |
u32 pad_ctrl_ofs = (pad & MUX_PAD_CTRL_OFS_MASK) >> MUX_PAD_CTRL_OFS_SHIFT; |
u32 pad_ctrl = (pad & MUX_PAD_CTRL_MASK) >> MUX_PAD_CTRL_SHIFT; |
|
if (mux_ctrl_ofs) |
__raw_writel(mux_mode, base + mux_ctrl_ofs); |
|
if (sel_input_ofs) |
__raw_writel(sel_input, base + sel_input_ofs); |
|
if (!(pad_ctrl & NO_PAD_CTRL) && pad_ctrl_ofs) |
__raw_writel(pad_ctrl, base + pad_ctrl_ofs); |
|
return ; |
} |
EXPORT_SYMBOL(mxc_iomux_v3_setup_pad); |
|
|
/** |
* 1. 参考文档: |
* i.MX 6Dual/6Quad Multimedia Applications Processor Reference Manual |
* 2. 30.4 Programmable Registers |
* +------------------------------------------------------+ |
* | GPIO memory map | |
* +-----------+-------------------------------+----------+ |
* | Absolute | Register name | Section/ | |
* | address | | page | |
* | (hex) | | | |
* +-----------+-------------------------------+----------+ |
* | 0209_C000 | GPIO data register (GPIO1_DR) | 30.4.1/ | |
* | | | | |
* +-----------+-------------------------------+----------+ |
* 3. GPIO1_BASE_ADDR = 0x1C000 + 0x80000 + 0x02000000 |
* GPIO1_BASE_ADDR = 0x0209C000 |
*/ |
#define GPIO1_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x1C000) <--------+
#define AIPS1_OFF_BASE_ADDR (ATZ1_BASE_ADDR + 0x80000) |
#define ATZ1_BASE_ADDR AIPS1_ARB_BASE_ADDR |
#define AIPS1_ARB_BASE_ADDR 0x02000000 |
|
#define GPIO_GDIR 0x04 <--------+
#define GPIO_DR 0x00

I.MX6 U-boot GPIO hacking的更多相关文章

  1. i.MX6 设备树 GPIO 默认值

    /********************************************************************** * i.MX6 设备树 GPIO 默认值 * 说明: * ...

  2. I.MX6 U-boot lvds display hacking

    /*********************************************************************************** * I.MX6 U-boot ...

  3. I.MX6 Power off register hacking

    /*********************************************************************** * I.MX6 Power off register ...

  4. I.MX6 android BatteryService jni hacking

    /**************************************************************************** * I.MX6 android Batter ...

  5. I.MX6 Ar8031 device register hacking

    /***************************************************************************** * I.MX6 Ar8031 device ...

  6. I.MX6 PWM buzzer driver hacking with Demo test

    /***************************************************************************** * I.MX6 PWM buzzer dr ...

  7. I.MX6 change boot partition 1 to User area

    /************************************************************************************ * I.MX6 change ...

  8. I.MX6 gpio-keys driver hacking

    /**************************************************************************** * I.MX6 gpio-keys driv ...

  9. I.MX6 ar1020 SPI device driver hacking

    /************************************************************************************ * I.MX6 ar1020 ...

随机推荐

  1. The connection to adb is down

    有一周时间没有打开ADT了,最近想为我的APP增加下些新的功能,但是在编译的时候出现了一个奇怪问题 [2013-10-18 14:43:50 - zzbus] Android Launch![2013 ...

  2. Keil V4.72升级到V5.1X之后

    问题描述 Keil V4.72升级到V5.1x之后,原来编译通过的工程,出现了如下错误: .\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\STM32f ...

  3. javascript面向对象思想2

    上篇说到面向对象可以帮我们梳理页面的逻辑的文章(http://www.cnblogs.com/hetaojs/p/6024013.html),很多朋友看了说我这种写法是初级的面向对象小儿科,确实是初级 ...

  4. MyEclipse 8.5配置Tomcat7.0

    MyEclipse 8.5配置默认没有Tomcat7.0, 如果想使用怎么办.? window>>Preferences>>MyEclipse Enterprise Workb ...

  5. 一个有意思的js实例,你会吗??[原创]

    首先,看看下面一个js例子,你觉得会输出什么呢? function fn(a){ a(); function a(){ console.log(2); } var a = function(){ co ...

  6. java和php实现RSA加密互通-b

    java和PHP RSA加密实现互通 1:通过openssl 生成公钥和密钥文件(linux) (1)  生产私钥文件命令 openssl genrsa -out rsa_private_key.pe ...

  7. spring的三种注解管理器

    1.依赖注入的注解解析器 在配置文件中; * xsd xmlns:context="http://www.springframework.org/schema/context" h ...

  8. A geometric interpretation of the covariance matrix

    A geometric interpretation of the covariance matrix Contents [hide] 1 Introduction 2 Eigendecomposit ...

  9. PAT-乙级-1015. 德才论 (25)

    1015. 德才论 (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Li 宋代史学家司马光在<资治通鉴&g ...

  10. 让wordpress投稿作者在后台只看到自己的文章

    wordpress支持多作者撰写,让更多的人参与网站内容的创建是个不错的想法,UGC(User-generated content)使网站主题更丰富,不同的内容吸引不同的受众,一个好的网站应该多产生U ...