一.LED 跑马灯
编写及编译软件:ADS 1.2
所用开发板:MINI2440(ARM 920t)
启动汇编代码 start.s
area start,code,readonly
reset
ldr sp,=4096
import main
b main
end
头文件 def.h
#ifndef _DEF_
#define _DEF_
#define rGPBCON (*((volatile unsigned *)0x56000010)) //定义rGPBCON为状态寄存器的物理地址
#define rGPBDAT (*((volatile unsigned *)0x56000014))//定义rGPBDAT为数据寄存器的物理地址
#define LED1_ON rGPBDAT &=(~(1<<5))//第五位置0
#define LED2_ON rGPBDAT &=(~(1<<6))
#define LED3_ON rGPBDAT &=(~(1<<7))
#define LED4_ON rGPBDAT &=(~(1<<8))
#define LED1_OFF rGPBDAT |=(1<<5)//第五位置1
#define LED2_OFF rGPBDAT |=(1<<6)
#define LED3_OFF rGPBDAT |=(1<<7)
#define LED4_OFF rGPBDAT |=(1<<8)
#endif
主函数 main.c
#include"def.h"
int delay(unsigned int a)//延迟函数
{
while(a--);
return 0;
}
int main(int argc,char *argv[])
{
rGPBCON |=0x15400;
while(1)
{
LED1_ON;
delay(100000);
LED2_ON;
delay(100000);
LED3_ON;
delay(100000);
LED4_ON;
delay(100000);
LED1_OFF;
delay(100000);
LED2_OFF;
delay(100000);
LED3_OFF;
delay(100000);
LED4_OFF;
delay(100000);
}
return 0;
}
二.按键控制LED
启动汇编代码 start.s
area start,code,readonly
b reset
reset
ldr sp,=1024*4
import main
b main
end
头文件 def.h
#ifndef _def_
#define _def_
#define rGPBCON (*((volatile unsigned *)0x56000010))
#define rGPBDAT (*((volatile unsigned *)0x56000014))
#define GPGCON (*((volatile unsigned *)0x56000060))
#define rGPGDAT (*((volatile unsigned *)0x56000064))
#define LED1_ON rGPBDAT&=(~(0x1<<5))
#define LED2_ON rGPBDAT&=(~(0x1<<6))
#define LED3_ON rGPBDAT&=(~(0x1<<7))
#define LED4_ON rGPBDAT&=(~(0x1<<8))
#define LED1_OFF rGPBDAT|=(0x1<<5)
#define LED2_OFF rGPBDAT|=(0x1<<6)
#define LED3_OFF rGPBDAT|=(0x1<<7)
#define LED4_OFF rGPBDAT|=(0x1<<8)
#define KEY1 (rGPGDAT&=(0x1)) 一开始在做的时候没有加最外边的括号,结果虽然编译没错,但是怎么做都无法实现按键控制,看了宏定义后的
#define KEY2 (rGPGDAT&=(0x1<<3)) 优先级很重要啊,所以以后最好养成加个括号的习惯!
#define KEY3 (rGPGDAT&=(0x1<<5))
#define KEY4 (rGPGDAT&=(0x1<<6))
#define KEY5 (rGPGDAT&=(0x1<<7))
#define KEY6 (rGPGDAT&=(0x1<<11))
#endif
主函数 main.c
#include"def.h"
int delay(unsigned a)
{
while(a--);
return 0;
}
int main()
{
rGPBCON =0x15400;
GPGCON =0x80A882;
while(1)
{
if(KEY1==0)
LED1_ON;
if(KEY2==0)
LED2_ON;
if(KEY3==0)
LED3_ON;
if(KEY4==0)
LED4_ON;
if(KEY5==0)
{
LED1_OFF;
delay(10000);
LED2_OFF;
delay(10000);
LED3_OFF;
delay(10000);
LED4_OFF;
delay(10000);
}
if(KEY6==0)
{
LED1_ON;
delay(10000);
LED2_ON;
delay(10000);
LED3_ON;
delay(10000);
LED4_ON;
delay(10000);
}
}
return 0;
}