主题 : micro2440裸机程序进不了中断, 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 7651
精华: 0
发帖: 5
金钱: 50 两
威望: 50 点
综合积分: 10 分
注册时间: 2009-07-23
最后登录: 2017-09-13
楼主  发表于: 2009-08-15 21:34

 micro2440裸机程序进不了中断,

管理提醒: 本帖被 qq2440 从 micro2440技术交流专区 移动到本区(2013-11-18)
比较郁闷搞了大概一星期了,就是进不了中断。RTC,WDT,EINT,都进不去啊,有谁遇见过类似情况啊,网上说是因为mmu未初始化。从mmu.c拷贝个MMU_Init()就ok了,但考了,还是进不去中断啊。用axd+jtag调试,intpend可以挂起,但就进不去ISR中断0X0000 0018...比如我做RTC时钟中断。INTPND相应位都置位了,但就是进不了中断程序啊。论坛了诸位高手可否指点下、

#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "mmu.h"
int i;
void __irq Watchdog_ISR(void);
void watchdog_timer(void);
void MMU_Init(void);
//void ChangeRomCacheStatus(int attr);
//void MMU_SetMTT(int vaddrStart,int vaddrEnd,int paddrStart,int attr);

int count=0;
void xmain(void)
{
        ChangeClockDivider(3,1);
    ChangeMPllValue(127,2,1);
    //MMU_DisableICache();
                 // MMU_DisableDCache();
             MMU_Init();

    Port_Init();
    Uart_Init(0,115200);
    Uart_Select(0);
    for(i=0;i<10000;i++);
    Isr_Init();
    Uart_Printf("            Main is running\n");
    watchdog_timer();
    
    
}
void watchdog_timer(void)
{
    //清WatchDog中断寄存器
    rSRCPND|=BIT_WDT_AC97;
    rINTPND|=BIT_WDT_AC97;
    rSUBSRCPND|=BIT_SUB_WDT;
    
    pISR_WDT_AC97=(unsigned)Watchdog_ISR;
    //WDT初始化
    rWTCON=(100<<8)|(3<<3);
    
    rWTCON&=(~(0x1));//Reset  disable
    rWTCON|=(1<<5);
    rWTCON|=(1<<2);//Enable or disable bit of the interrupt.
                            //0 = Disable   //1 = Enable
                            
    rWTDAT=20000;
    rWTCNT=20000;                        
    //开中断
    rINTMSK&=~(BIT_WDT_AC97);
    rINTSUBMSK&=~(BIT_SUB_WDT);
    while(count<11)
    {
        Uart_Printf("WTCNT::%d",rWTCNT);
        Uart_Printf("count::%d\n",count);
    }
    
    
}

void __irq Watchdog_ISR(void)
{
    Uart_Printf("@@ wdt interrupt occer!!@@");
    if(rSUBSRCPND&BIT_SUB_WDT)
    {
        Uart_Printf("@@ wdt interrupt occer  rSUBSRCPND&BIT_SUB_WDT\n!!@@");
        //ClearPending(BIT_WDT_AC97);
        rSRCPND|=BIT_WDT_AC97;
        rINTPND|=BIT_WDT_AC97;
        rSUBSRCPND|=BIT_SUB_WDT;
        count++;
        Uart_Printf("count:%d",count);
        if(count<11);
        else
        {
            rINTSUBMSK|=BIT_SUB_WDT;
            rINTMSK|=BIT_WDT_AC97;
        }
    }
    if((rSUBSRCPND&(BIT_SUB_AC97)))
    {
        rSUBSRCPND|=BIT_SUB_AC97;
        rSRCPND|=BIT_WDT_AC97;
        rINTPND|=BIT_WDT_AC97;
    }
}
级别: 新手上路
UID: 7651
精华: 0
发帖: 5
金钱: 50 两
威望: 50 点
综合积分: 10 分
注册时间: 2009-07-23
最后登录: 2017-09-13
1楼  发表于: 2009-08-18 21:23
这里太冷了!!
级别: 新手上路
UID: 13211
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
综合积分: 16 分
注册时间: 2010-01-20
最后登录: 2010-08-24
2楼  发表于: 2010-01-20 15:04
级别: 新手上路
UID: 13306
精华: 0
发帖: 15
金钱: 90 两
威望: 18 点
综合积分: 30 分
注册时间: 2010-01-22
最后登录: 2010-06-13
3楼  发表于: 2010-03-05 22:12
我最近也在搞裸机测试程序,搞到中断就卡在那里了,不知道要设置些什么东西。我想楼主应该搞定了,能否发一份过来,谢谢
417388593@qq.com