一、arm-9 TQ2440

 key.h

 #ifndef __KEY_H__
#define __KEY_H__ #define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054) extern void key_init(void);
extern int key1(void);
extern int key2(void);
extern int key3(void);
extern int key4(void); #endif

key.c

 #include "key.h"

 void key_init(void){
//设置key 1 2 3 4 为输入引脚
GPFCON = ~0x3 & ~(0x3<<) & ~(0x3<<) & ~(0x3<<);
} int key1(void){
if(GPFDAT & (0x1<<)){
return ;
}
else{
return ;
}
} int key2(void){
if(GPFDAT & (0x1<<)){
return ;
}
else{
return ;
}
} int key3(void){
if(GPFDAT & (0x1<<)){
return ;
}
else{
return ;
}
} int key4(void){
if(GPFDAT & (0x1)){
return ;
}
else{
return ;
}
}

buzzer.h

 #ifndef __BUZZER_H__
#define __BUZZER_H__ #define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014) extern void buzzer_init(void);
extern void buzzer_on(void);
extern void buzzer_off(void); #endif

buzzer.c

 #include "buzzer.h"

 void buzzer_init(void){
GPBCON &= ~0x3;
GPBCON |= 0x1;
} void buzzer_on(void){
GPBDAT |= ;
} void buzzer_off(void){
GPBDAT &= ~;
}

led.h

 #ifndef __LED_H__
#define __LED_H__ #define GPBCON (*(volatile unsigned long*)0x56000010)
#define GPBDAT (*(volatile unsigned long*)0x56000014) extern void led_init(void);
extern void led1_on(void);
extern void led1_off(void);
extern void led2_on(void);
extern void led2_off(void);
extern void led3_on(void);
extern void led3_off(void);
extern void led4_on(void);
extern void led4_off(void); #endif

led.c

 #include "led.h"

 //初始化led寄存器
void led_init(void){
//设置 led 1 2 3 4 为输出引脚
GPBCON &= ~(0xFF<<);
GPBCON = (<<) | (<<) | (<<) | (<<);
} void led1_on(void){
//GPBDAT &= ~(1<<5);
GPBDAT &= ~(<<);
}
void led1_off(void){
GPBDAT |= <<;
} void led2_on(void){
GPBDAT &= ~(<<);
}
void led2_off(void){
GPBDAT |= (<<);
} void led3_on(void){
GPBDAT &= ~(<<);
}
void led3_off(void){
GPBDAT |= (<<);
} void led4_on(void){
GPBDAT &= ~(<<);
}
void led4_off(void){
GPBDAT |= (<<);
}

main.c

 #include "led.h"
#include "key.h"
#include "buzzer.h" void delay(void); int main(void){
led_init();
key_init();
//蜂鸣器
buzzer_init();
while(){
if(key1()){
led1_on();
led2_on();
}
else{
led1_off();
led2_off();
}
if(key2()){
led3_on();
led4_on();
}
else{
led3_off();
led4_off();
}
if(key3()){
buzzer_on();
}
else{
buzzer_off();
}
}
} void delay(void){
int i;
for(i = ; i < 0xf000; i++){
;
}
}

led.lds

 SECTIONS
{
. = 0x30000000;
.text :{
main.o (.text);
*.o (.text);
}
.data :{
*.o (.data);
}
__bss_start = .;
.bss :{
*.o (.bss);
}
__end = .;
};

Makefile

 CC=arm-linux-gcc
LD=arm-linux-ld
OBJ=arm-linux-objcopy
keyled_c:keyled_c.o
$(LD) -nostartfiles -nostdlib -T led.lds -e main -o keyled_c keyled_c.o
$(OBJ) -O binary keyled_c keyled_c.bin
keyled_c.o:keyled_c.c
$(CC) -march=armv5te -nostdlib -c -o keyled_c.o keyled_c.c
clean:
@rm -vf keyled_c.o keyled_c keyled_c.bin

上面的 led.lds 是设置代码和数据段的地址区

二、arm-A8 S5PV210

 #define GPC0CON (*(volatile unsigned long*)0xE0200060)
#define GPC0DAT (*(volatile unsigned long*)0xE0200064) #define GPH0CON (*(volatile unsigned long*)0xE0200C00)
#define GPH0DAT (*(volatile unsigned long*)0xE0200C04) #define GPD0CON (*(volatile unsigned long*)0xE02000A0)
#define GPD0DAT (*(volatile unsigned long*)0xE02000A4) #define GPD01OUT (1<<(4*1)) #define GPC03OUT (1<<(3*4))
#define GPC04OUT (1<<(4*4)) #define GPH00IN ~(0xF<<(4*0))
#define GPH01IN ~(0xF<<(4*1))
int main(void){
//设置led1 2 GPC0CON 为输出引脚
GPC0CON = GPC03OUT | GPC04OUT;
//设置按键1 2 GPH0CON 为输入引脚
GPH0CON = GPH00IN & GPH01IN;
//设置蜂鸣器 GPD0CON 为输出引脚
GPD0CON = GPD01OUT; while(){
if(GPH0DAT & 0x1){
GPC0DAT = 0x00;
GPD0DAT = 0x00;
}
else{
GPC0DAT = 0x08;
GPD0DAT = 0x02;
}
if(GPH0DAT & 0x02){
GPC0DAT = 0x00;
}
else{
GPC0DAT = 0x10;
}
}
}

  以上的宏定义都是根据开发板电路图找到CPU相对应的管脚,然后设置管脚就可以实现相应的功能。

Makefile:

 CC=arm-linux-gcc
LD=arm-linux-ld
OBJ=arm-linux-objcopy
keyled_c:keyled_c.o
$(LD) -nostartfiles -nostdlib -Ttext=0x20008000 -e main -o keyled_c keyled_c.o
$(OBJ) -O binary keyled_c keyled_c.bin
keyled_c.o:keyled_c.c
$(CC) -march=armv5te -nostdlib -c -o keyled_c.o keyled_c.c
clean:
@rm -vf keyled_c.o keyled_c keyled_c.bin

【嵌入式】——arm裸机开发 step by step 之 按键控制 LED 和 蜂鸣器的更多相关文章

  1. ARM裸机开发中内存管理库RT_HEAP的使用

    在使用arm芯片进行裸机开发的时候,很多时候都需要内存管理的功能,我们可以使用自己写的内存管理程序,也可以直接使用标准库,不过我一般比较喜欢标准库,速度快,今天就来说说在C语言环境下怎么样进行内存的动 ...

  2. 【嵌入式】——arm裸机开发 step by step 之 串口通信

    一.在使用S5PV210的串口发送和接收的时候,首先要对S5PV210的串口进行配置,我们使用轮询方式时的配置有哪些? 1.配置GPIO,使对应管脚作为串口的发送和接收管脚 GPA0 0 1 管脚 2 ...

  3. ARM裸机开发之交叉工具链和MakeFile工程管理

    一.交叉工具链 嵌入式Linux开发采用交叉开发,简单来说就是在宿主机(PC机)上面编译出能够在其他硬件平台上面运行的程序.在这个过程中,需要用到许多的交叉工具,这些交叉工具的集合就叫做交叉工具链.下 ...

  4. 嵌入式ARM系统开发基础

    从.net到delplhi 从windows到Linxu 未来有多远? 如何突破自己? 什么是自己? 我从哪里来,要到哪里去? 世界是什么? 是世选择了我,还是我选择了世界? 怎么才能够完成蜕变? 去 ...

  5. Cubieboard2裸机开发之(二)板载LED交替闪烁

    前言 电路原理在文章http://www.cnblogs.com/lknlfy/p/3583806.html中已经说明,两个LED的原理图是一样的.要使两个LED交替闪烁,只需要在点亮蓝色LED,熄灭 ...

  6. S3C2440—2.裸机开发步骤及工具使用

    文章目录 一.裸机开发步骤简介 1.在X86架构的Windows系统中 2.在X86架构的Ubuntu系统中 3.ARM裸机开发 二.soucre insight使用 1.sourec insight ...

  7. Step by Step: 基于MFC下的COM组件开发-Helloworld

    http://blog.csdn.net/sybifei/article/details/45008745 [这篇文章有问题, 仅供参考] http://blog.csdn.net/define_us ...

  8. 精通initramfs构建step by step

    (一)hello world  一.initramfs是什么  在2.6版本的linux内核中,都包含一个压缩过的cpio格式 的打包文件.当内核启动时,会从这个打包文件中导出文件到内核的rootfs ...

  9. Step By Step(Lua编译执行与错误)

    Step By Step(Lua编译执行与错误) 1. 编译:    Lua中提供了dofile函数,它是一种内置的操作,用于运行Lua代码块.但实际上dofile只是一个辅助函数,loadfile才 ...

随机推荐

  1. CentOS 7 host-only 设置上网

    CentOS 7 ifcfg-enp0s3: HWADDR=::::F6: TYPE=Ethernet BOOTPROTO=static #dhcp DEFROUTE=yes PEERDNS=yes ...

  2. django -- while time zone support is active

    一.先看报错: django 在处理datetime类型的的报错/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site ...

  3. 搭建Dubbo+Myeclipse2015+Maven3.3.1的过程遇到问题集锦

    1. 找不到dubbo2.8.4包的问题 在编译Maven工程的过程中,出现如下问题: Description Resource Path Location Type ArtifactDescript ...

  4. Processing支持中文显示

    Processing 默认不支持中文,中文显示成框框,我使用的版本是:2.2.1,进行如下设置,并且重启processing就可以支持中文了: 可以看到中文了:

  5. 使用NPOI 转换Excel TO HTML (导出格式不如原生Excel好看)

    //HSSFWorkbook workbook = ExcelToHtmlUtils.LoadXls(strPath); //ExcelToHtmlConverter excelToHtmlConve ...

  6. Subversion代码提交中的org.apache.subversion.javahl.ClientException: svn: E200007: Commit failed异常解决

    : 在切换subversion服务器地址之后,发生的无法正确提交代码的问题org.apache.subversion.javahl.ClientException: svn: E200007: Com ...

  7. Win7多用户情况下,指定某一用户为自动登陆-解决办法

    转自:http://sbiuggypm.themex.net/archives/605 许久没更新博客了,但从后台可以查看到,有不少朋友还是几乎每天来逛一逛,很对不起的是最近都没更新啥内容.真是不好意 ...

  8. log_output参数是指定日志的存储方式

    log_output='FILE'表示将日志存入文件,默认值是'FILE' log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中. mys ...

  9. 【Android】事件输入系统-代码层次解读

    本文基于Android-4.0 理论层次解读 请看:www.cnblogs.com/lcw/p/3373214.html 如何管理各种驱动设备 在理论中谈到EventHub,这个一看就是一个做实事的, ...

  10. 开源实时日志分析ELK

    开源实时日志分析ELK 2018-01-04 转自:开源实时日志分析ELK平台部署 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错 ...