|
中断函数
在定点C编译器中,中断可以用C函数直接处理。每个中断采用固定的程序名。如下所示
c_int0 系统复位中断
c_int1 外部中断0
c_int2 外部中断1
c_int3 外部中断2
c_int4 内部定时器中断
C_int5 串行口接收中断
c_int6 串行口发送中断
c_int7 TDM 口接收中断
c_int8 TDM口发送中断
c_int9 外部中断3
调用上述中断程序时,首先调用一个名为I$$SAVE的子程序,这个子程序保护了所有的寄存器。同样,在函数返回时,调用一个名为1$$REST的子程序用于恢复被保护的寄存器。
用C语言编写中断程序时,必须注意以下几点:
(1)对由SP(AR1)指向的字,编译器可能正在使用,因此必须加以保护。
(2)中断的屏蔽和使能必须由程序员设置,设置的方法是用嵌人汇编语句的方法修改IMR寄存器。这样修改不会破坏C环境或C指针。
(3)中断程序没有参数传递,即使说明,也将被忽略。
(4)由于用C编写中断程序时,需要保护所有的寄存器,因此效率不高。
(5)将一个程序与某个中断关联时,必须在相应的中断矢量处放置一条跳转指令。采用.sect汇编指令建立一个简单的跳转指令表就可以实现这个功能。
(6)在汇编语言中,注意必须在中断程序名前加一下划杠。例如,c语言中的c_int1,在汇编语言中为_c_int1。
(7)中断程序或在中断程序中需要调用的程序都不能用_oe选项进行优化编译。
|
|