0

我试图让 OSEK-Alarm 机制在 arm7 (lpc2292) 上运行。当使用 uVision5 IDE 模拟我的 Demo 应用程序时,一切正常。但是在目标平台上执行代码似乎中断只发生一次。不幸的是,我无法将串行接口附加到该平台以进行调试...

由于我需要将此功能嵌入到上下文切换汇编代码中,因此从顶级中断处理程序调用此函数。可以看出,每个定时器中断都会重置中断标志,该中断被配置为在计数器与匹配寄存器 0 匹配时触发;

void handleNonVectoredInterrupt()
{
  UINT32 src = VICRawIntr;
  if(src & ( 1 << TIMER0 ) ) 
  { 
    if( T0IR & 1 )              
    { 
      tickCounter(&systemCounter);    
      T0IR = 1;
    }
  }
}

正如我所说,这段代码在模拟中完美运行,这让我更加困惑。这是我如何初始化计数器以及中断的代码:

在 VIC 中启用中断:

VICIntEnable |= (1 << TIMER0);

设置计数器:

void initializeHardwareCounter(UINT32 ticktime_ns)       // ticktime 10^6 ns
{
  T0PR    = (SYS_CLOCK / (2 * ticktime_ns / 1000)) - 1;  // SysClk = 36MHz 
  T0MCR  |= (1 << 0) | (1 << 1);                         // Match MR0 and reset
  T0TC    = 0xFFFFFFFF;                                  // reset counter  
  T0TCR  |= (1 << 0);                                    // enable as counter
  T0MR0   = 0;                                           // match value
}

有没有人经历过类似的行为,并且知道我在哪里可以预料到这个问题?

提前致谢

4

0 回答 0