【JZ2440笔记】裸机实验点亮LED

 

一、前言

最近在学韦东山的JZ2440开发板,于是记录下学习过程中的笔记。一般学程序写的第一个例子是打印“Hello World”,而学单片机的第一个例子一般都是点亮LED,学ARM的话如果从裸机开始学,也跟玩单片机差不多,从点亮LED开始。

 

二、实验步骤

1、目标

点亮开发板上的3个LED灯。

2、硬件连线

 点亮LED需要S3C2440芯片的IO引脚GPF4、GPF5、GPF6输出低电平即可。

3、寄存器配置

和玩单片机一个套路,配置IO模式(GPFCON寄存器)和要输出的电平(GPFDAT)就行了。即GPFCON寄存器给0x00001500把GPF4、5、6配置成输出模式,GPFDAT给0x00000000让三个IO输出低电平。

4、编写代码

这里比较干脆,教程里从汇编讲起,所以用汇编语言写的代码。

led_turnOn.S

@******************************************************************************
@ 功能:LED点灯程序,点亮LED1、2、4
@ 对应IO为GPF4、GPF5、GPF6
@******************************************************************************  

.text
.global _start
_start:
		LDR R0,=0x56000050	@ R0放入GPFCON寄存器的地址
		
		MOV	R1,#0x00001500 	@ R1放入GPFCON想要设置的值
							@ 将GPF4、GPF5、GPF6设置为输出模式
		STR R1,[R0]			@ 将R1值放入R0指向的地址,输出模式配置完成
		
		LDR R0,=0x56000054	@ R0放入GPFDAT寄存器的地址
		
		MOV R1,#0x00000000	@ R1放入GPFDAT想要设置的值
							@ 将GPF4、GPF5、GPF6设置为输出低电平
		STR R1,[R0]			@ 将R1值放入R0指向的地址,输出电平配置完成
		
		@ 还有个GPFUP寄存器可以配置IO上下拉的,这里不配置也行
		
MAIN_LOOP:
		B	MAIN_LOOP		@ 程序原地死循环跳转

MakeFile

led_turnOn.bin : led_turnOn.S
	#根据led_turnOn.S生成目标文件led_turnOn.o,
	#-g加入调试信息,-c编译不链接,-o目标文件
	arm-linux-gcc -g -c -o led_turnOn.o led_turnOn.S
	#Ttext指定代码段的链接地址
	arm-linux-ld -Ttext 0x0000000 -g led_turnOn.o -o led_turnOn_elf
	#根据led_turnOn_elf生成二进制文件,-O binary输出二进制
	arm-linux-objcopy -O binary -S led_turnOn_elf led_turnOn.bin
clean:
	#删除bin和中间文件
	rm -f   led_turnOn.bin led_turnOn_elf *.o

将这两个文件使用FTP工具拷贝到Linux下,执行make命令生成二进制文件led_turnOn.bin,将该文件用FTP工具拷贝回Windows下,可以烧写到开发板上运行了。

 

5、烧写代码到开发板

有很多种方式烧写代码,如openJTAG或者DNW,这里使用openJTAG。打开Windows命令行CMD工具,进入到led_turnOn.bin所在目录,输入oflash [文件名]。

选择0,使用的烧写工具为openJTAG:

CPU选择1,S3C2440:

选择烧写到NandFlash中去:

烧写到NandFlash的块0:

为什么把bin文件烧写到NandFlash中去而且还是块0呢,因为S3C2440不像单片机一样把程序烧到内部的ROM,它的程序放在外部存储器中,上电之后再到外部存储器中去读取出来运行。在这里,S3C2440内部有一个4KB大小的片内SRAM,没有片内ROM供我们使用,上电之后有个默认操作,就是S3C2440在设置为Nand启动之后,会将NandFlash块0的前4KB内容拷贝到内部的4KB片内SRAM内,然后PC指针指向SRAM的开始地址,从SRAM中读取内容作为程序指令然后运行。所以bin文件是烧写到NandFlash中去的。

最后拔掉openJTAG和开发板的连线,拨码开关选择Nand启动,开发板重新上电运行,三个LED灯就点亮了。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值