这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [求助]哪位大虾帮我看看这段代码有什么问题。。。

共2条 1/1 1 跳转至

[求助]哪位大虾帮我看看这段代码有什么问题。。。

菜鸟
2004-09-11 23:59:06     打赏

基于44B0豪华版的代码,偶已经基本上排除了程序其它地方出错的可能性,问题应该就出在下面的这段代码上,这是一个第一级的中断服务程序,但不知道为什么程序非常不稳定,通常第一次中断能正确处理,后面就不行了。。。偶想了半天也没弄明白,只能求教各位大虾了!!!

================================

EXPORT OSEINT4567ISR OSEINT4567ISR ;save lr and spsr in irq mode SUB lr, lr, #4 STMFD sp!, {lr} MRS lr, SPSR STMFD sp!, {r12,lr} ;switch to svc32 mode, and disable interrupt MSR CPSR_c, #0x93 STMFD sp!, {r0-r12,lr} LDR r3, addr_OSTCBCur LDR r3, [r3] STR sp, [r3] ; OSTCBCur -> stkptr = sp

BL OSIntEnter BL EInt4567Isr BL OSIntExit LDMFD sp!, {r0-r12,lr} ;switch to irq mode MSR CPSR_c, #0x92 ;restore lr and spsr in irq mode LDMFD sp!, {r12,lr} MSR SPSR_cf, lr ;return LDMFD sp!, {pc}^ ===================================




关键词: 求助     哪位     大虾     帮我     看看     这段     代码     什么         

菜鸟
2004-09-12 03:35:00     打赏
2楼

void EInt4567Isr(void) { which_int = rEXTINTPND; rEXTINTPND = 0xf; //clear EXTINTPND reg. rI_ISPC |= BIT_EINT4567; //clear pending_bit

Delay(500); //延时若干个100us,消除抖动 rPCONG &= 0x00ff; if( (rPDATG&0xf0) != 0xf0) { switch(which_int) { INT8U err; case 1: { OSMboxPost(KeySem, (void *)4); } break; case 2: { OSMboxPost(KeySem, (void *)5); } break; case 4: { OSMboxPost(KeySem, (void *)6); } break; case 8: { OSMboxPost(KeySem, (void *)7); } break; default : break; } }

while((rPDATG&0xf0) != 0xf0); //按键没有松开就一直等待 rPCONG |= 0xff00; //GPG4、5、6、7设为中断引脚

}

这个是板子带的源代码,我没修改。

[align=right][color=#000066][此贴子已经被作者于2004-9-11 19:36:49编辑过][/color][/align]

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]