找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16072|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

【經(jīng)驗筆記】Cortex-M4寄存器組介紹

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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表