今天做了个dm9000的裸机驱动程序 用的是开发板的EINT7中断 但是进了中断服务函数后就停在了恢复现场的那段汇编代码那出不去了 实在想不出为啥
void int_issue()
{
__asm__(
"sub lr,lr,#4\n"
"stmfd sp!,{r0-r12,lr}\n"
:
:
);
packet_len = dm9000_rx(&buffer[0]);
net_handle(&buffer[0],packet_len);
EINT0PEND = (~0x0);
VIC0ADDRESS = 0;
VIC1ADDRESS = 0;
led_on(); <<-----------------------用led测试后发现就是停在这出不去的
__asm__(
"ldmfd sp!,{r0-r12,pc}^ \n"
:
:
);
// led_on(); <<----------------------- 要是LED 放在这的话就不亮了 所以我认为是停在汇编那出不去的
}
void int_init() //各个寄存器地址都确保没有错
{
GPNCON &= (~(0x2<<14));
GPNCON |= (0x2<<14);
EINT0CON0 &= (~(0x7<<12));
EINT0CON0 |= (0x1<<12);
EINT0MASK = 0;
VIC0INTENABLE |= 0xffffffff;
EINT7_VECTORADDR = (int)int_issue;
__asm__(
"mrc p15,0,r0,c1,c0,0\n"
"orr r0,r0,#(1<<24)\n"
"mcr p15,0,r0,c1,c0,0\n"
"mrs r0,cpsr\n"
"bic r0, r0, #0x80\n" //允许中断
"msr cpsr_c, r0\n"
:
:
);
}