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

1.管脚介绍:

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

 

 

 

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是否使用上拉功能

 

 

 

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******************/






  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值