Q:怎样理解用C语言实现中断的过程呢?
A:以下是一段使用C语言实现中断的主程序,和汇编语言实现中断一样也使用了定时器中断和按键中断。执行该主程序会在DE2-115的红色LED上显示流水灯,按下KEY1可以改变流水灯移动的方向。定时器中断服务程序用于控制流水灯的速率,而按键中断服务程序就用于控制按键。
为了使能中断,主程序使用macros来访问Nios II状态和控制寄存器。nios2_ctrl_reg_macros.h文件提供了可以在任何C程序中使用的此类宏的集合。
主程序的复位和异常服务程序是exception_handler.c,其中复位服务程序(the_reset函数)通过执行主程序的.reset分支来实现。异常服务程序(the_exception函数)是一段通用异常处理程序,适用于所有C语言程序,该程序包含一段汇编语言代码,用于判断异常是否由外部中断引起,若是,则调用C语言程序interrupt_handler,interrupt_handler程序可以执行指定应用所需的各种操作。exception_handler.c中,interrupt_handler程序首先通过nios2_ctrl_reg_macros.h中的宏指令读取Nios II中断等待寄存器,来判断发生的是哪种异常。间隔定时器中断服务程序是interval_timer_ISR.c,按键中断服务程序是pushbutton_ISR.c。
以上nios2_ctrl_reg_macros.h、exception_handler.c、interval_timer_ISR.c和pushbutton_ISR.c都在...\University_Program\Computer_Systems\sample_programs\nios2\c\interrupt_example文件夹中提供。