博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TQ2440开发板学习纪实(1)---最简单的独立运行汇编程序
阅读量:4114 次
发布时间:2019-05-25

本文共 2184 字,大约阅读时间需要 7 分钟。

0 如何做到简单

TQ2440开发板,采用的CPU是三星S3C2440,核心板附加了2MB运行ROM和64MB运行RAM,并且搭配了64MB的Nand Flash。而S3C2440直接支持从NandFlash启动,其原理就是加电后,CPU内使用硬件逻辑把NandFlash开头的4KB数据复制到片内称之为stepping stone的特殊内存中。这个特殊的stepping内存只有在设置为Nandflash启动时才可见,且只有4KB大小,内存地址范围为0x00000000-0x00000FFF。

就是这小小的4KB的stepping stone给了我们创造最简单独立程序的机会,只要我们保证最终生成的程序小于4KB,就可以完美地运行在这个stepping stone里面。而且基本不需要初始化任何硬件,CPU的硬件逻辑已经可以执行程序。尽管此时的CPU主频很低、SDRAM尚未可用、堆栈尚未初始化,然而这些都不影响我们的程序运行。

为了感受到程序的运行,我们实现的功能是点亮开发板上的第一个LED灯。

1 项目源码

项目很简单,由三个文件组成:

.├── Makefile├── start.lds└── start.s

start.s

.equ WTCON,     0x53000000.equ INTMSK,    0x4a000008.equ GPBCON,    0x56000010.equ GPBDAT,    0x56000014.equ GPBUP,     0x56000018.text/* interrupt vector */ResetEntry:    b ResetHandler    b ResetHandler    b ResetHandler    b ResetHandler    b ResetHandler    b ResetHandler    b ResetHandler    b ResetHandler/* The first instruction to run */ResetHandler:    /* disable watch dog */    ldr r0, =WTCON    ldr r1, =0x0    str r1, [r0]    /* disable all interrupts */    ldr r0, =INTMSK    ldr r1, =0xffffffff    str r1, [r0]    /* turn on LED1 */    ldr r0, =GPBCON    ldr r1, [r0]    bic r1, r1, #0xC00    orr r1, r1, #0x400    str r1, [r0]    ldr r0, =GPBUP    ldr r1, [r0]    bic r1, r1, #0x10    str r1, [r0]Led:    ldr r0, =GPBDAT    ldr r1, [r0]    bic r1, r1, #0x10    str r1, [r0]    b Led.end

start.lds

ENTRY(ResetEntry)SECTIONS {    . = 0x00000000;    .text : {        *(.text)    }    .data : {        *(.data)    }    .bss : {        *(.bss)    }}

Makefile

AS = arm-linux-gnueabihf-asLD = arm-linux-gnueabihf-ldOBJCPY = arm-linux-gnueabihf-objcopyall: start.bin    cp $< /var/lib/tftpboot/start.bin: start    $(OBJCPY) -O binary $< $@start: start.o    $(LD) --script start.lds -o $@ $^start.o: start.s    $(AS) -o $@ $^.PHONY: cleanclean:    rm *.o start.bin start

2 运行说明

首先要把start.bin写入NandFlash的起始位置,然后从NandFlash启动就可以了。写入NandFlash的功能由Norflash里自带的U-boot就可以很方便的完成。

  • 先通过开关设置为从Norflash启动,进如u-boot
  • 然后选择菜单n进入tftp模式
  • 然后在选择菜单a通过tftp把我们的程序start.bin写入Nandflash
  • 关机
  • 通过开关选择从Nandflash启动

此时可以看到底板上的LED1已经被点亮。

3 源码说明

源码及其简单

  • 开头的8条跳转指令是CPU的中断向量表(注意:ARM的中断向量与X86的中断向量概念不完全一致,X86中断向量里存放的是跳转的目的地址,而ARM中断向量里存放的是跳转指令)

  • 首先关闭看门狗,关闭中断。因为目前中断处理并没有完整实现,所以要把所有中断关闭。

  • 之后就是点亮LED1的代码了

转载地址:http://rnzpi.baihongyu.com/

你可能感兴趣的文章
8种常见数据结构及其Javascript实现
查看>>
13 个 NPM 快速开发技巧
查看>>
8道有意思的JavaScript面试题,附解答
查看>>
月入5万的大佬们,假期一般都在干什么?看他们的公众号就知道了
查看>>
5分钟,掌握9个简洁的JavaScript技巧
查看>>
【视频教程】帝国CMS模板开发制作系列教程03
查看>>
ES6、ES7、ES8、ES9、ES10新特性一览
查看>>
JS创建对象的4种方式
查看>>
利用HTML5标签进行DDoS攻击的新方法揭秘
查看>>
CSS如何实现N宫格布局?
查看>>
如何实现Web页面录屏?
查看>>
【视频教程】帝国CMS模板开发制作网站系列教程04
查看>>
ES6之Proxy 的巧用
查看>>
【视频教程】帝国CMS制作网站系列教程05
查看>>
【视频教程】帝国CMS制作网站系列教程06
查看>>
【HTML 教程】链接标签
查看>>
json2canvas:使用JSON生成小程序海报
查看>>
还学不会webpack?看这篇!
查看>>
canvas文本绘制自动换行、字间距、竖排等实现
查看>>
【HTML 教程】多媒体标签
查看>>