打印

崩溃了,ARM的伪中断问题

[复制链接]
2849|4
手机看帖
扫描二维码
随时随地手机跟帖
沙发
masashinakayama| | 2007-2-12 09:10 | 只看该作者

是个问题,呵呵呵

但是不严重,没啥

使用特权

评论回复
板凳
arzhiy| | 2007-2-14 15:14 | 只看该作者

关于LPC2000系列ARM7伪中断产生和处理



关于LPC2000系列ARM7伪中断产生和处理

可到blog

http://arzhiy.21ic.org/

看看,根据自己看到遇到的,总结了一点点,并且在我自己的系统中伪中断也有所解决,写得不全,请大家接着补充。 
 
不知道你用的是不是LPC2000,但是伪中断大致处理类似。

使用特权

评论回复
地板
hotpower| | 2007-2-14 15:26 | 只看该作者

开关IRQ/FIQ不应该在用户级上进行

在用户级上应该用swi调用.
如;

void __swi(0) Enable_IRQ(void);
void __SWI_0            (void) {
int tmp;
  __asm
  {
    MRS tmp, SPSR
    BIC tmp, tmp, #0x80
    MSR SPSR_c, tmp
  }
}

void __swi(1) Disable_IRQ(void);
void __SWI_1             (void) {
int tmp;
  __asm
  {
    MRS tmp, SPSR
    ORR tmp, tmp, #0x80
    MSR SPSR_c, tmp
  }
}

void __swi(2) Enable_FIQ(void);
void __SWI_2            (void) {
int tmp;
  __asm
  {
    MRS tmp, SPSR
    BIC tmp, tmp, #0x40
    MSR SPSR_c, tmp
  }
}

void __swi(3) Disable_FIQ(void);
void __SWI_3             (void) {
int tmp;
  __asm
  {
    MRS tmp, SPSR
    ORR tmp, tmp, #0x40
    MSR SPSR_c, tmp
  }
}


int main(void)
{
  Disable_IRQ();
  Disable_FIQ();
//.................
  Enable_FIQ();
  Enable_IRQ();
  while(i == 0) {
  }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

40

帖子

0

粉丝