I.MX6 U-boot GPIO hacking
/*******************************************************************************
* 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的更多相关文章
- i.MX6 设备树 GPIO 默认值
/********************************************************************** * i.MX6 设备树 GPIO 默认值 * 说明: * ...
- I.MX6 U-boot lvds display hacking
/*********************************************************************************** * I.MX6 U-boot ...
- I.MX6 Power off register hacking
/*********************************************************************** * I.MX6 Power off register ...
- I.MX6 android BatteryService jni hacking
/**************************************************************************** * I.MX6 android Batter ...
- I.MX6 Ar8031 device register hacking
/***************************************************************************** * I.MX6 Ar8031 device ...
- I.MX6 PWM buzzer driver hacking with Demo test
/***************************************************************************** * I.MX6 PWM buzzer dr ...
- I.MX6 change boot partition 1 to User area
/************************************************************************************ * I.MX6 change ...
- I.MX6 gpio-keys driver hacking
/**************************************************************************** * I.MX6 gpio-keys driv ...
- I.MX6 ar1020 SPI device driver hacking
/************************************************************************************ * I.MX6 ar1020 ...
随机推荐
- 编码错误设置错误报 "SyntaxError: Non-ASCII character '/xe6' "
无意中碰到键盘导致一段处理中文拼音的 python 代码跑起来报了个错 “SyntaxError: Non-ASCII character ‘/xe6' " 看了下是注释 # coding: ...
- [SQL SERVER系列]之常用函数和开窗函数介绍及实例
本文主要介绍SQL SERVER数据库中一些常用的系统函数及其SQL SERVER 2005以上支持的开窗函数. 1.常用函数 --从字符串右边截取指定字符数 select RIGHT('HELLO' ...
- C#的历史及IDE总结
原Borland公司的首席研发设计师安德斯·海爾斯伯格(Anders Hejlsberg)在微軟開發了Visual J++ 1.0,很快的Visual J++由1.1版本升級到6.0版.SU ...
- js验证中英文
// 验证中英文 function check_en_ch(_value){ var reg_en_num = /^[0-9A-Za-z\'\"\,\.\!\?\:\s|“|”|‘|’|!| ...
- PAT-乙级-1014. 福尔摩斯的约会 (20)
1014. 福尔摩斯的约会 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大侦探福尔摩斯接到一张奇怪的 ...
- The 6th Zhejiang Provincial Collegiate Programming Contest->ProblemB:Light Bulb
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3203 题意:求影子的最长长度L; 当灯,人头和墙角成一条直线时(假设此时人 ...
- HTML可编辑下拉框
<div style="position:relative;"> <select style="width:120px;" onchang ...
- c++ ANSI、UNICODE、UTF8互转
static std::wstring MBytesToWString(const char* lpcszString); static std::string WStringToMBy ...
- perl杂项
perl -pi -e 's|googleapis.com|useso.com|g' `find ./ -type f` yingc@yingc:~/gcyin/test/thirdparty/ffm ...
- C++ eof()函数相关应用技巧分享
C++编程语言中的很多功能在我们的实际应用中起着非常大的作用.比如在对文件文本的操作上,就可以用多种方式来实现.在这里我们介绍的C++ eof()函数就是其中一个比较常用的基本函数. 在使用C/C++ ...