S3C2410 MDK实验---ARM汇编语言实现跑马灯


具体思路:

由于开发板是将GPF4-7与灯相连,所以通过设置GPFCON控制寄存器将将LED灯相连的引脚4,5,6,7设置为输出功能,将他们的上拉电阻设置为禁用(设置GPFUP为0),通过修改GPFDAT寄存器的数值来实现灯的亮和灭,主要是将具体引脚对应的GPFUP设置为0,使之为低电平,从而使灯可以亮。再设置几个延迟将灯亮的时间延长。最后用C语言的mian函数调用LEDTEST函数即可。

主要ARM代码部分:

GPFCON  EQU    0x56000050   
GPFDAT  EQU    0x56000054 
GPFUP    EQU    0x56000058 
    AREA  LEDTESTARM,CODE,READONLY 
    EXPORT LEDTEST 
    IMPORT main 
    ENTRY 
LEDTEST 
    ;设置每个引脚的功能,设置GPF4-7为output 
    LDR R0,=GPFCON 
    LDR R1,=0x5500 
    STR R1,[R0] 
    ;禁止他们的上拉电阻 
    LDR R0,=GPFUP 
    LDR R1,=0xff00 
    STR R1,[R0] 
    LDR R2,=GPFDAT 
    ;下面进行跑马灯的循环 
 
LOOP2 
    LDR R1,=0xdf   
    STR R1,[R2] 
    BL DELAY2         
LOOP3 
    LDR R1,=0x7f   
    STR R1,[R2] 
    BL DELAY3   
LOOP1 
    LDR R1,=0xef  ;低电平设置 
    STR R1,[R2] 
    BL DELAY1      ;延迟 
LOOP4 
    LDR R1,=0xbf   
    STR R1,[R2] 
    BL DELAY4 
         
;延迟程序 
DELAY1 
    LDR R3,=0x8ffff            ;设置延长时间         
DELAY5 
    SUB R3,R3,#1              ;r3=r3-1             
    CMP R3,#0x0                ;将r3的值与0相比较 
    BNE DELAY5                ;比较的结果不为0(r3不为0),继续调用delay1,否则执行下一条语句 
    B LOOP4 
    MOV PC,LR                    ;返回 
 
 
DELAY2 
    LDR R3,=0x8ffff             
           
DELAY6 
    SUB R3,R3,#1                         
    CMP R3,#0x0               
    BNE DELAY6                 
    B LOOP3 
    MOV PC,LR                   
 
DELAY3 
    LDR R3,=0x8ffff               
DELAY7 
    SUB R3,R3,#1                           
    CMP R3,#0x0               
    BNE DELAY7               
    B LOOP1 
    MOV PC,LR                     
 
DELAY4 
    LDR R3,=0x8ffff               
DELAY8 
    SUB R3,R3,#1                           
    CMP R3,#0x0               
    BNE DELAY8               
    B LOOP2 
    MOV PC,LR               
     
    END         

相关内容