FriendlyARM Tiny210开发板硬件基础 第一篇--点亮LED

  • **硬件平台:FriendlyARM Tiny210
  • **编译环境:ubuntu12.04
  • **编译器:arm-linux-gcc 4.6

    在ARM硬件的操作,本质上就是操作寄存器。
    所以要点亮开发板上的第一个LED灯,就要先找到LED所接的引脚以及控制该引脚的寄存器。
    在手册中查到:
    LED1 --> GPJ2_0
    LED2 --> GPJ2_1
    LED3 --> GPJ2_2
    LED4 --> GPJ2_3
    

    控制该组引脚的寄存器有:
    -*GPJ2CON (寄存器地址为:0xE0200280)
    用来设置GPJ2的每个引脚的功能,该寄存器共有32位,分别控制GPJ2的八个引脚(每四位控制一个引脚),功能如下:
    0000 = Input –输入
    0001 = Output – 输出
    0010 = MSM_DATA[0]
    0011 = KP_COL[1]
    0100 = CF_DATA[0]
    0101 = MHL_D7
    0110 ~ 1110 = Reserved
    1111 = GPJ2_INT[0]
    我们要点亮LED灯就要把GPJ2的0-4号引脚设置为输出,即:
    将GPJ2CON的前16设置为 0x1111.

    -*GPJ2DAT (地址:0xE0200284)
    共有8位 ,用于读取或设置GPJ2各个引脚的高低电平 1为高 0为低。
    每一位控制一个引脚,我们要点亮哪个LED灯就要把对应的位设置为低电平。

使用ARM汇编的代码如下:
**流水灯

.text
.globl _start

_start:

#   ****硬件初始化****************
#   将GPJ2CON[15:0]设置为输出

    LDR r1, =0xE0200280
    LDR r0, =0x1111
    STR r0,[r1]

#   **设置GPJ2DAT的地址
    LDR r1, =0xE0200284

# *****初始化完成**********

#   ***程序主循环*****
main:
#   **点亮第一盏灯
    LDR r2, =0x01
    MVN r0, r2      # r0 = ~r2 即r0 = 0x1110
    STR r0, [r1]
    BL delay

#   **点亮第二盏灯
    LDR r2, =0x02
    MVN r0, r2
    STR r0, [r1]
    BL delay

#   **点亮第三盏灯
    LDR r2, =0x04
    MVN r0, r2
    STR r0, [r1]
    BL delay

#   **点亮第四盏灯
    LDR r2, =0x08
    MVN r0, r2
    STR r0, [r1]
    BL delay

#   **跳到main处  循环执行
    B main

stop:
    B stop

#   ************************************


#   ====延时========
delay:
    LDR r4, =0xfffffff
loop:
    SUBS r4, r4, #1
    BNE loop
    MOV pc, lr
#=======================

Makefile:

led.bin : led_test.o
    #-Ttext 0x20008000 将生成的代码断映射到0x20008000地址
    #arm-linux-ld 将*.o文件生成ELF文件  该文件不能在裸机上运行
    arm-linux-ld -Ttext 0x20008000 -o led.elf $^

    #将ELF格式的二进制文件转化为bin格式的文件
    #-O binary要转化的文件格式为二进制
    arm-linux-objcopy -O binary led.elf len.bin

%.o : %.S
    arm-linux-gcc -o $@ $< -c

%.o : %.C
    arm-linux-gcc -o $@ $< -c

clean:
    rm *.o *.elf *.bin *.dis -f

这样一个简单的汇编版的流水灯程序就完成了。

c语言写的请见下篇–汇编调用C语言,里面的例子还是流水灯程序 不过是用c语言写的。

你可能感兴趣的:(ARM基础)