我可以在另一个中断向量中调用中断向量吗?
例如,当我在ep4inout中断向量中执行一个过程时:
void ep4inout interrupt 0
{
.
.
.
Timer1 = 1; //call interrupt for timer 1
.
.
.
}
修改
我的代码看起来大致如此。 Timer1 = 1,表示定时器1的中断请求置位。我在Timer 1 ISR中的程序不起作用。在FX2LP手册中,定时器1的优先级高于端点缓冲区。我尝试将定时器1的优先级设置为高,将端点4设置为低。结果仍然相同。我使用Keil uVision2作为我的IDE,我的微控制器是赛普拉斯FX2LP(增强了8051 - USB控制器)。
void ISR_Ep4inout(void) interrupt 0
{
.
.
.
Timer1Enable = 1;
Timer1 = 1; //call interrupt for timer 1
.
.
.
}
void TMR1_Vect(void) interrupt 2 //timer 1 interrupt
{
.
.
.
}
void TMR1_Vect interrupt 0 //timer 1 interrupt
{
.
.
.
}
答案 0 :(得分:0)
如果函数是常规C函数,则编译器无法知道该函数是否用作中断。是的,您可以调用该功能。
如果在您的情况下,您必须使用interrupt 0
或任何其他方式(ISR
,INTERRUPT
)来指明此类功能,则通常不能。
问题通常是用于终止函数的return
指令(在汇编程序级别上):对于中断服务程序,编译器必须使用不同的返回指令。
您已经指出了一种“调用函数”的不同方法:我假设您的Timer1 = 1;
将有效地设置定时器中断的中断请求位,从而激活中断服务程序。这应该没有问题。但是你需要检查处理器/编译器手册,了解首先处理哪个中断,以及ISR是否被中断。