zoukankan      html  css  js  c++  java
  • [dts]AM4378的dts中配置和数据手册映射关系

    最近在设置AM4378 GPIO的时候产生了困惑

    • 如何设置GPIO为output_pullup, output_pulldown, input_pullup, input_pulldown, high-impedency, output_disable, input_disable
    • 在dts中0x020 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* (B10) gpmc_ad8.gpio0[22] */是什么意思,和数据手册怎么对应

    首先在官方的TI PinMux Tool只有outpu/input的三种pull_up, pull_down, no_pull,也就是在dts中input和output只对应三种配置方式,NOPULL, PULLUP, PULLDOWN,并没有像飞思卡尔imx6那么多可配的属性, 这三个和MUX_MODE7定义在:

    include/dt-bindings/pinctrl/am43xx.h
    

     中可以看出, 在kernel里面关于上下拉确实没有高阻等配置方式,

    • PIN_OUTPUT即为PULL_DISABLE (1<<16)
    • PIN_OUTPUT_PULLUP为PULL_UP (1<<17)
    • PIN_OUTPUT_PULLDOWN为0
    • PIN_INPUT为INPUT_EN和PULL_DISABLE (1<<18 | 1<<16)
    • PIN_INPUT_PULLUP为INPUT_EN和INPUT_UP (1<<18 | 1<<17)
    • PIN_INPUT_PULLDOWN为INPUT_EN (1<<18) 

    接下来,0x020 (PIN_OUTPUT_PULLDOWN | MUX_MODE7)这个是在设置哪个寄存器呢,0x020是什么意思呢?

    查看手册AM437x TRM的Chapter2.Memory Map, CONTROL_MODULE 0x44E1_0000 0x44E1_FFFFChapter7.Control Module (800h CTRL_CONF_GPMC_AD0),这其中,0x44E1_0000+0x800之和就是GPIO配置的基地址,上面的0x020就是基于当前基地址的偏移,在Register地址映射能看出820h CTRL_CONF_GPMC_AD8,这个和之前dts中(B10) gpmc_ad8.gpio[0[22]可以对应起来

    也就能推断出来0x020 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) 这个脚本是在设置Control Module的寄存器,而非GPIO章节的寄存器,那么我们来看下这个寄存器的内容

     从上述可以看出来,0-3bit为Mux Mode,16bit为pullup/pulldown使能/失能,17bit为pullup/pulldown选择,18bit为Input使能

    这样从数据手册到kernel源码再到device tree整套就齐整了。

    另外上述提到的MODE0和MODE7到底代表什么属性?

    在Processor文档中,有如下pin说明

    为什么N4是mode0因为该引脚只有ddr_wen功能,A24引脚有8个功能,而Reset之后是Mode7,也就是表中的gpio2_25,普通gpio功能

  • 相关阅读:
    剖析C语言中a=a+++++a的无聊问题
    [转]精确到1%秒的单片机计时器汇编程序
    [转]学DSP、FPGA、ARM,哪个更有前途?
    【Java】Eclipse导出JAR包
    二维码生成器(支持历史记录点击和清空)
    移动端开发注意之一二
    localStorage实现按钮点击禁用
    JavaScript之查找元素
    扒拉扒拉table
    解惑之JavaScript
  • 原文地址:https://www.cnblogs.com/aaronLinux/p/9072742.html
Copyright © 2011-2022 走看看