J-Link + ADS + mini2440调试中断问题

发布者:PeacefulWarrior最新更新时间:2020-07-02 来源: eefocus关键字:J-Link  ADS  mini2440  调试中断 手机看文章 扫描二维码
随时随地手机看文章

在RAM中在线调试,一般什么跑马灯啊,蜂鸣器的程序都可以。今天调一个中断的程序就不行。


就是一个简单的外部中断,通过按键获取外部中断,可是中断一直进不去(通过设置断点,按键按了也不能跳进去)。找了网上的一些资料看,说要设置中断向量?


“因为调试过程中没有开中断,开中断则要正确设置异常向量。”这句话小弟有点不太理解。


下面我把代码贴上来,大伙帮我看看,感谢致敬!


#include "def.h"                    //所要包含的头文件

#include "option.h"

#include "2440addr.h"     

#include "2440lib.h"

#include "2440slib.h"      

//**************************************************

#define KEY1 (1 << 0)//GPG0,EINT8

#define KEY2 (1 << 3)//GPG3,EINT11

#define KEY3 (1 << 5)//GPG5,EINT13

#define KEY4 (1 << 6)//GPG6,EINT14


#define LED1 (1 << 5)//GPB5

#define LED2 (1 << 6)//GPB6

#define LED3 (1 << 7)//GPB7

#define LED4 (1 << 8)//GPB8


void dely(U32 tt)                //延时子函数

{

   U32 i;

   for(;tt>0;tt--)

   {

     for(i=0;i<10000;i++){}

   }

}


void __irq IRQ_KEY(void)   

{


ClearPending(BIT_EINT8_23);

rEINTPEND = 0xFFFFFFFF;

rGPGCON &= ~((3<<0)|(3<<6)|(3<<10)|(3<<12));  //设置为输入

   //采取位判断,判断是0还是1.

    if(rGPGDAT & KEY1)   //判断按键1是否按下

      { rGPBDAT |= LED1;    //否,LED1灭

       // dely(120);

       }

    else   

      { rGPBDAT &= ~LED1;    //是 LED1亮

       // dely(220);

      }

      

      

    if(rGPGDAT & KEY2)   //判断按键2是否按下

      { rGPBDAT |= LED2;    //00001101左移5位,LED2亮

       // dely(120);

    }

    else 

      { rGPBDAT &= ~LED2;    

      // dely(220);

      }

   

   

    if(rGPGDAT & KEY3)   //判断按键3是否按下

      { rGPBDAT |= LED3;    //00001011左移5位,LED3亮

      //  dely(120);

      }

    else

         { rGPBDAT &= ~LED3;    //是 LED1亮

       // dely(220);

      }

         

         

         

    if(rGPGDAT & KEY4)   //判断按键4是否按下

      { rGPBDAT |= LED4;    //00000111左移5位,LED4亮

       // dely(120);

      }

    else  

          { rGPBDAT &= ~LED4;    //是 LED4亮

      //  dely(220);

      }

          

 rGPGCON |= ((2<<0)|(2<<6)|(2<<10)|(2<<12)); //GPG配置第二功能,外部中断功能 

}


void EINT_Init(void)

{

    rGPGCON &= ~((3<<0)|(3<<6)|(3<<10)|(3<<12));  //设置为输入

rGPGCON |= ((2<<0)|(2<<6)|(2<<10)|(2<<12)); //GPG配置第二功能,外部中断功能 


rEXTINT1 &=~((7<<0)|(7<<12)|(7<<20)|(7<<24))|((6<<0)|(6<<12)|(6<<20)|(6<<24));

//EINT8,11,13,14 下降沿中断

pISR_EINT8_23 = (U32)IRQ_KEY;

rPRIORITY = 0x00000000;

ClearPending(BIT_EINT8_23); //清除中断标志

rEINTPEND = 0xFFFFFFFF;

rINTMOD = 0x00000000; //所有中断均为IRQ中断

rINTMSK &= (~BIT_EINT8_23); //使能外部中断8_23

rEINTMASK &= ~((1<<8)|(1<<11)|(1<<13)|(1<<14)); //使能外部中断8,11,13,14


}


void Main(void)        //主函数

{

          //这里只讨论按键与IO口的使用,其余的做成子函数,直接调用,可暂时不深究。

U8 key;

U32 mpll_val=0;


  

mpll_val = (92<<12)|(1<<4)|(1);


ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);   //设置主时钟频率405MHZ

ChangeClockDivider(key, 12);      //设置时钟驱动频率的函数   

    

    MMU_DisableICache();    //对内存管理单元MMU的设置

    MMU_DisableDCache(); 

                                                 

    rGPBCON = rGPBCON&(~(0xFF<<5))|(0x55<<5);    //设置为输出GPB5,6,7,8


    EINT_Init();

    while(1);     

  

}

关键字:J-Link  ADS  mini2440  调试中断 引用地址:J-Link + ADS + mini2440调试中断问题

上一篇:基于SmartARM2300开发板的ADS工程移植keil5工程
下一篇:为mini2440开发板建立Keil MDK/Jlink开发调试环境

小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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