001
Posted chenshengkai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了001相关的知识,希望对你有一定的参考价值。
2018.4.21温故而知新,可以为师矣。
在JZ2440的板子上,有GPIO控制器,这里我打算用GPF4作为输出。
那么怎么让GPF4输出1或者0?可以通过:①配置为输出引脚(配置GPFCON) ②设置状态(配置GPFDAT)
在JZ2440的板子上有CPU,里面有R0,R1......R15寄存器,这些寄存器CPU可以直接访问。
而GPIO控制器里有GPF1,GPF2......GPFCON/GPFDAT寄存器,CPU无法直接访问,只能以地址访问。
GPFCON配置寄存器(配置引脚F),GPFDAT数据寄存器(引脚F的数据寄存器)。
①先要把GPF4配置为输出引脚,查表可知:
GPF4对应GPFCON[9:8],寄存器8bit为1时,地址为0x00000100。
所以把0x100写到寄存器GPFCON,0x56000050上面。
②设置状态,查表可知:
GPF4对应GPFDAT[4],寄存器4bit为1时,地址为0x00000010;寄存器4bit为0时,地址为0。
对于GPFDAT[4]有两个状态:
①输出1时为高电平,灯熄灭→把0x10写到地址0x56000054上面。
②输出0时为低电平,灯点亮→把0写到地址0x56000054上面。
我要的是点亮板子上的led,则选择第二种方式。
我用汇编代码写,简单介绍一下用到的代码指令。
①LDR(load):读内存,读4字节。
LDR R0,[R1]
假设R1的值是x,读取地址x上的数据(4字节),保存到R0中。
②STR(store):写内存命令,写4字节。
STR R0,[R1]
假设R1的值是x,把R0的值写到地址x中。
③B:跳转
④MOV(move):赋值指令
MOV R0,R1
把R1的值赋给R0,即R0=R1。
MOV R0,#0x100→R0=0x100。
⑤LDR的伪指令
LDR R0,#0x12345678
这是一条伪指令,它的最终结果被拆分为几条真正的ARM指令,指令结果使得R0=0x12345678。
如果MOV R0,#0x12345678 这是一条错误的指令,为什么呢?
我习惯用Source Insight 3.5
代码如下:
连接到服务器,把led_on.S用FileZilla上传到服务器后,
这样就可以得到led_on.bin文件。
其实为了方便以后的编译,也可以把这些代码做成Makefile文件
这样直接就可以用make命令编译;make clean命令清除生成的文件。
得到led_on.bin后,用FileZilla把bin文件从服务器中拷贝到windows。
然后用oflash把bin烧写到Nand flash中,断电后设置为Nand启动,上电即可点亮一盏led。
2018.4.21温故而知新,可以为师矣。
以上是关于001的主要内容,如果未能解决你的问题,请参考以下文章