选择“File|New…”菜单,在对话框中选择Project,如图1.5所示,新建一个项目文件。
图中示例的项目名为Exp6.mcp。
图1.5新建项目
点“set…”按钮可为该项目选择路径如图1.6所示,选中CreatFolder选项后将以图1.5中的ProjectName为名创建目录,这样可以将所有与该项目相关的文件放到该项目目录下,便于管理项目。
图1.6保存项目
在图1.5中项目模板列表中我们选择ARMExecutableImage通用模板。
我们随后将一步一步的把它配置成针对我们ARM3000开发板的模板44B0ARMExecutableImaage,并把它拷贝到ADS1.2安装目录下的Stationery目录中<所有的项目模板都在此目录下)。
以后我们新建项目时,在项目模板列表中直接选中44B0ARMExecutableImaage模板选项,就不必每次重新配置模板了。
2)在新建的项目中,如图1.7所示,选择Debug版本,使用Edit|DebugSettings菜单对Debug版本进行参数设置。
图1.7选择版本
在DebugSettings对话框中选择TargetSettings项,如图1.8所示。
在Post-linker一栏中选择ARMfromELF,点击右下角的Apply使其有效。
图1.8TargetSettings
在DebugSettings对话框中选择ARMLinker项,如图1.9。
在Output下的Linktype中有三种类型的连接方式,我们常用的是Simple和Scattered两种。
如果程序需要用到标准C库函数的话需要按Scattered进行连接地址的设置。
如果用不到标准C库函数的话,请选择Simple选项。
下面以Simple方式设置为例:
在ARMLinker项的Output选项卡中,我们选择Simple选项,如图1.9所示。
在Simpleimage框中设置连接的Read-Only<只读)和Read-Write<读写)地址。
地址0x0c080000是开发板上SDRAM的真实地址,是由系统的硬件决定的;0x0c200000指的是系统可读写的内存地址。
也就是说0x0c080000~0xC1fffff之间是只读区域,存放程序的代码段,在0xC200000开始是程序的数据段。
图1.9设置连接地址范围
点击Layout选项卡,在Layout选项卡的Placeatbeginningofimage框中设置程序的入口模块。
如图1.10所示,指定在生成的代码中,程序从44binit.s开始运行的。
Object设为44binit.o,section设为init。
图1.10设置入口模块
3)在DebugSettings对话框中选择ARMfromELF项,如图1.11。
在Outputfilename框中设置输出文件名为system.bin,这就是要下载到开发板的嵌入式应用程序文件。
图1.11设置输出文件名
4)回到如图1.7所示的项目窗口中,选择Release版本,使用Edit|ReleaseSettings菜单对Release版本进行参数设置。
参照前文设置Release版本的Post-linker、连接地址范围、入口模块和输出文件。
5)回到项目窗口中,选择Targets选项卡,如图1.12所示。
选中DebugRel版本,按Del键将其删除。
图1.12删除DebugRel版本
6)设置完成后,可以将该新建的空项目文件作为模板保存以便以后使用。
在ADS1.2软件安装目录下的Stationery目录下新建名为ARM44B0XSimpleImage的模板目录,再将刚设置完的mcp项目模板文件存放到该目录下。
这样以后新建项目的时候,就能看到图1.13所示以“ARM44B0XSimpleImage”为名字的模板了。
图1.13显示44B0ARM模板
<提示>
建议同学们将老师提供的“ARM44B0XScatteredImage”子目录直接拷贝到ADS1.2安装目录下的Stationery目录中,这样也能在新建项目对话框中看到这个模板。
此模板为Scattered版本,其中已经设置好针对本开发板的参数。
3.建立项目文件
配置好针对UP-ARM3000的开发环境后,可以执行菜单Project|AddFiles把和项目相关的所有文件加入到项目中。
ADS1.2不能自动按文件类别对这些文件进行分类,需要的话用户可以执行菜单Project|CreateGroup创建文件组,然后分别将不同类的文件加入到不同的组,以方便管理。
如图1.14所示。
更为简单的办法是,在新建项目时ADS创建了和项目同名的目录,在该目录下按类别创建子目录并存放项目文件。
然后用鼠标选中项目子目录,将其拖动到项目文件窗口,松开鼠标。
这样ADS将以子目录名建立同名文件组并以此对文件分类。
这里我们把init和STARTUP两个目录拷贝到新建的项目目录下,然后选中这两个目录,拖动到项目文件窗口,松开鼠标。
这样ADS将以init和STARTUP目录名建立同名文件组并以此对文件分类。
图1.14加入项目文件
双击图1.14中的Main.c打开该文件,可以看到Main(>函数的内容:
intmain(void>
{
ARMTargetInit(>。
//开发版初始化
LCD_Init(>。
LCD_ChangeMode(DspTxtMode>。
//转换LCD显示模式为文本显示模式
LCD_Cls(>。
//文本模式下清屏命令
LCD_printf("Helloworld!
\n">。
//向液晶屏输出
Uart_Printf("\nHelloworld!
\n">。
//向串口输出
while(1>。
}
读者可以查看其他源文件的内容以对系统运行有所了解。
可以发现ADS的文本编辑器可以按语法分颜色显示,读者可以根据喜好在Edit菜单下的Preferences窗口中进行设置。
4.进行程序的在线仿真、调试
1>回到项目窗口选中Debug版本,执行菜单Project|Make对项目进行编译连接。
在出现的错误/警告窗口中选择某错误/警告信息,ADS会自动打开相应源文件并用箭头指向出错的文本行。
如果某个源文件被修改,重新编译时ADS会自动同步各文件的日期信息。
2>在ADS中执行菜单Project|Debug启动ADS1.2的调试工具AXD。
3>在AXD中执行菜单Options|ConfigureTarget对AXD进行设置。
如图1.15所示。
选择ADP即远程调试,点Configure按钮进一步设置具体参数,如图1.16所示。
图1.15设置AXD参数
4)在图1.16中点Select按钮选择远程连接为ARMethernetdriver,点Configure按钮输入仿真器的IP地址。
如果用户使用的是并行口仿真器,请输入127.0.0.1即可。
图1.16设置远程连接
5)等待程序装载完毕以后,通过Execute|Go菜单以及Execute|Stop<或者工具栏中的相应按钮)运行或暂停程序。
程序暂停后在窗口中将显示出程序暂停的位置。
6)通过Execute|Step菜单<或者工具栏中的相应按钮)可以单步运行程序。
也可以使用StepIn、StepOut菜单命令进入或者跳出函数的调用。
RunToCursor命令运行到光标位置。
7)程序停止后可以通过ProcessorViews|Sources菜单查看源文件,并可在适当位置按F9设置端点。
8)使用在ProcessorView菜单下的Registers、Variables和Memory命令可以查看工作寄存器或者内存变量。
读者可以逐一地尝试,为以后调试程序打下基础。
<提示>
在进行调试时在ADS中必须选择当前项目的Debug版本,如果选择Release版本则无法正常调试程序。
实验二ARM汇编程序实验
一、实验目的
1.掌握ARM汇编指令的含义和使用方法。
2.了解ARM指令灵活的第二操作数。
3.学习简单汇编程序的编写。
二、实验内容
1.使用ARM的数据传送指令,能够访问寄存器和存储器。
2.使用相关指令完成数据加/减运算及逻辑运算。
三、实验设备及工具
1.硬件:
UP-NETARM3000实验箱、JTAG仿真器、PC机。
2.软件:
PC机操作系统WinXP、ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。
四、实验原理
实验参考程序:
五、实验步骤
1.启动ADS1.2,建立一个项目文件。
然后建立汇编源文件,添加到项目中,编写实验程序。
2.编写好实验程序后,编译连接项目,选择Project—>Debug,启动AXD进行软件仿真调试。
或者点击Debug图标。
3.调试并观察程序执行过程
1)AXD调试模式,选择Options->ConfigureTarget,如图:
2)选择软件仿真,点击ARMUL,并点击OK。
3)点击LoadImage,装载我们的.axf文件
4)打开寄存器窗口说明:
使用鼠标左键选择一个寄存器,然后右击,在Format项中选择显示格式Hex、Decimal等,如图所示。
单步运行程序,观察寄存器值的变化。
说明:
有变化的寄存器会以红色显示,如图。
4.编写、调试、观察以下程序
通过课本P61页【例3.5】【例3.6】,掌握无符号数和有符号数的相关运算。
六、思考题
1.指令“MOVR0,#0x12345678”是否正确?
为什么?
2.将参考程序中应用CMP指令的代码,功能改为“若<5*Y/2)>(2*X>,则R5=R5|0x000000FF,否则R5=R5&0XFFFF0000”,程序应如何修改?
3.更改参考程序X的值为200,Y的值为163,单步运行程序,每执行一步程序的结果是多少?
实验三GPIO输出控制实验
一、实验目的
1.熟悉S3C44B0ARM芯片的GPIO输入输出配置方法。
2.通过实验掌握ARM芯片I/O控制LED显示的方法。
。
3.进一步熟悉ARM汇编语言程序设计步骤。
二、实验内容
1.熟悉ARM芯片I/O口的编程配置方法。
2.熟悉S3C44B0芯片I/O口配置寄存器。
3.通过编程实现GPIO的E口输入,A口输出来控制实验平台上的LED。
三、实验设备及工具
1.硬件:
UP-NETARM3000实验箱、JTAG仿真器、PC机。
2.软件:
PC机操作系统WinXP、ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。
四、实验原理
S3C44B0芯片上共有71个多功能I/O引脚,它们分为7组I/O端口:
●2个9位I/O端口<端口E和F)。
●2个8位I/O端口<端口D和G)。
●1个16位I/O端口<端口C)。
●1个10位I/O端口<端口A)。
●1个11位I/O端口<端口B)。
每组端口都可以通过软件配置寄存器来满足不同系统和设计的需要。
1)流程示意图
延时
2>部分参考程序
3>电路原理图
VCC3.3
五、实验步骤
1.启动ADS1.2,建立一个项目文件。
然后建立汇编源文件,添加到项目中,编写实验程序。
2.编写程序,实现用E口输出控制LED灯亮、灭的汇编程序。
3.单步运行程序,查看工作寄存器;并观察LED灯的亮、灭情况。
六、思考题
1.用C语言如何实现上述程序的编写。
实验四GPIO输入控制实验
一、实验目的
1.熟悉S3C44B0ARM芯片的GPIO输入输出配置方法。
2.通过实验掌握ARM芯片I/O控制LED显示的方法。
。
3.进一步熟悉ARM汇编语言程序设计步骤。
二、实验内容
1.熟悉ARM芯片I/O口的编程配置方法。
2.熟悉S3C44B0芯片I/O口配置寄存器。
3.通过编程实现GPIO的E口输入,A口输出来控制实验平台上的LED。
三、实验设备及工具
1.硬件:
UP-NETARM3000实验箱、JTAG仿真器、PC机。
2.软件:
PC机操作系统WinXP、ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。
四、实验原理
S3C44B0芯片上共有71个多功能I/O引脚,它们分为7组I/O端口:
●2个9位I/O端口<端口E和F)。
●2个8位I/O端口<端口D和G)。
●1个16位I/O端口<端口C)。
●1个10位I/O端口<端口A)。
●1个11位I/O端口<端口B)。
每组端口都可以通过软件配置寄存器来满足不同系统和设计的需要。
1)流程图
判断E口输入情况
2>部分参考程序
3>电路原理图
GPE7
输入
五、实验步骤
1.启动ADS1.2,建立一个项目文件。
然后建立汇编源文件,添加到项目中,编写实验程序。
2.编写实现E口输入的汇编程序,使用JTAG进行仿真调试。
3.编写程序,实现用A口输出控制LED灯亮、灭的汇编程序。
4.编写程序,通过E口输入来控制A口的LED灯亮、灭,A口、E口的配置采用调用子程序的方式。
5.单步运行程序,查看工作寄存器;并观察LED灯的亮、灭情况。
六、思考题
1.用C语言如何实现上述程序的编写。
实验五PWM信号实验
一、实验目的
1.了解PWM信号的特点。
2.掌握S3C44B0X产生PWM信号的方法。
3.练习如何优化代码。
二、实验内容
1.定时器工作方式设置。
2.配置GPIO为PWM信号输出引脚。
三、实验设备及工具
1.硬件:
UP-NETARM3000实验箱、JTAG仿真器、PC机。
2.软件:
PC机操作系统WinXP、ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。
四、实验原理
1.实验电路示意图如下:
PWM信号输出
2.实验主程序框图如下:
停机等待
3.实验参考程序:
PCONEEQU0X01D20028
PDATEEQU0X01D2002C
PUPEEQU0X01D20030
TCFG0EQU0X01D50000
TCFG1EQU0X01D50004
TCONEQU0X01D50008
TCNTB3EQU0X01D50030
TCMPB3EQU0X01D50034
TCNTO3EQU0X01D50014
CMD1EQU0X00A0000
CMD2EQU0X0090000
AREAtime,CODE,READONLY
ENTRY。
程序入口
CODE32。
指定为32位的ARM程序代码
START
LDRR1,=PCONE
LDRR0,=0X02000
STRR0,[R1]
LDRR1,=PUPE。
不配置E口的上拉电阻
LDRR0,=0X1FF
STRR0,[R1]
LDRR1,=TCFG0
LDRR2,=0X0000FF00
STRR2,[R1]
LDRR1,=TCFG1
LDRR2,=0X02000
STRR2,[R1]
LDRR1,=TCNTB3
LDRR2,=0XFFFFFFFF
STRR2,[R1]
LDRR1,=TCMPB3
LDRR2,=0X88888888
STRR2,[R1]
LDRR1,=TCON
LDRR2,=CMD1
STRR2,[R1]
LDRR1,=TCON
LDRR2,=CMD2
STRR2,[R1]
WAITBWAIT
END
五、实验步骤
1.启动ADS1.2,建立一个项目文件。
然后建立汇编源文件,添加到项目中,编写实验程序。
2.编写程序实现PWM输出控制LED灯亮度,使用JTAG进行仿真调试。
3.单步运行程序,查看工作寄存器;并观察LED灯的情况。
4.修改、完善源程序,实现程序的模块化。
六、思考题
1.在进行汇编模块化编程的时候如何建立堆栈,实现对现场的保护。
2.用C语言如何实现上述程序的编写。
实验六定时中断实验
一、实验目的
1.了解S3C44B0X处理器的定时器应用方法。
2.掌握S3C44B0X处理器上中断的程序编写。
3.进一步熟悉平台硬件及其驱动程序的编写。
二、实验内容
1.设置并启动定时器。
2.设置中断,编写定时器中断服务程序,对中断次数进行计数并用LED显示结果。
三、实验设备及工具
1.硬件:
UP-NETARM3000实验箱、JTAG仿真器、PC机。
2.