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

具体思路:

由于开发板是将GPF4-7与灯相连,所以通过设置GPFCON控制寄存器将将LED灯相连的引脚4567设置为输出功能,将他们的上拉电阻设置为禁用(设置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             


 

 

你可能感兴趣的:(S3C2410)