嵌入式Linux(二)汇编LED驱动实验

目的:

并不是系统的学习汇编,而是在linux开发中有时候需要使用汇编置零进行一些初始化的工作。

1. I.MX6ULL的IO初始化流程:

6ULL的IO命名:IOMUXC_SW_MUC_CTL_PAD_XX_XX,加黑部分就是GPIO的命名。
① 使能时钟:
  参考手册中说明了CCGR0-CCGR6七个寄存器控制设备所有外设时钟的使能,每个寄存器都设置为0xFFFFFFFF,也就是将每个寄存器的所有位设置为1,相当于使能所有外设时钟。
② IO复用:
  复用寄存器:IOMUXC_SW_MUX_CTL_PAD_XX_XX。第三个字段为MUX。
  参考手册第32章节中找到对应IO,查看寄存器MUX_MODE栏即可查看复用。该实验中将其bit3-0设置为0101即可。
③ 电气配置:
  电气寄存器:IOMUXC_SW_PAD_CTL_PAD_XX_XX。第三个字段为PAD。
  结合6ULL驱动开发指南中的IO功能图和参考手册的32章来看。主要是设置SRE压摆率,SPEED速度,DSE驱动能力,开漏,上下拉等。
在这里插入图片描述
④ GPIO功能配置:
设置输入输出。参考手册第28章,驱动开发指南8.1.5。
  主要涉及GPIOx_DR寄存器和GPIOx_GDIR寄存器,GDIR寄存器设置GPIO为输入或输出模式,输入则往DR寄存器中读,输出则往DR寄存器中写。该实验中设置GDIRbit3=1,输出模式,DR的bit3=1/0,表示输出高/低电平。

2. GNU汇编基本语法:

注意ARM中指令,伪指令,操作,伪操作,寄存器名等可以全大写或小写,不可以大小写混用。

语句规范:label: instruction @ comment
label:标号,表示地址位置,任何以“:”结尾的都是标号,标号也可以作为一个函数使用。
instruction:汇编指令或伪指令,必须有,不可以空着。
@ comment:注释。

常用指令见驱动开发第七章。

3. 驱动编写及编译:

①Code:略
②编译程序:
1.使用linaro将.c.s文件变为.o
在这里插入图片描述
 2.将.o文件链接为elf格式的可执行文件。6ULL链接起始地址在RAM中,建议使用0x87800000,因为后面Uboot的链接地址也是这个,统一一下。
在这里插入图片描述
 3.将elf文件转为bin文件。对于I.MX来说bin文件不能直接运行,需要添加一个头部(其中包含了DDR的初始化参数),从SD卡,EMMC等外部存储中读取头部信息,将bin文件拷贝到链接起始地址。
在这里插入图片描述
 4.将elf转为汇编,反汇编
 一般来说bin文件生成之后就可以烧写了,但是我们一般用C写例程,有时候调试需要查看汇编代码,需要将elf文件反汇编。
在这里插入图片描述
③烧写bin文件:
  可以用EMMC,NAND,SPI flash等启动,用官方提供的软件但是有点麻烦。裸机开发还是烧到SD卡方便。烧写指的是将bin文件烧写到SD卡绝对地址上,对于I.MX来说必须现在bin文件前面添加头部再烧写。
  1.先往路径下添加imxdownload文件。
在这里插入图片描述
  2.执行烧写命令之前先查看SD卡对应的设备名,通过插拔发现是sdb/sdb1:
在这里插入图片描述
  3.烧写:(imxdownload给bin文件添加了头部,生成load.imx文件并烧写进去)
在这里插入图片描述
  4.上板,将启动模式调为SD卡启动(板子上的红模块17拨上,其它位拨下),插入SD卡,复位,发现红灯亮起来了,说明驱动成功。
  将刚才的操作整合成Makefile文件,一步到位:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值