主题 : 为什么这个按键中断控制LED灯亮的函数没反应? 复制链接 | 浏览器收藏 | 打印
come on
级别: 新手上路
UID: 34703
精华: 0
发帖: 41
金钱: 210 两
威望: 42 点
综合积分: 82 分
注册时间: 2010-12-20
最后登录: 2012-03-13
楼主  发表于: 2010-12-28 20:14

 为什么这个按键中断控制LED灯亮的函数没反应?

为什么这个按键中断控制LED灯亮的函数没反应?
这个是国嵌2440arm精讲班离得原程序,可是我下载到开发板上去,却看不到任何现象,这是为什么呢?

#define    GLOBAL_CLK        1
#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "mmu.h"
#include "profile.h"
#include "memtest.h"

void key_init(void);
static void __irq key_handler(void);

/*************************************************
延时函数
**************************************************/
void delay(int times)
{
    int i,j;
    for(i=0;i<times;i++)
       for(j=0;j<400;j++);
}

/*************************************************
LED初始化
**************************************************/
void Led1_init(void)
{
   rGPBCON &= ~(3<<10);
   rGPBCON |= (1<<10);
}

/*************************************************
点亮LED
**************************************************/
void Led1_run(void)
{
   rGPBDAT &=~(1<<5); /*LED亮还是灭?*/
   delay(1000);
   rGPBDAT |=(1<<5);
   delay(1000);
}

/*************************************************
主函数
**************************************************/
void Main(void)
{    
  
   Led1_init();
  
   key_init();
  
   while(1);
}    

/*************************************************
按键初始化
**************************************************/
void key_init(void)
{
    //rGPGCON &= ~(0x3<<0);    
    //rGPGCON |=  (0x2<<0);
    
    rEXTINT1 &= ~(0xf<<0);  
    rEINTPEND |= (1<<8);
    rEINTMASK &= ~(1<<8);//EINTMASK是专门处理外部中断屏蔽控制的,但低4位保留(涉及EINT0~3)

    
    /*设置ISR*/
    pISR_EINT8_23=(U32)key_handler;
    EnableIrq(BIT_EINT8_23);
}    

/*************************************************
按键中断处理函数
**************************************************/
static void __irq key_handler(void)
{
    /*判断是否是按键K1产生的中断*/
    if(rINTPND==BIT_EINT8_23)
    {
    ClearPending(BIT_EINT8_23);
    
    if(rEINTPEND&(1<<8))
        rEINTPEND |= 1<< 8;
        
    Led1_run();
    }
}
级别: 侠客
UID: 33103
精华: 0
发帖: 61
金钱: 315 两
威望: 63 点
综合积分: 122 分
注册时间: 2010-11-25
最后登录: 2011-07-14
1楼  发表于: 2011-06-19 19:53
我知道什么原因,呵呵,你把参数修改一下,修改100倍试试,呵呵,或者禁止cach(裸机程序中有一个函数,可以禁止指令cach和数据cash)
宁可高傲的发霉,也不可低贱的恋爱