嵌入式裸机开发-点灯大师

点灯

  • 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复用:

嵌入式裸机开发-点灯大师
GPIO1_IO00 寄存器地址为 0X020E02E8。这也是个 32 位寄存器,但是只用到了其中的低 17 位,各个为的功能可查询手册。

压摆率就是 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 的所有外设时钟开关。

查询手册可找到外设时钟控制对应的寄存器位,按如图所示配置。

嵌入式裸机开发-点灯大师
LED0 的亮灭取决于 GPIO1_IO03的输出电平,输出 0 就亮,输出 1 就灭。

实验程序编写

汇编版本

程序编写按照第一节GPIO配置总结的4个步骤:使能时钟、IO复用、上下拉、速度等、输入输出等。

本章编写汇编程序完成点灯操作,分为5步。

led.s文件

C语言版本

实际工作中是很少用到汇编去写嵌入式驱动的,毕竟汇编太难,而且写出来也不好理解,大部分情况下都是使用 C 语言去编写的。
我们有两部分文件要做:
①、汇编文件
汇编文件只是用来完成 C 语言环境搭建比如初始化 DDR、设置堆栈指针 SP 等等。
②、 C 语言文件
C 语言文件就是完成我们的业务层代码的,其实就是我们实际例程要完成的功能。

start.s 文件

main.h文件,主要定义寄存器地址。

来源:桃子酱紫君

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年7月1日
下一篇 2020年7月1日

相关推荐