前言:上一节,在程序下载流程上耽误了一些时间,现在正式开始GPIO的使
用了。
开始跟着韦老师的视频学习,发现GPIO点灯操作和单片机没有太大的区别,主要也是将相应的管脚配置为输出,然后输出高低电平,来控制灭亮。
那就涉及到了GPFCON(控制相应管脚输入输出)GPFDAT(控制高低电平)
GPFCON地址0x56000050,GPFDAT地址0x56000054.
虽然操作相差不大,但是汇编的操作和makefile的使用,启动文件跳转流程
还比较生疏,这里还是有必要学习一下得,教程控制开的是第一个灯,那么我
打开第二个灯意思一下,然后跟着写一下makefile。
1.开始用汇编编写第一个点灯程序
这下可以复习以前的知识了,主要用到LDR MOV STR几个指令
LDR伪指令,将常数或地址加载到寄存器。
MOV传送指令,这里用的立即寻址方式
STR R1,[R0] 将R1的内容存储到R0指向的存储单元。
B跳转指令。
这里用到的makefile比较简单,为.s->.o->.elf->.bin
编译 链接,生成最终文件。
以前单片机在开发工具下开发,一般都给你提供了启动文件,现在要自己写启动文件。以前编译代码也很简单,开发工具都做了。现在要在linux环境下,要一条条指令编译,还好有makefile,写好了makefile,一make就生成了,然后将生成文件下载到开发板。
2.Makefile一般的执行流程:
(1)预处理
(2)编译 .c--》.s汇编文件
(3)汇编 .s--》.o文件
(4)链接 多个.o文件生成elf格式文件
(5)然后生成机器可识别的二进制文件。
Makefile里面有一句指令指定了代码段从0地址开始
扯了这么多,先将写的第一个汇编点灯,生成一下,看下效果吧。
3.2440有两种启动方式nand启动和nor启动。
(1)nand启动会自动将前4k拷贝到SRAM
CPU然后从0地址执行
这两部分硬件自动的。
(2)NOR启动,0地址是指向nor flash,指令从0地址开始执行。
NOR可以像内存一样读数据不能像内存一样写数据
4.main 函数是被启动文件调用,没什么特别之处。
那么现在就开始学习启动文件的编写吧,先说一下他的过程。
硬件方面的初始化
(1)关看门狗
(2)初始化时钟(上电默认才12M)
(3)初始化SDRAM
软件方面初始化
(0)设置堆栈
(1)设置返回地址
(2)调用 main
(3)清理工作
启动文件的流程已经知道了,其实实际只用到了其中的一部分,编写也很简单,但是现在还是对汇编指令不是太熟悉,所以书写上还是有些麻烦,对于点灯操作已经点的不想再点了,但是自己写启动文件,然后在写个C语言点灯程序,再逐条编译一下,然后下载进行,感觉还是棒棒哒。启动文件只是现在学习写一下,以后就直接调用就行了,其实整个驱动也是,只要都整明白了,需要自己写的部分也很少。不闲扯了开始自己的第一个启动文件编写。
然后用C语言循环点灯,按键点灯,和普通单片机没有太大区别,就不在这写太多了。