zoukankan      html  css  js  c++  java
  • Hi35xx 通用GPIO 使用篇(板子3G电源控制脚说明)

    在一个嵌入式系统中使用最多的莫过于 通用输入输出 GPIO口。看到论坛中经常有朋友问海思为什么没有提供GPIO驱动。其实不然。

    在海思SDK  xxx/osdrv/tools/board_tools/reg-tools-1.0.0/source/tools/下 提供了himm的读写工具源码。
    你也可以根据himm的源码来写一个文件设备操作的驱动。毕竟轮子已经有了,我们就没必要再去造轮子了。

    这个工具是用来 配置海思寄存器的。当然可以稍加改造或者在应用直接使用来控制通用寄存器。

    根据海思提供资料 ,配置一个通用GPIO需要做如下工作。
    1.  参考“管脚复用控制寄存器”配置管脚的相应位,使能需要使用的 GPIO管脚功能。(这块大家自己去查复用寄存器表) 
    2.  配置寄存器 GPIO_DIR,选择 GPIO是作为输入还是输出。 
                GPIO用于输入:外部信号通过 GPIO 管脚送进来,此时可通过 GPIO_DATA 寄存器查看输入信号值。 
                 注意:输入的信号会同时送到和 GPIO复用的管脚上。 
                 GPIO用于输出:先向 GPIO_DATA 寄存器写入相应值后,再通过 GPIO输出写入值。 
                GPIO8 0x201D_0000 
                GPIO7 0x201C_0000 
                GPIO6 0x201B_0000 
                GPIO5 0x201A_0000 
                GPIO4 0x2019_0000 
                GPIO3 0x2018_0000 
                GPIO2 0x2017_0000 
                GPIO1 0x2016_0000 
                GPIO0 0x2015_0000 


    GPIOn对应的寄存器地址为:GPIOn基地址+该寄存器偏移地址。


    下面是比较关键的一个问题:我们知道对GPIO_DATA的操作可以控制输出,如果DIR方向是输入,可以读取这个地址的值 。那么怎么进行位操作呢?
    海思的手册给出如下解释。海思的DATA寄存器通过 一个10位的地址中的高8位进行位寻址。

    比如我要操作

    若地址为 0x3FC(0b11_1111_1100) ,则对 GPIO_DATA[7:0]这 8bit操作全部有效。 
    操作方式: 基地址+偏移地址   0x3FC就为便宜地址,如果对该地址的寄存器操作则对所有8个IO的控制有效。
    若地址为 0x200(0b10_0000_0000) ,则仅对 GPIO_DATA[7]的操作有效。 

    另一个关键寄存器 
    GPIO_DIR 方向寄存器 偏移地至 0x400

    下面举个栗子: (控制开发板3G电源)
    比如控制GPIO0_1  
    基地址  GPIO0_BASE 0x2015_0000
    GPIO_DIR    = GPIO0_BASE + OFFSET(0x400)   0:输入  1:输出
    则数据DATA寄存器地址  0b00_0000_1000  = 0x08

    对了别忘了复用: 

    复用的基地址   0x200F0000  复用偏移地址  0x09c    
    该寄存器 bit0 控制复用  0 为GPIO  1为功能。

    himm 0x200F009C  0
    himm 0x20150400  2
    himm 0x20150008  0xFF

    附图:

    <ignore_js_op> 
    <ignore_js_op> 
    3G_RST  =  RMII_TXD0     功能1 : GPIO0-2

    3G_Power = RMII_TXEN      功能1:    GPIO0-1

    复用寄存器基地址 0x200F 0000

    偏移地址
    <ignore_js_op>

  • 相关阅读:
    Educational Codeforces Round 67 D. Subarray Sorting
    2019 Multi-University Training Contest 5
    Educational Codeforces Round 69 (Rated for Div. 2) E. Culture Code
    Educational Codeforces Round 69 D. Yet Another Subarray Problem
    2019牛客暑期多校训练第六场
    Educational Codeforces Round 68 E. Count The Rectangles
    2019牛客多校第五场题解
    2019 Multi-University Training Contest 3
    2019 Multi-University Training Contest 2
    [模板] 三维偏序
  • 原文地址:https://www.cnblogs.com/cyyljw/p/6949807.html
Copyright © 2011-2022 走看看