/*******************************************************************************
* 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. Intel Edison的那些事:修改Edison的HTTP服务的页面

    Intel Edison配置好之后,按住PWR键2-7秒(4秒恰到好处),就可以进入AP热点模式(此时,Arduino扩展板上的灯不停闪烁),可以将笔记本接入Edison的热点,然后在浏览器中访问“h ...

  2. Linux 启动直接进入 console,

    我的电脑上有两块显卡,上次fedora更新后,自动安装了nvidia的驱动, 然后悲剧发生了.再也不能够正常进行图形界面了.所以需要进入CONSOLE. 1. 当系统启动时,停止grub menu自动 ...

  3. IOS game

    App Store真是个金矿,即使是红海一片,黑马也依旧不少,前有愤怒的小鸟,现在出了个Flappy Bird,虽然是去年推出的,但最近爆红App Store和Google Play,越南河内的独立游 ...

  4. 【socket】一分钟理清 socket udpsocket tcpsocket tcplistener TCPClient和 UDPClient

    socket 套接字接口是各种语言tcp udp的网络操作的基础. 直接用socket 对象开发 可以选择 udpsocket  或者 tcpsocket ,两者在使用上仅一些方法和参数不同,所有的底 ...

  5. UIView局部点击(转)

      今天上班遇到一种情况,需要局部响应点击事件,比如在一个UIImageView中设置一个小圆圈图片,要求点击圆圈里面不响应点击,点击小圆圈外面的部分响应点击.可以通过重写hitTest:withEv ...

  6. Telerik_2012_Q3 (已破解)全套下载链接

    1.Telerik_OpenAccess_ORM_2012_3_1012_SDK.zip (暂未提供下载) 2. Telerik_OpenAccess_ORM_2012_3_1012.zip 3. T ...

  7. bnuoj 29373 Key Logger(模拟双向队列)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=29373 [题意]:模拟光标输入 [题解]:用双向列表模拟实现,这里用其他模拟会超时,注意内存的释放 ...

  8. 1034: [ZJOI2008]泡泡堂BNB - BZOJ

    Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵 ...

  9. Maven 执行Javadoc时控制台输出乱码问题

    1.0  Maven 执行Javadoc时控制台输出乱码问题 问题描述 最近项目中使用maven-javadoc-plugin生成javadoc时,myEclipse控制台乱码. 插件配置 问题分析 ...

  10. Extjs-4.2.1(二)——使用Ext.define自定义类

    鸣谢:http://www.cnblogs.com/youring2/archive/2013/08/22/3274135.html --------------------------------- ...