一、arm9裸机开发之流水灯实验

1.管脚介绍:

1)与LED模块相关的原理图:

 一、arm9裸机开发之流水灯实验_第1张图片

 

 

2)由上图可以看出,4个LED灯所对应的管脚:

名称

对应管脚

管脚功能

对应逻辑

LED1

GPB5

内部上拉输出

0:灯亮

1:灯灭

LED2

GPB6

内部上拉输出

0:灯亮

1:灯灭

LED3

GPB7

内部上拉输出

0:灯亮

1:灯灭

LED4

GPB8

内部上拉输出

0:灯亮

1:灯灭

 

2.相关的寄存器及其功能:

 

注释:

①     GPBCON   :   用于配置端口B的各个管脚功能

②     GPBDAT    :   端口B的数据寄存器

③     GPBUP      :   用于配置端口B是否使用上拉功能

 一、arm9裸机开发之流水灯实验_第2张图片

 

 

3.程序流程图:

 

                 

 

 

 

4.程序设计:

 

  ①    Makefile

LED_display.bin : LED_display.S
    arm-linux-gcc -g -c -v -o LED_display.o $<
    arm-linux-ld -Ttext 0x0000000 -g LED_display.o -o LED_display_elf
    arm-linux-objcopy -O binary -S LED_display_elf $@
clean :
    rm -f LED_display.bin LED_display_elf *.o

 

 

 ②    LED_displays.S

#define GPBCON    0x56000010
#define    GPBDAT    0x56000014
#define    GPBUP    0x56000018


#define LED1_on    (1 << 5)
#define    LED2_on (1 << 6)
#define LED3_on    (1 << 7)
#define LED4_on    (1 << 8)

#define    DELAY_nand 0x10000    /*在nand flash里面用这个延时值*/
;#define DELAY_sdram 0x1000000    /*在SDRAM里面用这个*/

.text
.global _start
_start:
/**************把4个LED管脚置为输出*****************/
    ldr    r0 , =GPBCON
    ldr    r1 , [r0]        /*把GPBCON里的内容加载到r1里*/
    bic    r1 , r1 , #0x3FC00    /*操作数取反码或上r1,用于清零工作*/
    orr    r1 , r1 , #0x15400
    str    r1 , [r0]    

/**************使能4个LED管脚的上拉功能*************/
/*********如果不使能下面注释的地方要加上去**********/

    ldr    r0 , =GPBUP
    ldr    r1 , [r0]
    bic    r1 , r1 , #0x1E0
;    orr    r1 , r1 , #0x1E0
    str    r1 , [r0]

    ldr    r0 , =GPBDAT
;    ldr    r1 , [r0]
;    bic    r1 , r1 , #0x1E0    
;    orr    r1 , r1 , #0x1E0
;    str    r1 , [r0]        /*此时4个LED等全灭*/

/*******************流水灯灯开始*********************/
    ldr    r1 , [r0]
LED_DISPLAY:
    /*LED1亮,其余灭*/
    bl    DELAY
    bic    r2 , r1 , #LED1_on
    str    r2 , [r0]
    bl    DELAY

    /*LED2亮,其余灭*/
    bic    r2 , r1 , #LED2_on
    str    r2 , [r0]
    bl    DELAY

    /*LED3亮,其余灭*/
    bic    r2 , r1 , #LED3_on
    str    r2 , [r0]
    bl    DELAY

    /*LED4亮,其余灭*/
    bic    r2 , r1, #LED4_on
    str    r2 , [r0]
    b    LED_DISPLAY

/***************延时函数****************/
DELAY:
    ldr    r2 , =DELAY_nand
DELAY1:
    sub    r2 , r2 , #0x1
    cmp    r2 , #0x0
    bne    DELAY1
    mov    pc , lr

/****************END******************/






你可能感兴趣的:(一、arm9裸机开发之流水灯实验)