John 发表于 2013-11-13 17:03:57

FL2440中断裸机程序运行时出现Dabort exception!!!错误

.extern INT_Main

.section .init

.global _start

_start:
       
        b Reset

HandleUndef:
       
        b HandleUndef

HandleSWI:
       
        b HandleSWI

HandlePrefetchAbort:
       
        b HandlePrefetchAbort

HandleDataAbort:
       
        b HandleDataAbort

HandleNotUsed:
       
        b HandleNotUsed
       
       

        b HandleIRQ

HandleFIQ:
       
        b HandleFIQ


Reset:
       
        ldr sp,=0x1000
       
        ldr r0,=0x53000000
       
        mov r1,#0x0
       
        str r1,
       
       
        msr cpsr_c,#0xd2
       
        ldr sp,=3072
       
       
        msr cpsr_c,#0xdf
       
        ldr sp,=0x1000
       
       
        bl IO_Init
       
        bl IRQ_Init
       
        msr cpsr_c,#0x5f
       
        ldr lr,=loop
       
        ldr pc,=INT_Main

loop:       
       
        b loop

HandleIRQ:
       
        sub lr,lr,#4
       
        s>真美妙b sp!,{r0-r12,lr}

       
        ldr lr,=int_return
       
        ldr pc,=IRQ_Ser

int_return:
       
        ldmia sp!,{r0-r12,pc}^

.end



》》》》》》》》》》》》》》》》》


#define rSRCPND                (*(volatile unsigned *)0x4a000000)
#define rINTMOD         (*(volatile unsigned *)0x4a000004)
#define rINTMSK                (*(volatile unsigned *)0x4a000008)
#define rPRIORITY        (*(volatile unsigned *)0x4a00000c)
#define rINTPND                (*(volatile unsigned *)0x4a000010)
#define rINTOFFSET        (*(volatile unsigned *)0x4a000014)
#define rSUBSRCPND        (*(volatile unsigned *)0x4a000018)
#define rINTSUBMSK        (*(volatile unsigned *)0x4a00001c)

#define rGPBCON                (*(volatile unsigned *)0x56000010)
#define rGPBDAT                (*(volatile unsigned *)0x56000014)
#define rGPBUP                (*(volatile unsigned *)0x56000018)
#define rGPFCON         (*(volatile unsigned *)0x56000050)
#define rGPFDAT                (*(volatile unsigned *)0x56000054)
#define rGPFUP                (*(volatile unsigned *)0x56000058)

#define rEXTINT0         (*(volatile unsigned *)0x56000088)
#define rEXTINT1        (*(volatile unsigned *)0x5600008c)
#define rEXTINT2        (*(volatile unsigned *)0x56000090)
#define rEINTFLT0        (*(volatile unsigned *)0x56000094)
#define rEINTFLT1        (*(volatile unsigned *)0x56000098)
#define rEINTFLT2        (*(volatile unsigned *)0x5600009c)
#define rEINTFLT3        (*(volatile unsigned *)0x560000a0)
#define rEINTMASK        (*(volatile unsigned *)0x560000a4)
#define rEINTPEND        (*(volatile unsigned *)0x560000a8)

void IO_Init(void);
void IRQ_Init(void);
void Delay(unsigned short t);

int INT_Main(void)
{
        while(1)
        {
                rGPBDAT = ~(1<<8);
                Delay(50);
                rGPBDAT = ~(1<<10);
                Delay(50);
        }
        return 0;
}

void IO_Init(void)
{
        rGPBCON = 0x1dd7fc;
        rGPBDAT = (1<<5)|(1<<6)|(1<<8)|(1<<10);
        rGPBDAT &= 0xffe;
        rGPBUP = 0X00;
        rGPFCON = 1<<5;
        //rGPFUP |= (1<<0);
}
void IRQ_Init(void)
{
        rSRCPND = (1<<2);
        rINTPND = (1<<2);
        rINTMSK = ~(1<<2);
}

void IRQ_Ser(void)
{
        rEINTPEND = 0;
        rSRCPND = 0;
        rINTPND = (1<<2);
        while(1)
        {
                rGPBDAT = ~(1<<5);
                Delay(50);
                rGPBDAT = ~(0<<5);
                Delay(50);
                rGPBDAT = ~(1<<5);
        }
}

void Delay(unsigned short t)
{
        unsigned char i,j;
        while(t--)
        {
                for(i=0;i<0xff;i++)
                        for(j=0;j<0xff;j++);
        }
}
这段代码有什么问题吗?为什么会出现Dabort exception错误,求解决,求解决,求解决
页: [1]
查看完整版本: FL2440中断裸机程序运行时出现Dabort exception!!!错误