1

我需要重置(设置为 0)特殊用途寄存器 527(Alt Time Base 寄存器上限)。但是这个函数 sysAltTimeBaseUreset 使我的 VxWorks 目标的 PowerPC (Freescale P2020) 崩溃:

FUNC_BEGIN(sysAltTimeBaseUreset)
    mtspr       527, 0x0000              /* reset high 32-bits of Alt. Time Base register */
    bclr        20,0                    /* Return to caller */
FUNC_END(sysAltTimeBaseUreset)

下面的函数工作正常,并返回 AltTimeBase 高位寄存器的内容。

FUNC_BEGIN(sysAltTimeBaseUGet)
    mfspr       r3, 527            /* high 32-bits of Alt. Time Base register */
    bclr        20,0                    /* Return to caller */
FUNC_END(sysAltTimeBaseUGet)
4

1 回答 1

2

对时基寄存器的写操作是为监督级软件保留的。用户级软件不允许写入时基寄存器,通常在两个不同的时间读取寄存器并减去以找到经过的时间就足够了。

此外,您不应该只写入高位时基寄存器,因为只要低位时基寄存器回绕,它就会发生变化。设置寄存器的推荐过程是将下时基寄存器设置为零(这可以防止在时基的下一个 2 32 个滴答内发生回绕),然后将上时基寄存器设置为所需值,然后设置较低的时基寄存器到所需的值。(读的时候要先读高位寄存器,再读低位寄存器,再读高位寄存器。如果高位寄存器发生变化,必须丢弃低位寄存器的值,重复。)

此外,建议使用助记符写入时基寄存器,mttbumttbl不是硬编码的特殊寄存器编号。我不记得细节,但一些 PowerPC 实现在备用寄存器编号处有时基寄存器的回声,我认为它们可以读取但不能写入。

于 2012-09-14T15:23:16.797 回答