- 拿到一款芯片,首先需要看的是datasheet
- 写得好的芯片手册,一般都会有个框图
- 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子模块等)
- GPIO子模块的寄存器在哪?那些位怎么访问?
- 地址:
- IOMUXC功能
- 对于每一个引脚都有一个muxc寄存器
把对应的bits设置成对应的值就可以工作于对应模式
- 对于各模块,我们主要关心的还是寄存器的操作
- GPIO模块
- 方向(输入输出)
- 输出数据(per bit to per pin)
- 读取输入的数据
- read mode
- write mode
- 对于每组GPIOx都有自己的寄存器(DR/PSR/GDIR等)
- 方向(输入输出)