2012-09-14 67 views
1

我需要重置(設置爲0)特殊用途寄存器527(Alt時基寄存器上)。 但這個功能sysAltTimeBaseUreset崩潰我的VxWorks目標的PowerPC(飛思卡爾P2020):如何重置PowerPC專用寄存器

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

寫入時基寄存器保留給管理員級軟件。用戶級軟件不允許寫入時基寄存器,並且通常在兩個不同的時間讀取寄存器並減去以找出經過的時間就足夠了。

此外,你不應該只寫上層時間基地址寄存器,因爲每當下層時基地址寄存器打包時它就會改變。設置寄存器的建議步驟是將較低時基寄存器設置爲零(這可以防止在時基的下一個時鐘滴答內發生換行),然後將上時基寄存器設置爲期望值,然後將較低的時基寄存器設置爲所需的值。 (當讀取時,您應該讀取較高的寄存器,讀取較低的寄存器,並再次讀取較高的寄存器;如果較高的寄存器更改,則必須丟棄較低寄存器中的值並重復)。建議使用助記符寫入時基寄存器mttbumttbl,而不是硬編碼的特殊寄存器編號。我不記得這些細節,但是一些PowerPC實現在備用寄存器編號處有時基寄存器的回聲,我認爲它們可以被讀取但不能寫入。