《嵌入式linux应用程序开发完全手册》LED裸板硬件编程(汇编)学习笔记

2019-07-13 07:21发布

《嵌入式linux应用程序开发完全手册》LED裸板硬件编程(汇编)学习笔记              先来一个最简单的试验一下,我们的思路和想法对不对!对于刚刚从51单片机过来的开发者而言,对arm的操作有一些不同,由于单片机的极其简单决定了它对管脚的操作也极其容易,管脚复用也不多。但对于ARM则大大不同,对于2440光IO口都有130个,而其中很大一部分IO都有二次,三次复用,所以对它的操作变得间接了---对寄存器的配置。对所有的IO,甚至所有的操作都归结于对相应寄存器的配置了。所以我们先来看一下本节我们涉及到的IO寄存器。        这里我们要实现点亮led1,就是GPB5上连的那个led,如果你不确定哪个灯是led1,你不妨结合原理图和实板去找一下。         > 从mini2440的原理图上找出4个led的连接关系:              led1---GPB5              led2---GPB6              led3---GPB7              led4---GPB8        >从2440的datasheet上找出GPB的寄存器地址和相应位功能与配置方法。             GPBCON---0x56000010             GPBDAT---0x56000014             GPBUP---0x56000018          >根据2440 GPBCON的位描述,GPB5对应位[11:10],如果[11:10]==[00]表示设置GPB5端口为input功能,如果为[01]则为output功能,[10]则为nXBACK 功能,[11]保留。显然,我们要让GPB5对应的管脚有输出功能。            >上面将GPB5设置成了输出,而输出什么呢?我们就要看一下GPBDAT这个寄存器了,它对应于[10:0],这11位对应于相应的IO口,而我们用的是第GPB5,当然就是把GPBDAT的第5位设置成0就可以将led1这边拉低了哦,根据LED的驱动电路,可以看出是低电平触发,所以它自然也就亮起来了。         下面就看一下实现的程序吧:(如果你看不懂下面的几句简单程序,那就sorry了,你得回去看一下arm指令与汇编了,其实也可以一起看了,边看arm体系结构与编程边跟我一起来学习),如果板子在运行过程中led本身就亮起来了,可以在下面的代码中加入熄灭所有led然后再点亮相应的led 就可以了。       这上面的代码很简单,就不多讲了,再多讲恐怕谁都要砸砖头了,看一下Makefile吧,因为对于初学者,往往有点惧怕makefile,总感觉它太复杂,实际上我们平时的使用并不会使用它多么复杂的功能,都是一些简单的功能,复杂的功能我们一般都使用auto自动自成,所以呀攻破它对于你后面的开发学习将有莫大的好处,不需要特别的复杂的学习,只需要随着使用的过程中学习就行了。       这个makefile也很简单,我仅说明其中一点:-Ttext 0x00000000表示,指定了程序运行的地址为0x00000000,具体arm-linux-ld的使用详细说明,请参考其文档,我这里就不多说了。     然后将生成的led.bin或者led_elf文件用命令load_image 下载到ram中,然后使用resume命令从0x0处运行就可以了。