• 拿到一款芯片,首先需要看的是datasheet
    • 写得好的芯片手册,一般都会有个框图
    • image.png
      • CCM是 Clock Controller Module (时钟控制模块)
      • 可以设置CCM中的某个寄存器来使能某一组GPIO,使能之后才能去操作GPIO寄存器
      • 引脚的数据来源不仅限于GPIO模块,这就需要去选择引脚的功能,设置IOMUXC寄存器
      • IOMUXC : IOMUX Controller,IO 复用控制器
      • 可以设置IOMUXC里的寄存器来选择某个引脚,每一个引脚会对应一个寄存器
      • IMX6ULL中,对于每个引脚有两个寄存器:MUX_CTL、PAD_CTL
        • MUX_CTL用来选择引脚功能(用于GPIO还是其他功能)
        • PAD_CTL设置引脚是否使用上拉/下拉电阻,使用多大的电阻等信息
      • 设置GPIO中的寄存器GDIR,让引脚工作于输入/输出模式
        • 对于输出模式,要把值写入DR寄存器中,就可以设置引脚高低电平
        • 对于输入模式,可以去读PSR寄存器,就可以得到引脚当前状态
    • IMX6UL有 5 组 GPIO(GPIO1~GPIO5),每组引脚最多有 32 个,但是可能实际上并没有那么多。

    GPIO1 有 32 个引脚:GPIO1_IO0~GPIO1_IO31;
    GPIO2 有 22 个引脚:GPIO2_IO0~GPIO2_IO21;
    GPIO3 有 29 个引脚:GPIO3_IO0~GPIO3_IO28;
    GPIO4 有 29 个引脚:GPIO4_IO0~GPIO4_IO28;
    GPIO5 有 12 个引脚:GPIO5_IO0~GPIO5_IO11;

    • 在CCM中使用哪个寄存器来控制哪个GPIO呢?
      • 可以看芯片手册
      • 找到CCM的章节,CCM模块中有各种子模块(GPIO子模块等)
      • image.png
      • GPIO子模块的寄存器在哪?那些位怎么访问?
        • image.png
        • 地址:image.png
        • image.png
        • image.png
    • IOMUXC功能
      • image.png
      • 对于每一个引脚都有一个muxc寄存器
      • image.png
      • image.png
      • image.png把对应的bits设置成对应的值就可以工作于对应模式
    • 对于各模块,我们主要关心的还是寄存器的操作
    • GPIO模块
      • 方向(输入输出)image.png
      • 输出数据(per bit to per pin)image.png
      • 读取输入的数据image.png
      • read mode
        • image.png
        • image.png
      • write mode
        • image.png
        • image.png
      • 对于每组GPIOx都有自己的寄存器(DR/PSR/GDIR等)