点灯
- I.MX6U GPIO 详解
-
- IO 命名
- I.MX6U IO 复用
- I.MX6U IO 配置
- I.MX6U GPIO 配置
- I.MX6U GPIO 时钟使能
- 硬件原理分析
- 实验程序编写
-
- 汇编版本
- C语言版本
- 编译下载验证
-
- 编译代码
- 创建 Makefile 文件
-
- 汇编版本
- C语言版本
- 代码烧写
- 代码验证
I.MX6U GPIO 详解
IO 命名
通过芯片手册可以发现规律
“XX_XX”表示各种GPIO名。比如:GPIO1_IO00~GPIO1_IO09、UART1_TX_DATA、 JTAG_MOD等。
I.MX6U 的 GPIO 一共有 5 组: GPIO1、 GPIO2、 GPIO3、 GPIO4 和 GPIO5
GPIOx | Pin num |
---|---|
GPIO1 | 32 |
GPIO2 | 22 |
GPIO3 | 29 |
GPIO4 | 29 |
GPIO5 | 12 |
total | 124 |
I.MX6U IO 复用
I.MX6U 的其它 IO 也是可以复用为 GPIO 功能。
每个 IO 能复用什么外设的话可以直接查阅 《IMX6UL 参考手册》 的第 4 章,设置某个 IO 的复用功能的话就需要查阅 第 30 章。
比如IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00,查看IO复用:
压摆率就是 IO 电平跳变所需要的时间,比如从 0 到 1 需要多少时间,时间越小波形就越陡,说明压摆率越高;反之,时间越多波形就越缓,压摆率就越低。如果你的产品要过 EMC 的话那就可以使用小的压摆率,因为波形缓和,如果你当前所使用的 IO做高速通信的话就可以使用高压摆率。
I.MX6U GPIO 配置
I.MX6U 的 GPIO 请参考《IMX6UL 参考手册》的第 26章
IMR 是中断屏蔽寄存器( 32 位),使能某个 GPIO 的中断,那么设置相应的位为 1 ,反之,如果要禁止中断,那么就设置相应的位为 0 即可。
ISR 是中断状态寄存器( 32 位),某个 GPIO 的中断发生,那么
ISR 中相应的位就会被置 1。清除方法就是向 ISR 中相应的位写 1。
EDGE_SEL 是边沿选择寄存器( 32 位),设置GPIO1.EDGE_SEL=1,那么就表示 GPIO1_IO01 是双边沿触
发中断,无论 GFPIO1_CR1 的设置为多少,都是双边沿触发。
I.MX6U GPIO 时钟使能
I.MX6U 的系统时钟参考《I.MX6UL 参考手册》的第 18 章
其中CMM 有 CCM_CCGR0~CCM_CCGR6 这 7 个寄存器,这 7 个寄存器控制着 I.MX6U 的所有外设时钟开关。
查询手册可找到外设时钟控制对应的寄存器位,按如图所示配置。
实验程序编写
汇编版本
程序编写按照第一节GPIO配置总结的4个步骤:使能时钟、IO复用、上下拉、速度等、输入输出等。
本章编写汇编程序完成点灯操作,分为5步。
led.s文件
C语言版本
实际工作中是很少用到汇编去写嵌入式驱动的,毕竟汇编太难,而且写出来也不好理解,大部分情况下都是使用 C 语言去编写的。
我们有两部分文件要做:
①、汇编文件
汇编文件只是用来完成 C 语言环境搭建比如初始化 DDR、设置堆栈指针 SP 等等。
②、 C 语言文件
C 语言文件就是完成我们的业务层代码的,其实就是我们实际例程要完成的功能。
start.s 文件
main.h文件,主要定义寄存器地址。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!