• «
  • 1
  • 2
  • 3
  • »
  • Pages: 1/3     Go
主题 : mini2440外部中断按键程序 复制链接 | 浏览器收藏 | 打印
会当凌绝顶,一览众山小!
级别: 总版主
UID: 2
精华: 18
发帖: 1656
金钱: 13915 两
威望: 5380 点
综合积分: 3672 分
注册时间: 2008-01-01
最后登录: 2026-07-25
楼主  发表于: 2009-01-02 23:38

 mini2440外部中断按键程序

作者:Lee

本人已测试通过,代码如下:

#include “def.h”
#include “option.h”
#include “2440addr.h”
#include “2440lib.h”
#include “2440slib.h”
#include “Uart.h”
int recnt,flag;
void GPG_Init(void)
{
rGPGCON=0×80A882;//Enable EINT[19,15,14,13,11,8],other input
rGPBUP=0×0;//pull up
}
void __irq Eint_Sv(void)
{

U32 a,b,c;
flag=1;
a=rSRCPND;
rSRCPND=a;
b=rINTPND;
rINTPND=b;
c=rEINTPEND;
rEINTPEND=c;
switch(c)
{
case 0×100:Uart_Printf(”Key1 Press!\n”);recnt=1;break;
case 0×800:Uart_Printf(”Key2 Press!\n”);recnt=2;break;
case 0×2000:Uart_Printf(”Key3 Press!\n”);recnt=3;break;
case 0×4000:Uart_Printf(”Key4 Press!\n”);recnt=4;break;
case 0×8000:Uart_Printf(”Key5 Press!\n”);recnt=5;break;
case 0×80000:Uart_Printf(”Key6 Press!\n”);recnt=6;break;
}
}
void Int_Init(void)
{
rINTMSK=0xffffffdf;
rEXTINT1=0×22202002;//filter disable,falling_edege
rEXTINT2=0×2000;
rEINTMASK&=0xF716FF;
rINTMOD=0×0;//irq mode
pISR_EINT8_23=(unsigned)Eint_Sv;
}
int Main()
{
clkset();
Uart_Init();
GPG_Init();
Int_Init();
while(1)
{
if(flag==1)
{
flag=0;
Uart_Printf(”Key%d Release!\n”,recnt);
}
}
}
友善之臂淘宝直销店:http://shop34928758.taobao.com

手机:13560352861(杨工),QQ:10108270
级别: 新手上路
UID: 3252
精华: 0
发帖: 5
金钱: 45 两
威望: 41 点
综合积分: 10 分
注册时间: 2009-01-02
最后登录: 2010-06-05
1楼  发表于: 2009-02-23 10:38
pISR_EINT8_23=(unsigned)Eint_Sv;
今天我也搞了一下中断,但是上面这个地方不懂,为什么pIsr_eint8_23指向服务程序就能正确跳转了。pISR_EINT8_23是怎么得来的?现在我对那个中断跳转的流程没有一点的头绪。
级别: 新手上路
UID: 3252
精华: 0
发帖: 5
金钱: 45 两
威望: 41 点
综合积分: 10 分
注册时间: 2009-01-02
最后登录: 2010-06-05
2楼  发表于: 2009-02-23 12:15
楼主能提点一下小弟不?
级别: 新手上路
UID: 3981
精华: 0
发帖: 5
金钱: 40 两
威望: 32 点
综合积分: 10 分
注册时间: 2009-02-19
最后登录: 2010-05-14
3楼  发表于: 2009-02-25 20:55
感谢楼主,不过有个疑惑想问一下,楼主能否解释下为什么要在中断处理函数 void __irq Eint_Sv(void)  里面,这样写
           a=rSRCPND;
           rSRCPND=a;
           b=rINTPND;
           rINTPND=b;
           c=rEINTPEND;
           rEINTPEND=c;
这样写目的是啥??有啥好处??而且变量a,b在后面也没有用到呀~~!!!
在线等
3 Year For MyBelief ~!! Hate Give up~!!!
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
4楼  发表于: 2009-02-25 21:14

 回 3楼(skynothing) 的帖子

看S3C2440A 用户手册里Interrupt那一章里关于SRCPND, INTPND, EINTPND这几个寄存器的描述你就知道了
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 3981
精华: 0
发帖: 5
金钱: 40 两
威望: 32 点
综合积分: 10 分
注册时间: 2009-02-19
最后登录: 2010-05-14
5楼  发表于: 2009-03-01 20:32
不过。。。我在家试过了。。。中断进不去啊???  源代码 COPY的
不知道是不是有其他的问题。。。。
3 Year For MyBelief ~!! Hate Give up~!!!
级别: 新手上路
UID: 3743
精华: 0
发帖: 28
金钱: 240 两
威望: 208 点
综合积分: 56 分
注册时间: 2009-02-05
最后登录: 2017-09-13
6楼  发表于: 2009-03-01 23:13
好!!
级别: 新手上路
UID: 4106
精华: 0
发帖: 1
金钱: 10 两
威望: 10 点
综合积分: 2 分
注册时间: 2009-02-25
最后登录: 2009-04-15
7楼  发表于: 2009-03-04 21:07
进不到中断函数
级别: 新手上路
UID: 4575
精华: 0
发帖: 5
金钱: 30 两
威望: 14 点
综合积分: 10 分
注册时间: 2009-03-20
最后登录: 2013-07-27
8楼  发表于: 2009-04-02 19:21
进不去中断处理函数啊
为什么?很想知道!
级别: 新手上路
UID: 6155
精华: 0
发帖: 1
金钱: 10 两
威望: 10 点
综合积分: 2 分
注册时间: 2009-05-21
最后登录: 2011-07-09
9楼  发表于: 2009-05-26 20:35
为什么我用了楼主的程序出现这个错误啊?
Dummy_isr error, interrupt number: 5, INTMSK = 0xffffffdf

我自己编的也出现一样的错误~~~~
  • «
  • 1
  • 2
  • 3
  • »
  • Pages: 1/3     Go