3c2410裸板程序入门---单按键(二)

发布者:平安幸福最新更新时间:2023-05-10 来源: elecfans关键字:3c2410  裸板程序  单按键 手机看文章 扫描二维码
随时随地手机看文章

key.c 


1#include"key.h"

2#include"uart.h"

3#include"s3c2410.h"

17

__irq

void

key_handler()

18

{

19

sendstring(

"key1 down!!!n"

);

20

21

EINTPEND |=

0x1

<<

19

;

22

SRCPND |=

0x1

<<

5

;

23

INTPND = INTPND;

24

}

25

26void

key_init()

27

{

28

INTMOD =

0x0

;

29

INTMSK &= ~(

0x1

<<

5);

31

GPECON = (GPECON & ~(

0x3

<<

22

)) |

0x1

<<

22

;

32

GPEDAT &= ~(

0x1

<<

11);

34

GPGCON = (GPGCON & ~(

0x3

<<

22

)) |

0x2

<<

22;

36

EXTINT2 = (EXTINT2 & ~(

0x7

<<

12

)) |

0x2

<<

12;

38

EINTMASK &= ~(

0x1

<<

19);

40

*(

unsigned

int

*)(

0x33ffff20

+

5

*

4

) = (

unsigned

int

)key_handler;

41

}

注意__irq 修士的key_handler 就是二级中断处理函数,这里没有查二级中断号,也没有做消除抖动处理,所以不完善,只是为了演示中断过程,用串口向pc发送了一个字符串。注意处理完成后要清除中断,否则会一直中断。还要注意中断的返回,__irq是armcc的关键字,gcc是不能用的,使用它以后,调试时看对应的汇编代码:


 STMDB     R13!,{R0-R3,R12,R14} ...


 LDMIA     R13!,{R0-R3,R12,R14}


SUBS      PC,R14,#0x00000004 可知自动做了pc指针的调整,适应流水线机构。

key_init函数中的这一句


 *(unsigned int *)(0x33ffff20+5*4) = (unsigned int)key_handler;

正是把二级中断处理函数的地址安装到中断向量表中。中断控制的寄存器包括pnd, mask等,专门讲中断的文章中有讲到,芯片资料说明也很详细。


main.c


 1 #include "key.h"

 2 #include "led.h"

 3 #include "uart.h"

 4 #include "s3c2410.h"

 5 

 6 

 7 

 8 int main(void)

 9 {

10     key_init();

11     uart_init();

12     sendstring("hello world!n");

13     myblink();

14     return 0;

15 }


关键字:3c2410  裸板程序  单按键 引用地址:3c2410裸板程序入门---单按键(二)

上一篇:S3c2410裸板程序入门---流水灯
下一篇:linux内核移植s3c2410,准备工作

推荐阅读最新更新时间:2024-10-31 10:28

Linux下ARM程序编写
 有些学习过Bootloader和内核的朋友肯定会知道,在调用C语言函数之前肯定会有一段汇编代码在前面铺路,进行一些必要的初始化工作;而那些只学过单片机而没有学过ARM的朋友肯定会觉得很奇怪,在单片机中写C代码,前面完成可以不用任何汇编代码。这是为什么呢?   这主要是因为我们的开发环境(这里主要是指编译环境)的不同,在开发单片机程序的时候,开发环境(如KEIL)会在编译C代码的时候,给我添加启动代码(startup-51)或者在编译时已经由编译器在后台为我们初始化好了。而在开发ARM程序时,ARM处 理器支持多种模式,多种功能,而在不同的领域不同的项目里面,我们可以有选择的、适当的选择这些功能,这时,编译器就不知道我们需要什么功能
[单片机]
Linux下ARM<font color='red'>裸</font><font color='red'>板</font><font color='red'>程序</font>编写
基于3c2410的linux2.6.22移植(5)
三、 网卡和LCD驱动的移植1. 网卡驱动移植: 这块板使用的是DM9000的网卡芯片,驱动的源代码在内核源代码的目录中可以找到: $root@host:/home/arm/# cd kernel/linux-2.6.22 $root@host:/home/arm/kernel/linux-2.6.22# cd drivers/net $root@host:/home/arm/kernel/linux-2.6.22/drivers/net# ls dm* dm9000.c dm9000.h 修改dm9000.c: $root@host:/home/arm/kernel/linux-2.6.22
[单片机]
基于3c2410的linux2.6.22移植(6)
2. LCD驱动移植:继续在mach-smdk2410.c中添加如下内容: . #include asm/arch/fb.h #include asm/arch/regs-gpio.h #include asm/arch/regs-lcd.h . . static struct s3c2410fb_mach_info smdk2410_lcdcfg __initdata={ .type=S3C2410_LCDCON1_TFT, .fixed_syncs= 0, .regs={ .lcdcon1= S3C2410_LCDCON1_TF
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved