Board logo

标题: ARM从零开始学--点灯 [打印本页]

作者: m1_ljp    时间: 2013-4-16 10:48     标题: ARM从零开始学--点灯

首先,我也是个初学者,刚学会点灯^_^,就先把这灯点起来,和同样的或者还在迷茫着点灯的初学者一起学习^_^



介绍下我用的环境:ads1.2 proteus7.1 PLC2124
哈哈 虚拟着玩 好更容易的参与

PLC2124片内有256KB的FLASH和16K的RAM,直接先当单片机使。
随便建立个后缀.S的文档,把下面的代码copy过去。

    AREA SAMPLE,CODE,READONLY

    ENTRY

START

    LDR   R0,=0X00000000        ;将P0口全部配置为GPIO口
    LDR   R1,=0XE002C000        INSEL0地址
    STR   R0,[R1]
        
    LDR   R0,=0xffffffff        ;IO口全部设置为输出
    LDR   R1,=0xe0028008               ;IO0DIR地址
    STR   R0,[R1]               ;

LOOP
    LDR   R0,=0x55555555        ;间隔高电平输出
    LDR   R1,=0xe0028004               ;IO0SET地址
    STR   R0,[R1]
   
    LDR   R0,=0XAAAAAAAA
    LDR   R1,=0XE002800C         ;IO0CLR地址
    STR   R0,[R1]
   
    BL    DELAY
   
    LDR   R0,=0X55555555
    LDR   R1,=0XE002800C         ;IO0CLR地址
    STR   R0,[R1]
   
    LDR   R0,=0xAAAAAAAA        ;间隔高电平输出
    LDR   R1,=0xe0028004               ;IO0SET地址
    STR   R0,[R1]
   
    BL    DELAY
   
    B    LOOP                 ;跳回去START,一个死循环
   
DELAY   
    MOV R0,#100
0
    MOV R1,#1000
1
    SUBS R1,R1,#1
    BNE %B1
    SUBS R0,R0,#1
    BNE %B0
   
    MOV PC,LR

    END

设置编译选项并编译:
1.在ADS1.2环境里新建一个可执行镜像项目文件,将上面的.s文件添加到项目。
2.在Edit->DebugRel Settings..->Target Settings->ost-linker里选择 ARM fromELF
                             ->ARM Linker->Output->RO Base里填0x00
                                         ->Options->Image entry point里填0x00
                             ->ARM fromELF->Output format里选择Inetl 32 bit Hex
                                          ->Output file name里填led.hex,这个反正后缀是hex就行,生成proteus能仿真的hex文件
3.点击OK,编译。

在proteus里建立硬件电路,也就拉几个灯出来就可以了,把执行文件选到led.hex,运行,灯就该点着了。


(原文件名:未命名.jpg)



一般上电复位后,PC都是指到0x0000这个地址的,单片机也是这样,如果不考虑中断什么的,要执行的代码从0地址一直往下放就是,这个点灯的程序也是这样的,后面的编译选项就是把代码和入口地址都设置到0地址,也就是系统一复位,就跟着程序执行了,点灯的程序也简单,先IO口设置为通用IO口,交错高低电平,延时,反过来,再延时,死循环,灯就闪了。

test2124IO.rar(42 KB)




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0