关键知识点:arm汇编/程序存储地址/运行地址/程序启动
arm汇编:
因为 Cortex-A 芯片一上电 SP 指针还没初始化, C 环境还没准备
好,所以肯定不能运行 C 代码,必须先用汇编语言设置好 C 环境,比如初始化 DDR、设置 SP
指针等等,当汇编把 C 环境设置好了以后才可以运行 C 代码。
/*
label: instruction @ comment
label 即标号,表示地址位置,有些指令前面可能会有标号,这样就可以通过这个标号得到
指令的地址,标号也可以用来表示数据地址。注意 label 后面的“:”,任何以“:”结尾的标识
符都会被识别为一个标号
读取 I.MX6UL 寄存器也是一样的,只是过程相反。常用的存储器访问指令有两种: LDR 和
STR,用法如表 7.2.1.2 所示:
指令 | 描述 |
LDR Rd, [Rn , #offset] | 从存储器 Rn+offset 的位置读取数据存放到 Rd 中。 |
STR Rd, [Rn, #offset] | 将 Rd 中的数据写入到存储器中的 Rn+offset 位置。 |
*/
.gloval _start @global label _start: @ 使能所有外设时钟 ldr r0, =0x020c4068 @CCGR0 ldr r1, =0xffffffff @要写入的数据 str r1, [r0] @r1写道ccgr0 @@使能时钟 @ CCGR1 只要地址加4 ldr r0, =0x020c406c @要写入的数据 str r1, [r0] @r1写道ccgr0 ldr r0, =0x020c4070 @要写入的数据 str r1, [r0] @r1写道ccgr0 ldr r0, =0x020c4074 @要写入的数据 str r1, [r0] @r1写道ccgr0 ldr r0, =0x020c4078 @要写入的数据 str r1, [r0] @r1写道ccgr0 ldr r0, =0x020c407c @要写入的数据 str r1, [r0] @r1写道ccgr0 ldr r0, =0x020c4080 @要写入的数据 str r1, [r0] @r1写道ccgr0 @@iomux SW_MUX_CTL_GPIO1_IO3 SW MUX ==>set 5 @ address:20e_0000h+68 offset=20e_0068h ldr r0, =0x020e0068 ldr r1, =0x5 str r1, [r0] @@配置gpio1_io03的电气属性 ldr r0, =0x020e02f4 ldr r1, =0x10b0 str r1, [r0] @@设置GPIO /* *设置GPIO_GDIR1寄存器 0x0209c004 *设置GPIO1_GPIO3为输出 *就是GPIO1_IO03为输出 */ @选择gpio ldr r0, =0x0209c004 ldr r1, =0x8 str r1, [r0] @设置io输入输出 GPIOX_DR ldr r0, =0x0209c000 ldr r1, =0x0 str r1, [r0] /*cpu 不能处于未知状态 */ loop: b loop
标签:r0,r1,写入,Day1,ldr,str,led,arm,ccgr0 From: https://www.cnblogs.com/zhangzhekun/p/17092340.html