如何重置PowerPC专用寄存器

时间:2012-09-14 15:10:11

标签: assembly vxworks powerpc

我需要复位(设置为0)特殊用途寄存器527(Alt时基寄存器高位)。 但是这个函数sysAltTimeBaseUreset崩溃了我的VxWorks目标的PowerPC(飞思卡尔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)

1 个答案:

答案 0 :(得分:2)

写入时基寄存器是为管理员级软件保留的。用户级软件不允许写入时基寄存器,通常在两个不同时间读取寄存器并减去查找经过的时间就足够了。

此外,您不应该只写上限时基址寄存器,因为只要较低时基寄存器换行,它就会改变。设置寄存器的建议步骤是将较低的时基寄存器设置为零(这可以防止在时基的下2个 32 标记内发生换行),然后设置较高的时基寄存器到期望值,然后将较低时基寄存器设置为所需值。 (读取时,应读取高位寄存器,读取低位寄存器,再次读取高位寄存器。如果高位寄存器发生变化,则必须丢弃低位寄存器的值并重复。)

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