在另一个中断向量内调用中断向量

时间:2011-12-21 03:05:46

标签: c interrupt

我可以在另一个中断向量中调用中断向量吗?

例如,当我在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
{
     .
     .
     .
}

1 个答案:

答案 0 :(得分:0)

如果函数是常规C函数,则编译器无法知道该函数是否用作中断。是的,您可以调用该功能。

如果在您的情况下,您必须使用interrupt 0或任何其他方式(ISRINTERRUPT)来指明此类功能,则通常不能。
问题通常是用于终止函数的return指令(在汇编程序级别上):对于中断服务程序,编译器必须使用不同的返回指令。

您已经指出了一种“调用函数”的不同方法:我假设您的Timer1 = 1;将有效地设置定时器中断的中断请求位,从而激活中断服务程序。这应该没有问题。但是你需要检查处理器/编译器手册,了解首先处理哪个中断,以及ISR是否被中断。

顺便说一句,您可以提供更多信息和详细信息。不是每个人都说“调用中断向量”然后显示“变量”被设置为1。我假设你进入嵌入式开发;请指出编译器和/或处理器之类的东西,因为它们与提供有用的答案非常相关。