+ -
当前位置:首页 → 问答吧 → 【求助】我的中断怎么打不开啊!请教!

【求助】我的中断怎么打不开啊!请教!

时间:2006-06-13

来源:互联网

我现在做2410的串口中断读程序,对2410里面的关于串口的中断寄存器都进行了设置,可是当有数据发送过来的时候并没有触发中断,而进入到中断服务程序中去,大家帮忙看看是哪出错了,谢谢大家!我的程序如下:

void Main(void)
{
    Led_Display(0x0f);
    Led_Display(0x00);   
         
    MMU_Init();
   
    ChangeClockDivider(1,1);  // 1:2:4    

    ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz  
   
    Port_Init(); //口线初始化
    Isr_Init();  //初始化中断寄存器
    Uart_Init(0,115200); //初始化串口
    Uart_Select(2); //选择串口2

    pISR_UART2=(unsigned)IntUart;
    rSUBSRCPND=(0x1<<6);//下面3句是设置中断寄存器中关于串口的位
    rINTSUBMSK=~(0x1<<6);
    rINTMSK=~(0x1<<15);
    while(1)
    {
      Glib_FilledRectangle(0,0,239,319,0x00);
      Glib_Line(0,0,239,319,0xF800);
      Delay(50000);
      Glib_FilledRectangle(0,0,239,319,0xFFFF);
      Glib_Line(0,0,239,319,0xF800);
      Delay(50000);
    }

}

//中断服务程序如下:

void __irq IntUart(void)         ;      
{   
    int l;
       rSRCPND=(0x1<<15);
    rINTPND=(0x1<<15);
     rINTPND;
     l=Uart_Getch();
    dadian(l,0x00);  //这是我自己写的一个画点的函数,从串口读数据,然后打点
}      

作者: peipei101   发布时间: 2006-06-13

你的中断处理模块都不贴出来,怎么找问题。
还有mmu_init有没有进行虚拟地址转换?      

作者: hhq2005   发布时间: 2006-06-13

中断处理模块?
HandlerFIQ      HANDLER HandleFIQ
HandlerIRQ      HANDLER HandleIRQ
HandlerUndef    HANDLER HandleUndef
HandlerSWI      HANDLER HandleSWI
HandlerDabort   HANDLER HandleDabort
HandlerPabort   HANDLER HandlePabort

IsrIRQ  
        sub        sp,sp,#4       ;reserved for PC
        stmfd        sp!,{r8-r9}   
       
        ldr        r9,=INTOFFSET
        ldr        r9,[r9]
        ldr        r8,=HandleEINT0
        add        r8,r8,r9,lsl #2
        ldr        r8,[r8]
        str        r8,[sp,#8]
        ldmfd        sp!,{r8-r9,pc}
是这段吗?我现在都糊涂了,真弄不明白了!
还有就是MMU_INIT,
void MMU_Init(void)
{
    int i,j;
    //========================== IMPORTANT NOTE =========================
    //The current stack and code area can't be re-mapped in this routine.
    //If you want memory map mapped freely, your own sophiscated MMU
    //initialization code is needed.
    //===================================================================

    MMU_DisableDCache();
    MMU_DisableICache();

    //If write-back is used,the DCache should be cleared.
    for(i=0;i<64;i++)
            for(j=0;j<8;j++)
                MMU_CleanInvalidateDCacheIndex((i<<26)|(j<<5));
    MMU_InvalidateICache();
   
    #if 0
    //To complete MMU_Init() fast, Icache may be turned on here.
    MMU_EnableICache();
    #endif
   
    MMU_DisableMMU();
    MMU_InvalidateTLB();

    //MMU_SetMTT(int vaddrStart,int vaddrEnd,int paddrStart,int attr)
    MMU_SetMTT(0x00000000,0x07f00000,0x00000000,RW_CNB);  //bank0
    MMU_SetMTT(0x08000000,0x0ff00000,0x08000000,RW_CNB);  //bank1
    MMU_SetMTT(0x10000000,0x17f00000,0x10000000,RW_NCNB); //bank2
    MMU_SetMTT(0x18000000,0x1ff00000,0x18000000,RW_NCNB); //bank3
    MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_NCNB); //bank4
    MMU_SetMTT(0x28000000,0x2ff00000,0x28000000,RW_NCNB); //bank5
    MMU_SetMTT(0x30000000,0x30f00000,0x30000000,RW_CB);          //bank6-1
    MMU_SetMTT(0x31000000,0x33e00000,0x31000000,RW_NCNB); //bank6-2
    MMU_SetMTT(0x33f00000,0x33f00000,0x33f00000,RW_CB);   //bank6-3
    MMU_SetMTT(0x38000000,0x3ff00000,0x38000000,RW_NCNB); //bank7
   
    MMU_SetMTT(0x40000000,0x5af00000,0x40000000,RW_NCNB);//SFR+StepSram   
    MMU_SetMTT(0x5b000000,0xfff00000,0x5b000000,RW_FAULT);//not used

    MMU_SetTTBase(_MMUTT_STARTADDRESS);
    MMU_SetDomain(0x55555550|DOMAIN1_ATTR|DOMAIN0_ATTR);
            //DOMAIN1: no_access, DOMAIN0,2~15=client(AP is checked)
    MMU_SetProcessId(0x0);
    MMU_EnableAlignFault();
           
    MMU_EnableMMU();
    MMU_EnableICache();
    MMU_EnableDCache(); //DCache should be turned on after MMU is turned on.
}   
我也没看懂,不知道虚拟地址转换了没?

刚刚学,好多问题,也许对你们来说一句的事,可是我要想N天,多多赐教啊!呵呵      

作者: peipei101   发布时间: 2006-06-15