11
ldr r0
, =
0X020C4068
/*
寄存器
CCGR0 */
12
ldr r1
, =
0XFFFFFFFF
13
str r1
, [
r0
]
14
15
ldr r0
, =
0X020C406C
/*
寄存器
CCGR1 */
16
str r1
, [
r0
]
17
18
ldr r0
, =
0X020C4070
/*
寄存器
CCGR2 */
19
str r1
, [
r0
]
20
21
ldr r0
, =
0X020C4074
/*
寄存器
CCGR3 */
22
str r1
, [
r0
]
23
24
ldr r0
, =
0X020C4078
/*
寄存器
CCGR4 */
25
str r1
, [
r0
]
26
27
ldr r0
, =
0X020C407C
/*
寄存器
CCGR5 */
28
str r1
, [
r0
]
29
30
ldr r0
, =
0X020C4080
/*
寄存器
CCGR6 */
31
str r1
, [
r0
]
32
33
34
/* 2
、设置
GPIO1_IO03
复用为
GPIO1_IO03 */
35
ldr r0
, =
0X020E0068
/*
将寄存器
SW_MUX_GPIO1_IO03_BASE
加载到
r0
中
*/
36
ldr r1
, =
0X5
/*
设置寄存器
SW_MUX_GPIO1_IO03_BASE
的
MUX_MODE
为
5 */
37
str r1
,[
r0
]
38
39
/* 3
、配置
GPIO1_IO03
的
IO
属性
40
*bit 16:0 HYS
关闭
41
*bit [15:14]: 00
默认下拉
42
*bit [13]: 0 kepper
功能
43
*bit [12]: 1 pull/keeper
使能
44
*bit [11]: 0
关闭开路输出
45
*bit [7:6]: 10
速度
100Mhz
46
*bit [5:3]: 110 R0/6
驱动能力
47
*bit [0]: 0
低转换率
48
*/
49
ldr r0
, =
0X020E02F4
/*
寄存器
SW_PAD_GPIO1_IO03_BASE */
50
ldr r1
, =
0X10B0
51
str r1
,[
r0
]
52
53
/* 4
、设置
GPIO1_IO03
为输出
*/
54
ldr r0
, =
0X0209C004
/*
寄存器
GPIO1_GDIR */
55
ldr r1
, =
0X0000008
56
str r1
,[
r0
]
57
58
/* 5
、打开
LED0
59
*
设置
GPIO1_IO03
输出低电平
60
*/
61
ldr r0
, =
0X0209C000
/*
寄存器
GPIO1_DR */
62
ldr r1
, =
0
63
str r1
,[
r0
]
64
65
/*
66
*
描述:
loop
死循环
67
*/
68
loop
:
69
b loop
第 2
行定义了一个全局标号
_start
,代码就是从
_start
这个标号开始顺序往下执行的。
第 11
行使用
ldr
指令向寄存器
r0
写入
0X020C4068
,也就是
r0=0X020C4068
,这个是CCM_CCGR0 寄存器的地址。
第 12
行使用
ldr
指令向寄存器
r1
写入
0XFFFFFFFF
,也就是
r1=0XFFFFFFFF
。因为我们要开启所有的外设时钟,因此 CCM_CCGR0~CCM_CCGR6
所有寄存器的
32
位都要置
1
,也就是写入 0XFFFFFFFF
。
第 13
行使用
str
将
r1
中的值写入到
r0
所保存的地址中去,也就是给
0X020C4068
这个地址写入 0XFFFFFFFF
,相当于
CCM_CCGR0=0XFFFFFFFF
,就是打开
CCM_CCGR0
寄存器所
控制的所有外设时钟。
第 15~31
行都是向
CCM_CCGRX(X=1~6)
寄存器写入
0XFFFFFFFF
。这样我就通过汇编代码使能了 I.MX6U
的所有外设时钟。
第35~37
行是设置
GPIO1_IO03
的复用功能,
GPIO1_IO03
的复用寄存器地址为
0X020E0068, 寄存器 IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03
的
MUX_MODE
设置为
5
就是将GPIO1_IO03 设置为
GPIO
。
第 49~51
行 是 设 置
GPIO1_IO03的 配 置 寄 存 器 , 也 就 是 寄 存 器
IOMUX_SW_PAD_CTL_PAD_GPIO1_IO03
的值,此寄存器地址为
0X020E02F4
,代码里面已经
给出了这个寄存器详细的位设置。
第 54~63
行是设置
GPIO
功能,经过上面几步操作,
GPIO1_IO03
这个
IO
已经被配置为了GPIO 功能,所以还需要设置跟
GPIO
有关的寄存器。第
54~56
行是设置
GPIO1->GDIR
寄存器,将GPIO1_IO03
设置为输出模式,也就是寄存器的
GPIO1_GDIR
的
bit3
置
1
。
第 61~63
行设置
GPIO1->DR
寄存器,也就是设置
GPIO1_IO03
的输出,我们要点亮开发板上的 LED0
,那么
GPIO1_IO03
就必须输出低电平,所以这里设置
GPIO1_DR
寄存器为
0
。
第
68~69
行是死循环,通过
b
指令,
CPU
重复不断的跳到
loop
函数执行,进入一个死循环。
2.4 编译下载验证
2.4.1 编译代码
因为我们现在是直接在
Ubuntu
下使用 VSCode 编译的代码,在编译之前我们先了解几个编译工具。