;******************************************************************************
; File:init.S
; 功能:通过它转入C程序
;******************************************************************************
AREA Init, CODE, READONLY
IMPORT LedMain
start
ldr r0, =0x56000010 ; WATCHDOG寄存器地址
mov r1, #0x0
str r1, [r0] ; 写入0,禁止WATCHDOG,否则CPU会不断重启
ldr sp, =3*1024 ; 设置堆栈
bl LedMain ; 调用C程序中的main函数
halt_loop
b halt_loop
END
;**************************
;main.c
;******************************
/*端口F寄存器预定义 用PORTB GPB5,6,7,8对应LED1,2,3,4*/
#define rGPFCON (*(volatile unsigned *)0x56000010)
#define rGPFDAT (*(volatile unsigned *)0x56000014)
#define rGPFUP (*(volatile unsigned *)0x56000018)
#define LED1_ON() (rGPFDAT &= ~0x20)
#define LED2_ON() (rGPFDAT &= ~0x40)
#define LED3_ON() (rGPFDAT &= ~0x80)
#define LED4_ON() (rGPFDAT &= ~0x100)
#define LED1_OFF() (rGPFDAT |= 0x20)
#define LED2_OFF() (rGPFDAT |= 0x40)
#define LED3_OFF() (rGPFDAT |= 0x80)
#define LED4_OFF() (rGPFDAT |= 0x100)
#define time 10
void Delay(unsigned int );
void Ledtest(void);
/***************************************************************************
Function name: LedMain
Parameter : void
Description : 初始化系统,端口,并调用跑马灯显示实验函数
Return : void
Date :13/2/09
Autor & date :wethty
****************************************************************************/
int LedMain()
{
/*初始化*/
rGPFCON=0x15400; /*设置I/O口GPB5~8为输出属性*/
rGPFUP=0xfff; /*禁止GPB端口的上拉*/
rGPFDAT=0xffff; //输出全置1
while(1)
{
Ledtest();
}
}
void Delay(unsigned int x)
{
unsigned int i,j;
while(x--)
for(i=0;i<0xff;i++)
for(j=0;j<0xff;j++);
}
void Ledtest()
{
LED1_ON(); //LED点亮/熄灭状态设置
Delay(time);
LED2_ON(); //LED点亮/熄灭状态设置
Delay(time);
LED3_ON(); //LED点亮/熄灭状态设置
Delay(time);
LED4_ON(); //LED点亮/熄灭状态设置
Delay(time);
LED1_OFF(); //LED点亮/熄灭状态设置
Delay(time);
LED2_OFF(); //LED点亮/熄灭状态设置
Delay(time);
LED3_OFF(); //LED点亮/熄灭状态设置
Delay(time);
LED4_OFF();
Delay(time);
rGPFDAT = 0x00;//全亮
Delay(time);
rGPFDAT = 0xfff;// 全灭
Delay(time);
}