GBA开始,步入ARM开发的殿堂(初学者入门篇)

virginia 2004-02-03 11:59:09
GBA开始,步入ARM开发的殿堂(初学者入门篇)

1.为什么要选用GBA作为嵌入式系统学习平台
我们知道,任天堂公司的GameBoy Advance(简称GBA)一款非常出色的掌上游戏机,该产品占领了全球90%以上的掌上游戏机市场。
抛开游戏功能不说,GBA本身就是一个很好的嵌入式系统开发学习平台,因为GBA采用ARM7 CPU(RISC),拥有240×160 64K色彩色液晶、立体声系统、按键、DMA、通讯口、32K的CPU高速RAM(32Bit)和256K外部RAM(16Bit),还有可外接的游戏卡,可扩充至256Mbit的FLASH ROM以及用于保存进度的128K EEPROM(或FLASH、带电池记忆的SRAM)。
现在,许多开发者都开始学习嵌入式开发,并购买ARM实验板和JTAG仿真器。从成本的角度来看,ARM实验板和JTAG仿真器价格不菲,但是非常适合于拥有长期硬件开发经验的开发者;对于想踏入嵌入式开发殿堂的初学者而言,高昂的硬件价格以及过高的硬件调试门槛,自然成为阻碍学习嵌入式开发的拦路虎,许多初学者正是因为入门无路而中途放弃。从许多硬件工程师的开发经验来看,无论是低级的单片机开发还是高级的嵌入式系统设计,学习重点都应该在软件编程设计上,因为硬件部分都是有成熟的电路,熟悉以后自然水到渠成。因此,对于初学嵌入式开发的开发者而言,GBA也就成为最便宜、最容易入门的硬件平台,GBA可以让初学者把烦人的硬件调试抛开,而将注意力集中到学习软件开发。

开发套件 价格 使用难易程度 备注
ARM实验板+JTAG仿真器 昂贵 困难 适合于拥有长期硬件开发经验的工程师
GBALine+GBA 便宜 容易 适合于嵌入式开发初学者

2.GBA硬件平台的特点
从功能上来看,GBA包括声效处理,彩色LCD显示,以及输入输出等功能。GBA的显示屏幕是240×160像素,可以支持8bit(256色)或16bit(64k色),带有硬件加速能力、支持Alpha渲染(alpha blending)、旋转(rotation)、缩放(scaling)、镶嵌(mosaic)等效果。GBA的屏幕模式有6种,分别为Mode 0 - Mode5。
从使用者的角度来看,GBA涉及人的手,眼,耳等感觉器官;从开发者角度看,它是完整的嵌入式系统。

3. 必备的硬件GBALine
GBALINE是为GBA精心设计的一套外设,它完成PC<=>GBA的高速数据交换,以及数据存储,整套的价格也就百来块钱。
关于GBALine,具体的网址:http://www.sudt.com
编译好的二进制代码需要写入GBA卡带才能在真实的硬件平台上运行,这就需要一套下载存储系统帮助完成最后的工作,GBALine套件正是为实现此功能而诞生的。该套件包括GBALine下载线以及可擦写卡带,下载线直接将GBA游戏机与电脑连接,实现高速数据交换;可擦写卡带用于存储编译好的二进制代码。

4. 如何进行嵌入式开发
GBA的硬件和PC完全不一样,究竟该如何学习呢?难道还要去买GBA开发工具,要学GBA的开发语言?许多开发者都会有同样的疑问。不必紧张,只要开发者懂得C语言,会使用ARM C的编译系统,就可以开发GBA程序,使用GBA作为入门级嵌入式学习平台的优点就在此。目前,在Linux下和Windows下都有免费的编译工具,推荐的是DevKitAdv开发包,该开发包使用的是GCC编译器。当然,编译效率比较高的有SDT2.51、ADS1.2、metaware for ARM等等,但是这些都是收费的,对此有兴趣的开发者可以自己研究。源代码编辑工具推荐Visual C++。

5.模拟运行环境
PC端的模拟运行环境可以采用GBA模拟器,例如VisualboyAdvance等。编译好的ELF或BIN文件用模拟器打开就模拟硬件运行ARM程序。

6.硬件组成

6.1. GBA系统
CPU 32位RISC CPU(ARM7TDMI)/16.78MHz
兼容性 集成8位CISC CPU兼容于GBC,但是不能和GBA的CPU同时工作
内存 系统ROM 16K字节(GBC是2K)
工作RAM 32K字节+CPU外部256K字节(2倍周期)
VRAM 96K字节
OAM 64位×128
调色板RAM 16位×512(256色用于精灵,256色用于背景)
卡带记忆体 最多32M ROM或闪存+最多512Kbit SRAM或闪存
显示 240×160×RGB点、32,768色模拟显示、带有应将加速,支持旋转(rotation)、缩放(scaling)、Alpha渲染(alpha blending)、镶嵌(mosaic);6种屏幕模式,分别为Mode0-Mode5。
操作 控制键(A、B、L、R、START、SELECT和方向键)
声音 4声道(相应于GBC的声道)+2个CPU直接声道(PCM格式)
通讯 串口通讯(8位/32位、UART、多玩家、多用途、JOY总线)
卡带 同DMG和GBC一样,GBA的卡带使用32针接口,GBA自动检测插入卡带的类型并切换GBC或GBA模式。GB卡带、GB/GBC双重模式卡带、GBC专用卡带、GBA专用卡带都可以在GBA系统上使用。

6.2. GBALine下载线, http://www.sudt.com
PC端接口 LPT,自动设置
GBA端接口 SIO,串口通讯
数据传输率 115K Byte/s(随操作系统负荷的变化相应波动,范围:90KB/s~115KB/s)
电源 自供电

6.3. 64Mbit Flash Card
Flash容量 64Mbit
Flash擦写次数 10万次
NV-SRAM 32K Byte,带电池记忆

7.编译环境设置
DevKitAdv是免费的GCC开发包,目前的最新版本是R5-Beta-3,下面将以此版本为例介绍如何在windows nt、2000、xp平台下使用该开发包。
下载并安装DevKitAdv开发包到C:\devkitadv-r5-beta-3目录,进入该目录运行DevKit-Advance-R5-Beta-3.lnk文件,此时会出现蓝色的console控制台窗口。

在c:\devkitadv-r5-beta-3目录下有example、testsuite等目录,现在以testsuite目录为例示范如何通过命令行方式编译文件。
在上面的窗口中输入命令:
cd testsuite
make
之后就开始编译testsuite项目并生成agbmain.bin、agbmain.elf等文件,此时就可以先使用模拟器VisualBoyAdvance运行其中一个文件,或者通过GBALine下载线下载到Flash卡中实际运行。
除了命令行方式之外,也可以自己创建Visual C++的makefile工程文件,这是强烈推荐的方式。

最简单的入门过程就是这样,祝各位玩的开心!
...全文
259 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
gba开发文档。包括一份gba的cpu说明(中文翻译版)和ads环境下的gba开发模板(包括一个gba模拟器tool)。 // // HAM (c) Emanuel Schleussinger 2001/2002 // all rights reserved. // // Includes Doxygen compatible documentation // http://www.doxygen.org // /* ---------------------------------------------------------- REG_ --> Register location absolute adress of a register. includes typecasting for direct c writes. example: R_DISPCNT = value; MEN_ --> MEMORY address V_ --> Value A register related value used by macros and functions. Register Masks are also treated as values, this is currently in- consistent with C_ (constants), which they should be really. Anyone want to clean up? :-) C_ --> Constant Helpers that will never need change. holds values for bitfields that are hard to remember Also note, C_'s might get declared only once for a set of registers. If so, two rules apply: - the C_ declaration always is in the first register of the set. - the number of the register (example BG0CNT, BG1CNT) is set to C_BGXCNT. F_ --> Function a function returns a value suchas true M_ --> Macro A macro does stuff on its own, suchas switching a display mode or enabling sprites. This is what you will be using most of the time. Example: M_INTMST_ENABLE will enable interrupts TOOL_ --> Tool function Usually a collection of macros and/or functions. Propably not the fastest on earth, but very convienient. These are found at the end of the file. For example TOOL_INIT_ALL(1) sets up the display for BGMode 1 and inits sound and interrupts. Notes: ------ Some of the functions/macros are not the fastest on earth, i know that. Most of them are built for convienience rather than speed, and will suffice in the most cases. Also, please do not mail me about the fact that using REG= A | B | C | D is faster than what is being done here. I know that ;-) First of all, that only applies sometimes (if you need to set whole bitfields), and second of all, you can still do it on your own using the R_ defines. I do the same in my code, but it proves handy to have the base cases covered. Disclaimer: ----------- I'd like to be greeted in your demo if you use this header :) Be fair. Also, this source file and any other part of HAM must NOT: - be changed and redistributed as new versions, I would like to keep the main distribution point on my end. Help with any suggestions please, though. You WILL be mentioned for any help you did on HAM, and also, you can join in the team. --------------------------------------------------------- */

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧