关于 公司网站建设的通知,公司网站建设的申请,网站和做空间,网站免费推广计划文章目录 1、原理图找对应引脚2、IO复用3、IO配置4、GPIO配置5、GPIO时钟使能6、总结7、编程8、编译9、链接10、格式转换11、反汇编#xff08;查看用#xff09;12、使用Makefile操作13、代码烧写14、代码验证 1、原理图找对应引脚 从上图 可以看出#xff0c; 蜂鸣器 接到… 文章目录 1、原理图找对应引脚2、IO复用3、IO配置4、GPIO配置5、GPIO时钟使能6、总结7、编程8、编译9、链接10、格式转换11、反汇编查看用12、使用Makefile操作13、代码烧写14、代码验证 1、原理图找对应引脚 从上图 可以看出 蜂鸣器 接到了 BEEP 上 BEEP 就是 GPIO5_IO05
2、IO复用
查找IMX6UL参考手册 和 STM32一样如果某个 IO 要作为某个外设引脚使用的话 是需要配置复用寄存器的。 做工业级应用一般会选择G2版本如果使用了G3版本则其以下GPIO只能做tamper GPIO不能做普通的GPIO CTL_PAD_SNVS_TAMPER0~CTL_PAD_SNVS_TAMPER9 10个GPIO。 可以通过烧写掉以下fuse来将其设置为一般的GPIO G3版本CPU用于POS机设计而不是作为G2用于工业其以下保险丝是00需要您将其烧录到11才能使tamper0-9到正常gpio请检查您的参考手册 TAMPER gpio 是Pos机上用的检测攻击数据会自毁。
TAMPER_PIN_DISABLE[10]的定义如下
00 - 使能TAMPER0-9 用作 TAMPER 检测引脚。
01 - 禁用 TAMPER2-4 和 TAMPER7-9 用作 GPIO。
10 - 禁用 TAMPER0-1 和 TAMPER5-6 用作 GPIO。
11 - 禁用 TAMPER0-9 用作 GPIO。
3、IO配置 4、GPIO配置 此寄存器是 32 位的一个 GPIO 组最大只有 32 个 IO因此 DR 寄存器中的每个位都对应 一个 GPIO。当 GPIO 被配置为输出功能以后向指定的位写入数据那么相应的 IO 就会输出相 应的高低电平比如要设置 GPIO1_IO00 输出高电平那么就应该设置 GPIO1.DR1。 GDIR 寄存器也是 32 位的此寄存器用来设置某个 IO 的工作方向是输入还是输出。同 样的每个 IO 对应一个位如果要设置 GPIO 为输入的话就设置相应的位为 0如果要设置为 输出的话就设置为 1。比如要设置 GPIO1_IO00 为输入那么 GPIO1.GDIR0 同样的 PSR 寄存器也是一个 GPIO 对应一个位读取相应的位即可获取对应的 GPIO 的状 态也就是 GPIO 的高低电平值。功能和输入状态下的 DR 寄存器一样 IMR 寄存器也是一个 GPIO 对应一个位 IMR 寄存器用来控制 GPIO 的中断禁止和使能 如果使能某个 GPIO 的中断那么设置相应的位为 1 即可反之如果要禁止中断那么就设 置相应的位为 0 即可。例如要使能 GPIO1_IO00 的中断那么就可以设置 GPIO1.MIR1 即 可 ISR 寄存器也是 32 位寄存器一个 GPIO 对应一个位只要某个 GPIO 的中断发生那么 ISR 中相应的位就会被置 1。所以我们可以通过读取 ISR 寄存器来判断 GPIO 中断是否发生 相当于 ISR 中的这些位就是中断标志位。当我们处理完中断以后必须清除中断标志位清除 方法就是向 ISR 中相应的位写 1也就是写 1 清零。 EDGE_SEL 寄存器用来设置边沿中断这个寄存器会覆盖 ICR1 和 ICR2 的设置同样是一 个 GPIO 对应一个位。如果相应的位被置 1那么就相当与设置了对应的 GPIO 是上升沿和下降 沿(双边沿)触发。例如我们设置 GPIO1.EDGE_SEL1那么就表示 GPIO1_IO01 是双边沿触 发中断无论 GFPIO1_CR1 的设置为多少都是双边沿触发。
5、GPIO时钟使能 6、总结
总结一下要将 I.MX6UL的 IO 作为 GPIO 使用我们需要一下 几步 ①、使能 GPIO 对应的时钟。 ②、设置寄存器 IOMUXC_SW_MUX_CTL_PAD_XX_XX设置 IO 的复用功能使其复用 为 GPIO 功能。 ③、设置寄存器 IOMUXC_SW_PAD_CTL_PAD_XX_XX设置 IO 的上下拉、速度等等。 ④、第②步已经将 IO 复用为了 GPIO 功能所以需要配置 GPIO设置输入/输出、是否使 用中断、默认输出电平等。
7、编程
/*汇编代码学习*/
.global _start /*全局标号*/
/** 描述 _start 函数程序从此函数开始执行此函数完成时钟使能、* GPIO 初始化、最终控制 GPIO 输出低电平来点亮 LED 灯。*/
_start:
/*1、使能时钟*/
ldr r0, 0x020C406C /* 寄存器 CCGR1 */
ldr r1, 0xc0000000
str r1, [r0]/*2、复用GPIO*/
ldr r0, 0x020E0030 /* 将寄存器 加载到 r0 中 */
ldr r1, 0x5 /* 设置寄存器 的 MUX_MODE 为 5 */
str r1, [r0]/*3、配置GPIO*bit 16:0 HYS 关闭*bit [15:14]: 00 默认下拉*bit [13]: 0 kepper 功能*bit [12]: 1 pull/keeper 使能*bit [11]: 0 关闭开路输出*bit [7:6]: 10 速度 100Mhz*bit [5:3]: 110 R0/6 驱动能力*bit [0]: 0 低转换率*/
ldr r0, 0x020E02BC
ldr r1, 0x10B0
str r1, [r0]/*4、设置GPIO输出*/
ldr r0, 0x020AC004 /*寄存器 GPIO1_GDIR */
ldr r1, 0x20
str r1, [r0]/*5、打开BEEP*/
//设置 GPIO5_IO05 输出高电平
ldr r0, 0x020AC000 /*寄存器 GPIO1_DR */
ldr r1, 0x20
str r1, [r0]/** 描述 loop 死循环*/loop:b loop8、编译
.s编译源文件但是不链接成.o文件
9、链接
链接到一个运行地址
10、格式转换
我们需要将 led.elf 文件转换为 led.bin 文件
11、反汇编查看用
大多数情况下我们都是用 C 语言写试验例程的有时候需要查看其汇编代码来调试代码 因此就需要进行反汇编一般可以将 elf 文件反汇编 通过 led.dis 这个反汇编文件可以 明显的看出我们的代码已经链接到了以 0X87800000 为起始地址的区域
12、使用Makefile操作
创建好 Makefile 以后我们就只需要执行一次“make”命令即可完成编译过程如图 8.4.1.13 所示 13、代码烧写
用SD卡烧写 Linux下对SD卡进行格式化 烧写好后U盘是空的不知道为啥。如果有其他文件百度看下其实这些文件还真不是烧写文件。
14、代码验证
莫得问题和编写一致。