之前按照书中所讲已经写过一篇正点原子-裸机实验-汇编点灯
这篇是过了一段时间,自己根据芯片文档自己写的代码。学习过程如下:
1.查看硬件原理图,知道我们操作的led对应芯片哪个位置
先查看led电路,led0旁边有个电阻R9,看实际电路板,led旁边也有一个电阻R9,所以确定是这个led0,查看其他的图,led0连接到GPIO_3,根据视频这个标错了,实际是GPIO1_IO3。好的,现在我们知道了要具体操作哪个GPIO。
2.查看IMX6ULL参考手册
找到讲GPIO的那一章,第28章
大概浏览一遍,下图是GPIO的几个相关寄存器
接下来看到这里,这里有GPIO读写程序例子,我们就按照下面的例子对这个GPIO1_IO3来进行操作。
只操作3个寄存器,
1.根据上图文档例子代码,找到SW_MUX_CTL_PAD_GPIO1_IO03 SW MUX Control
Register (IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03)这个寄存器,设置为GPIO mode
2. 根据示例代码找到GPIO1_GDIR
3.根据示例代码找到GPIO1_DR
然后写出如下代码,也是可以电灯成功。
.global _start
_start:
/*set IOMUX GPIO1_IO3 GOIP mode*/
ldr r0,=0x020e0068
ldr r1,=0x00000005
str r1,[r0]
/*GPIO1_GDIR*/
ldr r0,=0x0209c004
ldr r1,=0x8
str r1,[r0]
/*GPIO1_DR*/
ldr r0,=0x0209c000
ldr r1,=0x0
str r1,[r0]
总结:
这是自己根据文档来写的点灯程序。比视频写的简单很多,抓住主要内容来学习。
1.设置IO复用为GPIO
2.设置GPIO工作方式为输出
3.设置GPIO输出低电平