002_linux之点灯(汇编深度解析)

  1.  开发板采用韦山东的开发板
    
  2.  芯片CPU三星S3C2440A
    
  3. 控制引脚:GPF4

  4. linux操作系统

  5. 芯片手册下载地址:https://eyun.baidu.com/s/3b1UtLc
    002_linux之点灯(汇编深度解析)_第1张图片

看芯片手册三星S3C2440A中GPF4的功能:(280/P)

由下面的芯片手册可以看出GPF4的功能可以用作普通IO的输入输出,和外部中断。(下图)
002_linux之点灯(汇编深度解析)_第2张图片

  1. IO口控制:(282/P)

由芯片手册中282页中的描述,控制IO口输出只需控制端口控制寄存器(GPXCON)和端口数据寄存器(GPXDAT)即可,当然还有其他的没有截屏出来,控制IO口没用到。(下图)
002_linux之点灯(汇编深度解析)_第3张图片

  1. 使用点灯IO口GPF的控制地址如图:(292/P)

由第四点中数据手册知道,只需控制GPFCON和GPFDAT中地址数据即可完成对IO的控制。(下图)
002_linux之点灯(汇编深度解析)_第4张图片

  1. GPFCON的控制:

由下图中GPFCON可看出控制GPF4是控制bit[9:8]位,控制LED选用01 = output
002_linux之点灯(汇编深度解析)_第5张图片

  1. GPFDAT控制:

由下图可知控制GPF4高低电平只需:

GPFDTA[4] = 0; //低电平

GPFDTA[4] = 1; //高电平
002_linux之点灯(汇编深度解析)_第6张图片

  1. 由芯片在手册中所描述并进行分析,控制IO口电平只要控制GPFCON和GPFDAT的寄存器就可以了。不用那么麻烦。。。。。。。。。上面只是手册中所提取的。。。。。。。。。。。原理。。。。。。。。。。。。。。。
    002_linux之点灯(汇编深度解析)_第7张图片

重点来了:

10.首先往GPFCON的bit[9:8]中送入01就可以控制GPF4为输出模式了,第7点中;然后由

《寄存器位查看小工具.exe》程序中将0x00000100送入0x56000050(第6点GPFCON地址)就行了,这里就是GPFCON的控制了。

11.然后到控制GPFDATA了,原理和上面的差不多,前面第8点说:

GPFDTA[4] = 1; //高电平

将0x00000010送入0x56000054就可以实现控制高电平了。

GPFDTA[4] = 0; //低电平

将0x00000000送入0x56000054就全部都是低电平了,送全0会影响其他位,这里只控制一盏灯,所以其他的多少都无所谓,简单粗暴的方法。

002_linux之点灯(汇编深度解析)_第8张图片

然后上面的原理说完了,再下来该是程序了,使用的程序是汇编的。使用到的几个汇编指令:

002_linux之点灯(汇编深度解析)_第9张图片

程序:

.text

.global _start

_start:

         ldr  r1, = 0x56000050

         ldr  r0, = 0x100 

         str  r0, [r1]

         ldr  r1, = 0x56000054

         ldr  r0, = 0

         str  r0, [r1]

 

halt:

                   b  halt

上面的代码是.S文件的,下面再新建一个没有后缀的Makefile文件写下面的东西.

Makefile这个主要是编译执行的命令,整合到一个文件里面能够快速编译,这个后面再讲。

led_on.bin : led_on.S

         arm-linux-gcc-g -c -o led_on.o led_on.S

         arm-linux-ld-Ttext 0x0000000 -g led_on.o -o led_on_elf

         arm-linux-objcopy-O binary -S led_on_elf led_on.bin

clean:

         rm-f   led_on.bin led_on_elf *.o

然后得到两个文件了

在这里插入图片描述
002_linux之点灯(汇编深度解析)_第10张图片
002_linux之点灯(汇编深度解析)_第11张图片

嗯,写完程序后通过Windows和linux联通经过半个多小时操作后编译成功bin文件。

然后烧写到开发板就能点亮灯了,MMP。

  1. 使用source Insight 将上述程序写成.S文件

  2. 使用fileZilla 连接到linux系统

  3. 将1中的文件通过fileZilla上传到linux的/work中去,最好是文件夹

  4. 使用MobaXterm_Personal_10.4连接到linux系统中

  5. 在用MobaXterm_Personal_10.4 使用linux命令编译成bin文件

  6. 在fileZilla将bin 文件从linux中拖回Windows中

  7. 使用Windows的cmd命令下载到开发板中去

  8. 重新上电就能点灯了

  9. MMP………

  10. 如何将linux,Windows,开发板三个连接起来涉及ping的问题。

总结: 如何烧写看个人开发板,这个只是汇编的解析如何进行点灯的具体原理,当然,汇编完之后编译里面还有机器码,如何去了解机器码的内部就不说了,机器码涉及AMR架构那些,初学没必要了解,以后只要知道就行了,下一篇写C的点灯的,也是在这篇的原理上更改。知道如何去看芯片手册之后就很简单了。上面的截图是我在芯片手册中截取的有效内容,当然还有很多无关的就没有截图下来。

002_linux之点灯(汇编深度解析)_第12张图片

你可能感兴趣的:(012_linux裸机)