LINUX-I.MX6U从零开始之1.0-点个灯

【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0-尝鲜版第八章,感谢原子哥。

目录

        • 一,I.MX6U的IO配置
            • 1.0 配置IO为GPIO
            • 1.1配置为GPIO后的进一步配置
        • 二,I.MX6U的时钟配置
        • 三,I.MX6U的配置流程

一,I.MX6U的IO配置

I.MX6UL 参考手册的第 30 章“Chapter 30: IOMUX Controller(IOMUXC)”
根据 IO 功能命名,GPIO只有GPIO1_IO00~GPIO_IO09,其他为复用IO。
I.MX6U 的 GPIO 一共有 5 组:GPIO1、GPIO2、GPIO3、GPIO4 和 GPIO5,其中 GPIO1 有 32 个 IO,GPIO2 有 22 个 IO,GPIO3 有 29 个 IO、GPIO4 有 29 个 IO,GPIO5最少,只有 12 个 IO,这样一共有 124 个 GPIO。

1.0 配置IO为GPIO
  1. 寄存器“IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00”(配置IO功能)
    地址为 0X020E005C
    可复用9个功能,ALT5为 GPIO1_IO00(GPIO
    LINUX-I.MX6U从零开始之1.0-点个灯_第1张图片
    2.寄存器"IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO00”(配置IO速度等属性的)
    存器地址为 0X020E02E8
    LINUX-I.MX6U从零开始之1.0-点个灯_第2张图片
    HYS(bit16):使能迟滞比较器,当 IO 作为输入功能的时候有效,设置输入接收器的施密特触发器是否使能。
    PUS(bit15:14) :设置上下拉电阻的
    LINUX-I.MX6U从零开始之1.0-点个灯_第3张图片
    PUE(bit13) :当 IO 作为输入的时候,设置 IO 使用上下拉还是状态保持器。
    PKE(bit12) :用来使能或者禁止上下拉/状态保持器功能
    ODE(bit11):当 IO 作为输出的时候,用来禁止或者使能开路输出
    SPEED(bit7:6) :当 IO 用作输出的时候,此位用来设置 IO 速度
    LINUX-I.MX6U从零开始之1.0-点个灯_第4张图片
    DSE(bit5:3):当 IO 用作输出的时候用来设置 IO 的驱动能力
    LINUX-I.MX6U从零开始之1.0-点个灯_第5张图片
    SRE(bit0) :设置压摆率,压摆率就是 IO 电平跳变所需要的时间.
1.1配置为GPIO后的进一步配置

LINUX-I.MX6U从零开始之1.0-点个灯_第6张图片
IO配置为GPIO需要8个寄存器DR、GDIR、PSR、ICR1、ICR2、EDGE_SEL、IMR 和 ISR。

  1. DR 寄存器,数据寄存器
    GPIO 被配置为输出功能以后,向指定的位写入数据那么相应的 IO 就会输出相应的高低电平
    比如,要设置 GPIO1_IO00 输出高电平,那么就应该设置 GPIO1.DR=1。
    GPIO被配置为输入模式以后,此寄存器就保存着对应 IO 的电平值,每个位对对应一个 GPIO
    比如,当 GPIO1_IO00 这个引脚接地的话,那么 GPIO1.DR 的 bit0 就是 0。
  2. GDIR 寄存器,方向寄存器
    用来设置某个 GPIO 的工作方向的,即输入/输出
  3. PSR 寄存器, GPIO 状态寄存器
    一个 GPIO 对应一个位,读取相应的位即可获取对应的 GPIO 的状态,也就是 GPIO 的高低电平值
  4. ICR1和ICR2寄存器,都是中断控制寄存器
    ICR1用于配置低16个GPIO,ICR2 用于配置高 16 个 GPIO
    LINUX-I.MX6U从零开始之1.0-点个灯_第7张图片
  5. IMR 寄存器,中断屏蔽寄存器
    用来控制 GPIO 的中断禁止和使能
  6. ISR,ISR 是中断状态寄存器
    读取 ISR 寄存器来判断 GPIO 中断是否发生,相当于 ISR 中的这些位就是中断标志位。当我们处理完中断以后,必须清除中断标志位,清除方法就是向 ISR 中相应的位写 1,也就是写 1 清零。
  7. EDGE_SEL 寄存器,边沿选择寄存器
    设置边沿中断,这个寄存器会覆盖 ICR1 和 ICR2 的设置

二,I.MX6U的时钟配置

I.MX6UL 参考手册的第 18 章“Chapter 18: Clock Controller Module(CCM)”
CMM 有 CCM_CCGR0~CCM_CCGR6 这 7 个寄存器,这 7 个寄存器控制着 I.MX6U 的所有外设时钟开关
以CCM_CCGR0为例:
CCM_CCGR0 是个 32 位寄存器,其中每 2 位控制一个外设的时钟,比如 bit31:30 控制着GPIO2 的外设时钟,两个位就有 4 种操作方式。
LINUX-I.MX6U从零开始之1.0-点个灯_第8张图片
打开 GPIO2 的外设时钟: CCM_CCGR0=3 << 30;
关闭GPIO2 的外设时钟,bit31 和 bit30 都 为 0。

三,I.MX6U的配置流程

1 、使能 GPIO1 时钟: CCM_CCGR3
2 、设置 GPIO1_IO03 的复用功能:IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03
3 、配置 GPIO1_IO03 :IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03
4 、设置 GPIO
5 、控制 GPIO 的 的 输出电平

你可能感兴趣的:(linux)