全部博文(153)
分类:
2009-08-26 12:04:32
JackPalmStone2013-08-28 16:46:46
我这里有一个ARM926的开发板,linux平台,主频200MIPS,内存1Gbit。
今天,做过一个实验,用IRQ方式触发来外部中断,触发源来自GPIOA,下降沿方式触发,在IRQ_Handler()拉低另一个GPIOB。用示波器捕捉了一下,从GPIOA产生下降沿,到GPIOB拉低,中间经历了4个毫秒。有点太不可思议了。
我想请教一下,这种情况正常么?是否切换到FIQ方式要好一些?
qiuruofengye2009-11-17 10:57:04
我定位到stmia sp!, {r0-r7, lr}出错,还没有运行到bl timer2_irq 就已经开始报data abort 错误!我觉得可能是sp指针指错地方的问题,想请教一下sp的初始化在哪???
chinaunix网友2009-11-13 14:57:42
你的data abort是在什么时候出现的?你可以定位一下,具体细化到执行那条语句的时候,如果是在执行stmia那条指令报data abort才可能是堆栈的原因,不过个人觉得应该不是这里出问题的,应该是你的bl函数出问题的。猜测而已,欢迎继续讨论
qiuruofengye2009-11-13 09:51:54
我在中断中做了一下处理 sub sp, sp, #S_FRAME_SIZE sub lr, lr, #4 stmia sp!, {r0-r7, lr} bl timer2_irq /* 我的中断处理函数 */ ldmda sp!, {r0-r7, pc}^ 出现错误是: Bad mode in data abort handler detected 可能是我的压栈操作有错,因为没有压栈操作可正常运行。linux 内核对fiq的堆栈大小是否有限制?
myleeming2009-11-12 12:35:45
改动的地方时在arch/arm/kernel/entry-armv.s中的 vector_fiq:处。需要保存现场的,我这里面只是在fiq里面点一个灯,只是验证性的,所以没做多少工作,其实所谓的保存现场也主要是将r0-r7这几个寄存器压栈,后面的fiq有自己的一套所以不用保存,但是linux中的确是没有对快速中断做更深的实现(只是有一个入口,这个是处理器决定的),希望你的应用不要太复杂,如果想linux中的fiq和irq那样,那就需要自己写patch了,这方面可以参考atmel9200的代码,它给它的fiq打了patch