I.MX6ULL学习笔记

Linux下可以用minicom替代SecureCRT


查看复用功能,必须打开参考手册:

MUX表示复用

PAD表示配置模式 (电气特性 输入输出 上下拉)


汇编:初始化一些SOC外设,

使用汇编初始化DDR (i.mx6u不需要)

设置堆栈指针sp要指向DDR,设置好 C语言运行环境


1.Aphal开发板LED灯硬件原理分析

STM32 IO初始化流程:

1.使能GPIO时钟

2.设置IO复用,将其复用为GPIO

3.配置GPIO的电气属性

4.使用GPIO 输出高、低电平



I.MX6ULL IO初始化

1.使能时钟 CCGR0~CCGR6这七个寄存器控制着6ULL所有外设时钟的使能。为了简单,直接将这七个寄存器全部打开,即为0xFFFFFFF。

2.IO复用,将寄存器MUX_GPIO1_IO03的bit30设置为0101=5,这样GPIO1IO03就复用为GPIO

3.配置GPIO1_IO03的电气属性,包括压摆率、速度、驱动能力、开漏、上下拉等

4.配置GPIO功能,设置输入输出。设置GPIO_DIR寄存器,GPIO_DR寄存器。



汇编:

最常用为:LDR和STR

STR,用法如表 7.2.1.2 所示:
指令 描述
LDR Rd, [Rn , #offset] 从存储器 Rn+offset 的位置读取数据存放到 Rd 中。
STR Rd, [Rn, #offset] 将 Rd 中的数据写入到存储器中的 Rn+offset 位置。

STR
1 LDR R0, =0X0209C004 @将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004
2 LDR R1, =0X20000002 @R1 保存要写入到寄存器的值,即 R1=0X20000002
3 STR R1, [R0] @将 R1 中的值写入到 R0 中所保存的地址中
STR
1 LDR R0, =0X0209C004 @将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004
2 LDR R1, =0X20000002 @R1 保存要写入到寄存器的值,即 R1=0X20000002
3 STR R1, [R0] @将 R1 中的值写入到 R0 中所保存的地址中

B指令:跳转指令。会将 PC 寄存器的值设置为跳转目标地址, 一旦执行 B 指
令,ARM 处理器就会立即跳转到指定的目标地址

1 _start:
2
3 ldr sp,=0X80200000 @设置栈指针
4 b main @跳转到 main 函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3BJdw8Qw-1623497763680)(attachment:6f14f5dc25d7275c472d9ac9f5aecd64)]



编译代码:

目标:编译出在ARM开发板上运行的可执行文件

1.先将led.s编译为对应的 led.o

    arm-linux-gnueabihf-gcc -g -c led.s -o led.o

上述命令就是将 led.s 编译为 led.o,其中“-g”选项是产生调试信息,GDB 能够使用这些
调试信息进行代码调试。“-c”选项是编译源文件,但是不链接。“-o”选项是指定编译产生的文
件名字,这里我们指定 led.s 编译完成以后的文件名字为 led.o。


2.链接文件:用来将多个.o文件链接到一个指定的链接位置

arm-linux-gnueabihf-ld

需要确定本实验最终的  可执行文件其运行的起始地址:链接地址

存储地址:可执行文件存储的地址,可随意选择。

运行地址:代码运行的时候所处的地址,需要在链接时确认好,否则运行会出错。

存储地址可以和运行地址相同。


Aphla中的裸机例程都是烧写到SD卡中 ,上电以后I.MX6U内部boot rom程序会将可执行文件拷贝到链接地址,这个链接地址可以在I.MX6U内部128KB RAM中(0x900000~0x91ffff),也可以在外部的DDR中。(DDR存储容量大,256MB和512MB的起始地址都是0x80000000,终止地址分别为0x8fffffff、0x9fffffff)

选择0x87800000这个地址时为了后面讲Uboot的链接地址就是这个,统一使用比较方便。

链接采用命令

arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf
-Ttext就是指定链接地址

“-o”指定链接生成的elf文件名(led.elf)

3.根据elf文件转换成.bin文件,采用命令

arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin

“-O”只当以什么格式输出 (不能小写)

“binary”表示以二进制格式输出

“-S”表示不要复制源文件中的 重定位信息和符号信息

“-g”表示 不复制源文件中的调试信息


4.可以利用反汇编指令来调试代码 生成led.dis

arm-linux-gnueabihf-objdump -D led.elf > led.dis


"-D"表示反汇编所有的段


5.代码烧写

采用imxdownload软件来下载,给予imxdownload软件最高权限(chmod 777 imxdownload),准备好SD卡,查看自己的 SD卡时哪一个		ls /dev/sd*  ,向SD卡烧写bin文件,使用命令:./imxdownload <bin file> <SD  Card>,烧写完成后会创先一个load.imx的文件(包含了一些数据头,表示运行地址和存储地址的位置)**加粗样式**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值