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的主要内容,如果未能解决你的问题,请参考以下文章

scp001 The Gate Guardian 守卫

001--python全栈--基础知识--python安装

计算字符/字节数

数字格式化 把“1”格式化为“001”或“001”转换为1

sql____001

notepad 如何将【001】替换成 第001章 ?