【问题标题】:how to reset a PowerPC special purpose register如何重置 PowerPC 专用寄存器
【发布时间】:2012-09-14 15:10:11
【问题描述】:

我需要重置(设置为 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)

【问题讨论】:

    标签: assembly vxworks powerpc


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-01-10
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      相关资源
      最近更新 更多