/****************************************************************************************
* OK335xS U-boot GPIO control hacking
* 声明:
* 本文主要是跟踪U-boot中如何设置GPIO口电平。
*
* 2015-9-26 晴 深圳 南山平山村 曾剑锋
***************************************************************************************/ cat board/forlinx/ok335x/evm.c
int board_init(void)
{
int c = ;
/* Configure the i2c0 pin mux */
enable_i2c0_pin_mux(); i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); board_id = GP_BOARD;
profile = ; /* profile 0 is internally considered as 1 */
daughter_board_connected = ; configure_evm_pin_mux(board_id, header.version, profile, daughter_board_connected); --+
|
/** |
* 1. 参考资料: |
* AM335x ARM Cortex-A8 Microprocessors (MPUs) Technical Reference Manual (Rev. H) |
* |
* 2. ARM Cortex-A8 Memory Map |
* Table 2-2. L4_WKUP Peripheral Memory Map (continued) |
* +-------------+---------------------+-------------------+------+----------------+ |
* | Region Name | Start Address (hex) | End Address (hex) | Size | Description | |
* +-------------+---------------------+-------------------+------+----------------+ |
* | GPIO0 | 0x44E0_7000 | 0x44E0_7FFF | 4KB | GPIO Registers | |
* +-------------+---------------------+-------------------+------+----------------+ |
* |
* 3. GPIO Registers(4068 页) |
* Table 25-5. GPIO REGISTERS |
* +--------+-------------------+---------------+-------------------+ |
* | Offset | Acronym | Register Name | Section | |
* +--------+-------------------+---------------+-------------------+ |
* | 134h | GPIO_OE | | Section 25.4.1.16 |<-+ |
* +--------+-------------------+---------------+-------------------+ | |
* | 190h | GPIO_CLEARDATAOUT | | Section 25.4.1.25 | |<-+ |
* +--------+-------------------+---------------+-------------------+ | | |
* | 194h | GPIO_SETDATAOUT | | Section 25.4.1.26 | | |<-+ |
* +--------+-------------------+---------------+-------------------+ | | | |
*/ | | | |
/* set gpio0_7 gpio0_12 gpio0_22 gpio0_23 output mode */ | | | |
__raw_writel(~((<<) | (<<) | (<<) |(<<)), 0x44E07134);-------+ | | |
/* set gpio0_7 12 19 23 low */ | | |
__raw_writel((<<) | (<<) | (<<), 0x44E07190); ----------+ | |
/* set gpio0_22 high to height */ | |
__raw_writel( (<<) | (<<), 0x44E07194); -------------+ |
|
|
#ifndef CONFIG_SPL_BUILD |
board_evm_init(); |
#endif |
gpmc_init(); |
|
return ; |
} +-------------------------------------------------------------------------+
V
void configure_evm_pin_mux(unsigned char dghtr_brd_id, char version[], unsigned short
profile, unsigned int daughter_board_flag)
{
if (dghtr_brd_id > BASE_BOARD)
return; set_evm_pin_mux(am335x_evm_pin_mux[], profile,daughter_board_flag);
} |
V
static struct evm_pin_mux *am335x_evm_pin_mux[] = {
general_purpose_evm_pin_mux, ----------------------+
}; |
|
/* |
* Update the structure with the modules present in the general purpose |
* board and the profiles in which the modules are present. |
* If the module is physically present but if it is not available |
* in any of the profile, then do not update it. |
* For eg, nand is avialable only in the profiles 0 and 1, whereas |
* UART0 is available in all the profiles. |
*/ |
static struct evm_pin_mux general_purpose_evm_pin_mux[] = { <----------+
{i2c1_pin_mux, PROFILE_ALL & ~PROFILE_2 & ~PROFILE_4, DEV_ON_BASEBOARD}, #ifdef CONFIG_NAND
{nand_pin_mux, PROFILE_ALL & ~PROFILE_2 & ~PROFILE_3, DEV_ON_DGHTR_BRD},
#endif #ifndef CONFIG_NO_ETH
{mii1_pin_mux, PROFILE_ALL, DEV_ON_BASEBOARD},
#endif #ifdef CONFIG_MMC
{mmc0_pin_mux, PROFILE_ALL, DEV_ON_BASEBOARD},
#endif
{backlight_pin_mux, PROFILE_ALL, DEV_ON_BASEBOARD}, -----+
{maxttl_model_pin_mux, PROFILE_ALL, DEV_ON_BASEBOARD}, |
{lcd_pin_mux, PROFILE_ALL, DEV_ON_BASEBOARD}, |
{uart0_pin_mux, PROFILE_ALL, DEV_ON_BASEBOARD}, |
{}, |
}; |
|
static struct module_pin_mux backlight_pin_mux[] = { <----+
{OFFSET(ecap0_in_pwm0_out), MODE() | PULLUP_EN | RXACTIVE}, /* GPIO0_7 */
{OFFSET(uart1_ctsn), MODE() | PULLUDDIS | RXACTIVE}, /* GPIO0_ 12 */
{-},
};

OK335xS U-boot GPIO control hacking的更多相关文章

  1. OK335xS 网络连接打印信息 hacking

    /*********************************************************************** * OK335xS 网络连接打印信息 hacking ...

  2. OK335xS GPMC nand device register hacking

    /********************************************************************************* * OK335xS GPMC na ...

  3. OK335xS pwm buzzer Linux driver hacking

    /**************************************************************************** * OK335xS pwm buzzer L ...

  4. Raspberry Pi 3 --- GPIO control

    Before input 'gpio readall', need install wiringPi download "wiringPi":git clone git://git ...

  5. Linux GPIO 注册和应用

    Linux GPIO 注册和应用 Linux Kernel, GPIO, ARM 于Linux kernel代码.经常使用 GPIO 作为一个特殊的信号,如芯片片选信号. GPIO 功能应用,我们经常 ...

  6. Linux-3.0.8中基于S5PV210的GPIO模块代码追踪和分析

    编写按键驱动时,想知道内核是如何管理GPIO的,所以开始追踪代码,中间走了一些弯路,现记录于此. 追踪代码之前,我猜测:第一,这部分代码应该在系统set up阶段执行:第二,GPIO的代码应该在mac ...

  7. bcm53344 gpio驱动分析

    /********************************************************************************* * 1.查看代码是在vim下,使用 ...

  8. linux下GPIO的用户层操作(sysfs)

    linux的GPIO通过sysfs为用户提供服务,下面是linux kernel里的说明文档,学习一下. GPIO Sysfs Interface for Userspace ============ ...

  9. imx6 gpio irq

    /***************************************************************** * gpio irq * * 一直以来都没了解过gpio的irq, ...

随机推荐

  1. Python day16 tag式整体退出技巧

    在写一些服务器时,往往会多层嵌套循环,可利用tag变量实现整体退出功能,代码: tag=True while tag: print('level1') choice=input('level1> ...

  2. 使用better-scroll遇到的问题

    项目中想给侧边栏添加一个滚动效果,用better-scroll帮助实现,引入better-scroll后,给外层最大盒子添加了<aside ref="asideMenu"&g ...

  3. QString 编码转换

    参考网址:http://blog.csdn.net/lfw19891101/article/details/6641785 (网页保存于:百度云CodeSkill33 --> 全部文件 > ...

  4. javascript对象使用总结

    javascript对象使用总结 一.总结 一句话总结:js对象的主要知识点是创建对象和继承,并且创建对象和继承的方法都是逐步层层递进的 创建对象 继承 原型 创建对象 1 <script> ...

  5. WPF几种高级绑定

    (1)Binding  + RelativeSource + AncestorType 模式  , 根据关联源所指定的类型,可动态绑定指定类型的Path属性(Path可以省略)(PS:动态指父级在运行 ...

  6. 20170601xlVBA正则表达式提取体检数据

    Public Sub GetFirst() GetDataFromWord "初检" End Sub Public Sub GetDataFromWord(ByVal SheetN ...

  7. 3-18 关于namespace,双冒号::的用法; SelfYield.

    关于namespace,双冒号::的用法. 防止引用多个模块在一个文件/类中,有重名的对象.::可以调用类的类方法,和常量. class Foo   BAR = "hello"   ...

  8. h1026 BFS(打印x与路径)

    题意: Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  9. CISC, RISC 探究

    iPhone Simulator  Intel iPhone  ARM 区别很大, Intel目前的处理器主要为IA架构, IA-32即俗称x86,包括桌面处理器系列(赛扬,奔腾,酷睿等)以及服务器处 ...

  10. OAF Sample Code(转)

    原文地址: OAF Sample Code