QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1576|回复: 0

关于ucos移植到at91的问题???

[复制链接]
发表于 2006-9-22 17:26:14 | 显示全部楼层 |阅读模式
最近在研究ucos移植, 在os_cpu_a.S文件中, 中断服务子程序种,我把BL do_irq换成BL OSTimeTick后,任务调度就出现问题了.下面是do_irq的源码,
void do_irq(void)
{
        int irq_num;
        void (*isr)(void);
        //chy 2003-02-16 : IVR could have some irqs at the same time, so should check it untile IVR=0        
        //irqnum is the highest irq number
label_again:
        irq_num = __arch_getl(AIC_IVR);
       

        if(irq_num!=0){
                //close this interrupt
                at91_mask_irq(irq_num);
               
                isr = (void *)svr[irq_num];
                if( isr != 0 )
                        isr();

                if(irq_num == KERNEL_TIMER_IRQ_NUM){
                        //do some extra work for skyeye timer interrupt
                        register volatile struct at91_timers* tt = (struct at91_timers*) (AT91_TC_BASE);
                        register volatile struct at91_timer_channel* tc = &tt->chans[KERNEL_TIMER].ch;
                        /* clear TC Status Register to continue interrupt */
                        unsigned long tmp = tc->sr; // only read status register, must do!
                        tmp = tmp;                        // just use it to avoid compiler warnings!
                }
                //reenable this interrupt
                at91_unmask_irq(irq_num);
                 /* clear AIC : indicate the end of interrupts */
                __arch_putl(irq_num,AIC_EOICR);  // only write AIC_EOICR
                //chy 2003-02-16 : IVR could have some irqs at the same time, so should check it untile IVR=0        
                goto label_again;
           }
}
在该函数里面也就是调用中断程序,我只是直接调用,为什么就不行呢??/
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-26 15:48 , Processed in 0.070150 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表