我需要复位(设置为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)
答案 0 :(得分:2)
写入时基寄存器是为管理员级软件保留的。用户级软件不允许写入时基寄存器,通常在两个不同时间读取寄存器并减去查找经过的时间就足够了。
此外,您不应该只写上限时基址寄存器,因为只要较低时基寄存器换行,它就会改变。设置寄存器的建议步骤是将较低的时基寄存器设置为零(这可以防止在时基的下2个 32 标记内发生换行),然后设置较高的时基寄存器到期望值,然后将较低时基寄存器设置为所需值。 (读取时,应读取高位寄存器,读取低位寄存器,再次读取高位寄存器。如果高位寄存器发生变化,则必须丢弃低位寄存器的值并重复。)
此外,建议使用助记符写入时基寄存器mttbu
和mttbl
,而不是硬编码的特殊寄存器编号。我不记得细节,但是一些PowerPC实现在备用寄存器号上有时基寄存器的回声,我认为它们可以读取但不能写入。