PowerPC處理器的寄存器大端小端影響寫入感想

先放結論:沒啥影響。

這兩天又要重新撿起來MPC8377的板子開始做項目,因爲SylixOS的內核有所變動,網卡協議棧多做了一層封裝,所以網卡驅動也有相應變化,需要重新修改一下。然後考慮到上次我寫的中斷驅動實在太醜,看到人家工程師寫的中斷驅動代碼比我好看很多,所以決心在重寫網卡驅動前先把中斷控制器驅動模仿着重寫一下。但是寫的時候發現了一個問題:


中斷控制器寄存器是內存映射寄存器,以中斷屏蔽寄存器SIMSR_H爲例子,在芯片手冊上面,是這麼畫的和描述的:


我們知道,PPC是大端模式,也就是說,數據高位存在內存高地址,0x12345678這個值存在內存中時,地址由低到高存的就是12 34 56 78,而ARM或者X86的地址由低到高應該存的是78 56 34 12,那麼問題來了:

比如我要把這個寄存器的bit 0置1允許TSEC1的發送中斷,問題來了,因爲PPC是大端模式,那麼我寫入這個寄存器的值,應該是:0x80000000還是0x00000001呢?

之前非常糾結,可以說糾結了一下午,改了又改(因爲一些原因板子沒在身邊),還跑到SylixOS的羣裏面問了一些比較蠢的問題,裏面的一個大神給我說的是:

“大小端只在零存整取或整存零取時才需要考慮。”,我這種整存整取的情況,應該是不需要考慮大端小端問題的,也就是說,我要把最低位置1的話(因爲我問的就是最低位置1),無論大端小端都應該寫入0x00000001。


不過!重點來了,其實按照手冊上這麼畫的,這個最高位和最低位其實是反的,也就是說,其實手冊上面的bit 0是實際上的最高位……也就是說……我實際上想把bit 0置1的話,應該是無論大端小端都寫入0x80000000。


實際上,按照手冊上的寄存器的bit寫法對應着寫值就可以了,根本不用糾結大端小端的問題(實際上我上次寫的時候也是這麼幹的,不過那是因爲根本沒想起來PPC是大端模式,直接忽略了…)。真是又學到了。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章