`
maybemse
  • 浏览: 11195 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

裸机点亮led灯

 
阅读更多

折腾了一上午终于能在Tiny6410上点亮4个led灯。第一次在嵌入式设备上写程序,遇到了很多问题。下面记录下所遇到的问题和解决方法。

 

 

 

1. 首先遇到的问题是,使用的Tiny6410板子的Nand Flash上已经被烧写了一个Linux操作系统。为了将Nand Flash清空(格式化),使Tiny6410板子成为一个方便学习的裸机。那么如何格式化Nand Flash呢?

 

方法:首先在SD卡上烧写super boot(参照Tiny6410的刷机手册)。烧写好super boot之后,一定不要在SD卡上拷贝任何东西,否则无法在SD-BOOT方式下进入bios(血的教训,整了一上午才发现这个问题,一直都不能利用super boot进入bios,因此也无法在裸机上运行程序(.bin文件))。

将板子设置为SD-BOOT启动模式,连接好串口线(电脑端连接COM-1,板子端连接COM-0,波特率为115200,去掉流控选项)、USB线(安装好USB驱动程序)。打开板子的开关,在超级终端上能通过串口看到提示信息,并且成功的进入bios(有很多的功能选项)。输入f,选择格式化Nand Flash,然后就可以清空Nand Flash,让板子完全成为一个裸机。

 

注意:我宿主机的系统为Win7系统,没有自带的超级终端,secureCRT可以用来代替超级终端。

 

 

 

2. 如何搭建嵌入式程序的编译环境呢?

 

方法:在进行嵌入式程序开发时,一般采用交叉编译的方式。我在Linux系统下编写代码(Ubuntu系统,虚拟机的形式)。为了能在Linux系统下编译写的嵌入式程序,首先要搭建编译环境。在Linux系统下,解压arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz(光盘资料中自带的,应该可以下载获得)。我将这个压缩包解压到了/opt/Arm/tiny6410/4.5.1/下,然后在用户的/home目录下的.bashrc文件最后添加环境变量(export PATH=$PATH://opt/Arm/tiny6410/4.5.1/bin)。重新打开一个终端,输入命令:arm-linux-gcc -v。如果能看见一堆输出,并且没有错误提示,表明编译环境搭建好了。

 

 

 

3. 点亮led灯的汇编代码如何写?

 

方法;根据网上搜到的资料和Tiny6410的硬件资料可以知道,Led1~4等对应的寄存器是GPK4~7。首先将GPKCON0(内存地址为0x7f008800)对应于GPK4~7的位设置为0001(注意:是4个位控制一个引脚),表示为输出(由CPU向引脚上输出电平),即将0x7f008800地址对应的值设为0x11110000。

然后,将GPKDAT(内存地址为0x7f008808)对应GPK4~7的位设置为0(注意:是1个位控制一个引脚,与上面不同),表示为输出低电平,led灯亮,即将0x7f008808地址对应的值设为0x00000000。

汇编代码如下所示:

 

.text

.global _start

_start:

 ldr r0, =0x7f008800

 ldr r1, =0x11110000  @不能使用mov,编译时会出错。可能是立即数超出了表示的范围。使用ldr命令代替

 str r1, [r0]

 

 ldr r0, =0x7f008808

 ldr r1, =0x00000000  @同上

 str r1,[r0]

 

main_loop:

 b main_loop

 

 

 

4. 写好了汇编程序,接下来如何进行编译,并最终得到.bin可执行文件呢?

 

方法:搭建好编译环境之后,编写Makefile文件。文件内容如下:

led_on.bin:led_on.S

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

 arm-linux-ld -Ttext 0x00000000 -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

 

在命令行中输入:make就可以进行编译了。编译之后,得到了led_on.bin可执行文件。接下来将.bin文件拷贝到宿主机(我的是Win7系统)上,然后再下载到板子上就可以看到效果了。 

 

 

 

5. 如何将.bin文件下载到Tiny6410的裸机上呢?

 

方法:根据问题1中的方法,进入bios中。选择[d]选项,通过dnw下载.bin文件到板子上运行。我的宿主机的系统是Win7,虽然不能使用dnw的串口连接功能,但是仍然可以使用dnw的下载功能(比较幸运的发现这个功能)。点击dnw中USB Port选择Transmit/Restore功能,然后选择led_on.bin文件就可以了。最后观察一下4个led灯是否全亮了。

 

 

 

虽然裸机点亮Led灯的程序比较简单,但是成功的实现点亮Led灯功能多多少少还是有点成就感的。让我了解了嵌入式程序的编译、下载和运行的过程。虽然嵌入式很难,我相信只要努力的坚持,最后一定会有收获的~~

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics