我试图让 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
}
有没有人经历过类似的行为,并且知道我在哪里可以预料到这个问题?
提前致谢