02.07.2013 Views

Uboot中start.S源码的指令级的详尽解析

Uboot中start.S源码的指令级的详尽解析

Uboot中start.S源码的指令级的详尽解析

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

fiq:<br />

get_fiq_stack<br />

/* someone ought to write a more effiction fiq_save_user_regs */<br />

irq_save_user_regs<br />

bl do_fiq<br />

irq_restore_user_regs<br />

此处也很简单,就是发生了快速中断FIQ的时候,保存IRQ的用户模式寄存器,然后调用函数<br />

do_fiq,调用完毕后,再恢复IRQ的用户模式寄存器。<br />

其中do_fiq()是在:<br />

u-boot-1.1.6_20100601\opt\EmbedSky\u-boot-1.1.6\cpu\arm920t\interrupts.c<br />

中:<br />

┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳<br />

void do_fiq (struct pt_regs *pt_regs)<br />

{<br />

}<br />

printf ("fast interrupt request\n");<br />

show_regs (pt_regs);<br />

bad_mode ();<br />

┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻<br />

和前面提到过的do_undefined_instruction的一样,就是打印寄存器信息,然后跳转到<br />

bad_mode()去重启CPU而已。<br />

#else<br />

irq:<br />

fiq:<br />

#endif<br />

.align 5<br />

get_bad_stack<br />

bad_save_user_regs<br />

bl do_irq<br />

.align 5<br />

get_bad_stack<br />

bad_save_user_regs<br />

bl do_fiq<br />

此处就是,如果没有定义CONFIG_USE_IRQ,那么就用这段代码,可以看到,都只是直接调用<br />

do_irq和do_fiq,也没做什么实际工作。

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!