嵌入式S3C2440开发板LED灯和按键(去抖)驱动实验
2011-07-09 12:35
435 查看
LED灯驱动实验1、用ADS开发软件新建一个工程,在工程中新建一个start.s文件,在其中添加如下代码:area start,code,readonly //注意:声明代码段start,该行不能顶格写(具体为什么还不清楚)
reset
ldr sp ,=4096
import main
bl main
end
2、新建一个def.h文件,在其中添加如下代码:#ifndef _DEF_H
#define _DEF_H
#define rGPBCON (*((volatile unsigned *)0x56000010))
#define rGPBDAT (*((volatile unsigned *)0x56000014))
#define LED1_ON rGPBDAT &=(~(1<<5))
#define LED2_ON rGPBDAT &=(~(1<<6))
#define LED3_ON rGPBDAT &=(~(1<<7))
#define LED4_ON rGPBDAT &=(~(1<<8))
#define LED1_OFF rGPBDAT |=(1<<5)
#define LED2_OFF rGPBDAT |=(1<<6)
#define LED3_OFF rGPBDAT |=(1<<7)
#define LED4_OFF rGPBDAT |=(1<<8)
#endif
3、新建一个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;
LED2_ON;
LED3_ON;
LED4_ON;
delay(1000000);
LED1_OFF;
LED2_OFF;
LED3_OFF;
LED4_OFF;
delay(1000000);
}
}
4、进行DebugRel Settings. 注意:在设置Linker时,其中Output中RO Base设置为0x30000000,Options中Image entry point中也应该设置为0x30000000,在Layout中第一个Object/Symbol中应该填与.s文件名同名的.o文件名,在后面的Section中应该填写在.s文件中的area和code之间的那个名字。5、连接开发板,打开H-JTAG(它的设置在这里就不说了),H-JTAG中的Init中的Auto Init勾上,点击Init Script,加载(load)H-JTAG文件夹中的FriendlyARM2440.his。然后就可以运行程序了 6、如要用开发板上的按钮控制灯,只需要在代码中添加对按钮的初始化和宏定义即可,然后用if语句作为判断条件。 在def.h文件中添加这样两行代码:#define rGPGCON (*((volatile unsigned *)0x56000060))
#define rGPGDAT (*((volatile unsigned *)0x56000064)) 在main.c中添加如下控制条件#include "def.h"
int delay(unsigned int a)
{
while(a--);
return 0;
}
int main(int argc,char argv[])
{
rGPBCON |=0x15400;
rGPGCON |=0x80A882;
while(1)
{
if((rGPGDAT&0x1)==0x0)
LED1_ON;
if((rGPGDAT&0x8)==0x0)
LED2_ON;
if((rGPGDAT&0x20)==0x0)
LED3_ON;
if((rGPGDAT&0x40)==0x0)
LED4_ON;
// delay(1000000);
if((rGPGDAT&0x1)==0x1)
LED1_OFF;
if((rGPGDAT&0x8)==0x8)
LED2_OFF;
if((rGPGDAT&0x20)==0x20)
LED3_OFF;
if((rGPGDAT&0x40)==0x40)
LED4_OFF;
// delay(1000000);
}
}
7、去抖只需要在if条件语句之前,再加一个if条件语句即可,如: if((rGPGDAT&0x1)==0x0){ delay(100); if((rGPGDAT&0x1)==0x0){ ......}
}
reset
ldr sp ,=4096
import main
bl main
end
2、新建一个def.h文件,在其中添加如下代码:#ifndef _DEF_H
#define _DEF_H
#define rGPBCON (*((volatile unsigned *)0x56000010))
#define rGPBDAT (*((volatile unsigned *)0x56000014))
#define LED1_ON rGPBDAT &=(~(1<<5))
#define LED2_ON rGPBDAT &=(~(1<<6))
#define LED3_ON rGPBDAT &=(~(1<<7))
#define LED4_ON rGPBDAT &=(~(1<<8))
#define LED1_OFF rGPBDAT |=(1<<5)
#define LED2_OFF rGPBDAT |=(1<<6)
#define LED3_OFF rGPBDAT |=(1<<7)
#define LED4_OFF rGPBDAT |=(1<<8)
#endif
3、新建一个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;
LED2_ON;
LED3_ON;
LED4_ON;
delay(1000000);
LED1_OFF;
LED2_OFF;
LED3_OFF;
LED4_OFF;
delay(1000000);
}
}
4、进行DebugRel Settings. 注意:在设置Linker时,其中Output中RO Base设置为0x30000000,Options中Image entry point中也应该设置为0x30000000,在Layout中第一个Object/Symbol中应该填与.s文件名同名的.o文件名,在后面的Section中应该填写在.s文件中的area和code之间的那个名字。5、连接开发板,打开H-JTAG(它的设置在这里就不说了),H-JTAG中的Init中的Auto Init勾上,点击Init Script,加载(load)H-JTAG文件夹中的FriendlyARM2440.his。然后就可以运行程序了 6、如要用开发板上的按钮控制灯,只需要在代码中添加对按钮的初始化和宏定义即可,然后用if语句作为判断条件。 在def.h文件中添加这样两行代码:#define rGPGCON (*((volatile unsigned *)0x56000060))
#define rGPGDAT (*((volatile unsigned *)0x56000064)) 在main.c中添加如下控制条件#include "def.h"
int delay(unsigned int a)
{
while(a--);
return 0;
}
int main(int argc,char argv[])
{
rGPBCON |=0x15400;
rGPGCON |=0x80A882;
while(1)
{
if((rGPGDAT&0x1)==0x0)
LED1_ON;
if((rGPGDAT&0x8)==0x0)
LED2_ON;
if((rGPGDAT&0x20)==0x0)
LED3_ON;
if((rGPGDAT&0x40)==0x0)
LED4_ON;
// delay(1000000);
if((rGPGDAT&0x1)==0x1)
LED1_OFF;
if((rGPGDAT&0x8)==0x8)
LED2_OFF;
if((rGPGDAT&0x20)==0x20)
LED3_OFF;
if((rGPGDAT&0x40)==0x40)
LED4_OFF;
// delay(1000000);
}
}
7、去抖只需要在if条件语句之前,再加一个if条件语句即可,如: if((rGPGDAT&0x1)==0x0){ delay(100); if((rGPGDAT&0x1)==0x0){ ......}
}
相关文章推荐
- 嵌入式S3C2440开发板LED灯和按键(去抖)驱动实验
- 有限状态机的嵌入式Linux按键驱动设计(转载)
- Mini2440 裸机实验之LED程序、按键、中断
- LED设备驱动开发实验—源码代码详解
- 嵌入式Linux之我行——2440按键驱动实例开发详解(带去抖动)
- 嵌入式linux驱动-usb实现按键功能笔记
- 嵌入式linux之按键驱动,异步通知
- 国嵌实验:key_poll,采用查询的方式一旦按键再松开,LED亮灭一次
- [蓝点ZigBee] Zstack 之按键驱动以及控制LED灯 ZigBee/CC2530 视频资料
- 2013-10-07 实验之按键中断控制Led
- 05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
- 移植驱动到内核学习笔记2-----LED和按键驱动
- 嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
- 国嵌实验:key_interrupt(按键中断),采用中断方式当KEY1 按下时,LED亮灭一次
- ZedBoard--(4)嵌入式Linux下的LED实验(PS + PL)
- tiny6410 Linux 按键控制LED驱动
- 基于S3C2440开发板LED灯驱动移植
- 嵌入式Linux驱动学习之路(十二)按键驱动-poll机制
- 07-S3C2440驱动学习(一)嵌入式linux字符设备驱动-按键驱动程序之异步通知机制+原子操作+互斥信号量+阻塞与非阻塞+定时器去抖
- android驱动学习---led实验