標題: 【經(jīng)驗筆記】Cortex-M4寄存器組介紹 [打印本頁]

作者: xuwei    時間: 2015-6-24 17:00
標題: 【經(jīng)驗筆記】Cortex-M4寄存器組介紹
    燒完水回來繼續(xù)發(fā)力第三更(呵呵,小說的感覺又來了有木有),嘿嘿,連續(xù)寫了兩篇有點找回了以前的感覺,狀態(tài)頗佳,呵呵,所以還是寫完再去吃飯去吧~
            其實本篇內(nèi)容早就想寫出來,畢竟介紹了這么多飛思卡爾的Kinetis但一直沒有專門介紹過它的內(nèi)核——Cortex-M4。因為如果你想深入研究一款片子,了解其內(nèi)核是必要的,所以本篇就先拿出內(nèi)核的基本——寄存器組作為敲門磚開啟我們研究內(nèi)核的大門,呵呵,說的有點大了,不過以后我肯定還會陸續(xù)寫一些內(nèi)核的東西,從深處挖掘知識的應用。下面不多說了,進入正題(部分資料參考了Cortex-M3內(nèi)核):
       
            如上圖,R0~R12為32位通用寄存器,通用寄存器又分為高組和低組,至于通用寄存器的作用(可以回去看看51內(nèi)核的R0~R7)可能有人會說我們用C編程的時候不會考慮它們,只有匯編才會用到,但是實際上無論是在啟動代碼部分還是操作系統(tǒng)移植的時候都會接觸到它們,甚至到以后考慮程序優(yōu)化的時候也會用到的,所以重要性不言而喻,這也是我為什么最開始就介紹它的理由之一。下面就分別介紹下這幾個寄存器(參考了CM3權威指南部分資料,因為在寄存器組方面CM4和CM3是一樣的):
        (1)通用寄存器R0~R7:為低組寄存器,所有指令都可以訪問,大小為32位,復位后初始值不定;
        (2)通用寄存器R8~R12:為高組寄存器,只有部分的16位Thumb指令可以訪問,32位Thumb-2指令不受限制,大小為32位,復位后初始值仍然不定;
        (3)R13為堆棧指針(即SP,這個應該都知道了),CM4內(nèi)核和CM3內(nèi)核是一樣的,有兩個堆棧指針(注意都是共用R13,只不過不能同時訪問罷了,引用R13即引用當前使用的指針(MSP or PSP))。其中MSP(主堆棧指針)即默認的堆棧指針,一般由OS內(nèi)核、異常服務例程以及所有需要特權訪問的應用程序代碼使用;而PSP(進程堆棧指針)用于常規(guī)的應用代碼(即不處于異常服務例程中時)。
        (4)R14為連接寄存器(即LR),主要作用就是保存子程序的返回地址,以便在執(zhí)行完子程序時恢復現(xiàn)場;
        (5)R15為程序計數(shù)器(即PC,這個如果不知道可以放棄編程了,哈哈),可以在程序里直接插入PC以跳轉到相應的地址(不過不更新LR),所以功能大大滴有用。另外由于CortexM系列采用指令流水線技術,所以如果讀PC返回值的話應該是當前指令的地址+4的,這個需要注意一下。
        另外除了通用寄存器之外,CM4的內(nèi)核還包括三組寄存器即程序狀態(tài)寄存器組(PSRs)、中斷屏蔽寄存器組(PRIMASK、FAULTMASK以及BASEPRI)和控制寄存器(Control):
       
       
       
            呼呼,寫到這總算是把寄存器組介紹完畢了,其實大部分是我從CM3的資料里移植過來的,因為CM3和CM4內(nèi)核沒差多少,尤其是寄存器組這塊更是沒有變,所以就借花獻佛了,哈哈,不多說了,餓死了,去吃飯了,enjoy it~
            未完待續(xù)~






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1