ARM技术已经开展普及多年了.我以前也略为看过下书,但也只是现在才开始修炼.
学习板是GEC2410开发板.
仿真器采用MDS-JTAG仿真器.
实验1:LED控制
看了有关ARM9的汇编语言.有:LDR, MOV,ADD,SUB,等...一个控制LED闪光的小程序.
是冯老师写的.
GPFCON   EQU    0x56000050  
GPFDAT   EQU    0x56000054
GPFUP    EQU    0x56000058 
 EXPORT LEDTEST
  AREA  LEDTESTASM,CODE,READONLY   ;该伪指令定义了一个代码段,段名为LEDTESTASM,属性只读
LEDTEST
 ;设置GPF4-GPF7为output
    ldr  r0,=GPFCON          
    ldr  r1,=0x5500
    str  r1,[r0]
   
    ;禁止GPF4-GPF7端口的上拉电阻
    ldr  r0,=GPFUP
    ldr  r1,=0xf0
    str  r1,[r0]
   
    ;将数据端口F的数据寄存器的地址附给寄存器r2
    ldr  r2,=GPFDAT
 
    ;×××灯循环
ledloop1
    ldr  r1,=0xa0            
    str  r1,[r2]              ;使GPF7输出高电平,D9-D12灯会灭
    bl   delay1                ;调用延迟子程序
 
ledloop2 
    ldr r1,=0x50
    str r1,[r2]               ;使GPE7输出低电平D9-D12灯亮
    bl  delay2                 ;调用延迟
   
    ;延迟
delay1
 ldr r3,=0x0ffff           ;设置延迟的时间
delay3
 sub r3,r3,#1              ;r3=r3-1           
 cmp r3,#0x0               ;将r3的值与0相比较
 bne delay3                ;比较的结果不为0(r3不为0),继续调用delay1,否则执行下一条语句
 b ledloop2
 mov pc,lr                 ;返回
 
 ;延迟
delay2
 ldr r3,=0x0ffff           ;设置延迟的时间
delay4
 sub r3,r3,#1              ;r3=r3-1           
 cmp r3,#0x0               ;将r3的值与0相比较
 bne delay4                ;比较的结果不为0(r3不为0),继续调用delay1,否则执行下一条语句
 b ledloop1
 mov pc,lr                 ;返回
   
    END                       ;程序结束符
我改了一下.用ADS编译,但ADS的设置如下.:
TARGETNAME : DebugRel     ;生成映像文件包含了基本的调试信息
POST-LINKER : ARMFORELF
下面设置ARM-LINKER很重要:
OUTPUT :
LINKERTYPT: SIMPLE   ;是默认的链接方式,它链接生成简单的ELF格式的目标文件,使用的是链接器选项中指定的地址映射方式.
RO BASE :  0X30000000  ;这是READ-ONLY 段,RO BASE 设置为包含RO输出段的加载和执行地址,地址值必须字对齐(RO BASE 的设置与硬件地址及生成的映像程序是相关的。)
当我们是在调试程序时,RO BASE 段设在SDRAM地址上,当是编译烧写程序,应该设置为0X00000000
RW BASE : 不设置  ;即READ -WRITE段。这个文本框设置了包括RW和ZI(ZERO-INITIALIZED)输出段的运行地址。如果选中了SPLIT选项,链接器生成的映像文件将包含两个加载域和两个运行域。此时,在RW BASE 中所输入地地址为包含RW和ZI输出段的域设置了加载域和运行域地址。(RW BASE 必须设置成SDRAM内的地址)
这段太长了,我现在还未看明。。。。。。
OPTIONS 设置:
IMAGE ENTRY POINT :__ENTRY         在这中加入启动代码的入口地址,ARM程序将从这里开始运行。
LAYOUT 设置:
OBJECT/SYMBOL : START.O          填入启动代码的文件名,为输出文件,
SECTION: SELBOOT        填入启动程序的段名。
 
在DEBUG SETTING 中选择ARM FROMELF ,在OUTPUT FORMAT 选项择输出生成的烧录文件格式。可以是PLAIN BINARY 生成*.BIN文件,也可以是INTEL 32 BIT HEX ,生成HEX文件。
在OUTPUT FILE NAME 中可以写入生成的文件的文件名。
 
设置好后,就MAKE编译;