在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM存儲(chǔ)器之:協(xié)處理器CP15

            ARM存儲(chǔ)器之:協(xié)處理器CP15

            作者: 時(shí)間:2013-09-30 來(lái)源:網(wǎng)絡(luò) 收藏

            本文引用地址:http://www.biyoush.com/article/257013.htm

            15.1.1寄存器訪問(wèn)指令

            通常對(duì)的訪問(wèn)使用以下兩種指令。

            MCR:將寄存器的值寫(xiě)入寄存器中;

            MRC:將CP15寄存器的值寫(xiě)入寄存器中。

            注意

            通過(guò)訪問(wèn)指令CDP、LDC和STC指令對(duì)CP15進(jìn)行訪問(wèn)將產(chǎn)生不可預(yù)知的結(jié)果。

            其中,CDP為協(xié)處理器數(shù)據(jù)操作指令,這個(gè)指令初始化一些與協(xié)處理器相關(guān)的操作;

            LDC為一個(gè)或多個(gè)字的協(xié)處理器數(shù)據(jù)讀取指令,此指令從讀取數(shù)據(jù)到指定的協(xié)處理器中;

            STC為一個(gè)或多個(gè)32位字的協(xié)處理器數(shù)據(jù)寫(xiě)入指令,此指令初始化一個(gè)協(xié)處理器的寫(xiě)操作,從給定的協(xié)處理器把數(shù)據(jù)傳送到中。

            指令MCR和MRC指令訪問(wèn)CP15寄存器使用通用語(yǔ)法。

            語(yǔ)法格式為:

            MCR{cond>}p15,opcode1=0>,Rd>,CRn>,CRm>{,opcode2>}

            MRC{cond>}p15,opcode1=0>,Rd>,CRn>,CRm>{,opcode2>}

            其中:

            cond>為指令的執(zhí)行條件。當(dāng)cond>條件域?yàn)榭諘r(shí),指令無(wú)條件執(zhí)行;

            opcode1>在標(biāo)準(zhǔn)的MRC指令中,為協(xié)處理器的opcode1>,即操作數(shù)1。對(duì)于CP15來(lái)說(shuō),此操作數(shù)恒為0,即0b000。當(dāng)針對(duì)CP15的MRC指令中opcode1>不為0時(shí),指令的操作結(jié)果不可預(yù)知;

            Rd>為寄存器,在ARM和協(xié)處理器交換數(shù)據(jù)時(shí)使用。在MRC指令中作為目的寄存器,在MCR中作為源寄存器。

            注意

            r15不能作為ARM寄存器出現(xiàn)在MRC或MCR指令中,如果r15作為Rd>出現(xiàn)在這里,那么指令的執(zhí)行結(jié)果不可預(yù)知。

            CRn>是CP15協(xié)處理器指令中用到的主要寄存器。在MRC指令中為源寄存器,在MCR中為目的寄存器。CP15協(xié)處理器的寄存器c0、c1、…、c15均可出現(xiàn)在這里。

            CRm>是附加的協(xié)處理器寄存器,用于區(qū)分同一個(gè)編號(hào)的不同物理寄存器和訪問(wèn)類型。當(dāng)指令中不需要提供附加信息時(shí),將CRm>指定為C0,否則指令的操作結(jié)果不可預(yù)知。

            opcode2>提供附加信息,用于區(qū)分同一個(gè)編號(hào)的不同物理寄存器,當(dāng)指令中沒(méi)有指定附加信息時(shí),省略opcode2>或者將其指定為0,否則指令的操作結(jié)果不可預(yù)知。

            MCR和MRC指令只能操作在特權(quán)模式下,如果處理器運(yùn)行在用戶模式,指令的執(zhí)行結(jié)果不可預(yù)知。

            注意

            在用戶模式下,如果要訪問(wèn)系統(tǒng)控制協(xié)處理器,通常的做法是由操作系統(tǒng)提供SWI軟中斷調(diào)用來(lái)完成系統(tǒng)模式的切換。由于不同型號(hào)的ARM處理器對(duì)此管理差別很大,所以建議用戶在應(yīng)用時(shí)將SWI作為一個(gè)獨(dú)立的模塊來(lái)管理并向上提供通用接口,以屏蔽不同型號(hào)處理器之間的差異。

            例15.1給出了一個(gè)典型的利用SWI進(jìn)行模式切換的例子。

            【例15.1】

            典型的在SWI中進(jìn)行模式切換的例子。利用此例,調(diào)用SWI0來(lái)完成系統(tǒng)模式切換。

            EHT_SWI

            LDRsp,=EHT_Exception_Stack ;更新SWI堆棧指針

            ADDsp,sp,#EXCEPTION_SIZE ;得到棧頂指針

            STMDBsp!,{r0-r2,lr} ;保存程序中用到的寄存器

            MRSr0,SPSR ;得到SPSR

            STMDBsp!,{r0} ;保持SPSR

            LDRr0,[lr,#-4] ;計(jì)算SWI指令地址

            BICr0,r0,#0xFF000000 ;提取中斷向量號(hào)

            CMPr0,#MAX_SWI ;檢測(cè)中斷向量范圍

            LDRLSpc,[pc,r0,LSL#2] ;如果在范圍內(nèi),跳轉(zhuǎn)到軟中斷向量表

            BEHT_SWI_Exit ;為定義的SWI指令出口

            EHT_Jump_Table

            DCDEHT_SU_Switch

            DCDEHT_Disable_Interrupts

            ;*********************************************************************************

            ;用戶可在此添加更多的自定義軟中斷,在此SWI0作為系統(tǒng)保留的軟中斷,調(diào)用例程EHT_SU_Switch,來(lái)進(jìn)行模式切換

            ;*********************************************************************************

            EHT_SU_Switch

            MMU_DISABLE ;轉(zhuǎn)換前禁用MMU

            LDMIAsp!,{r0} ;從堆棧中取出SPSR

            BICr0,r0,#MODE_MASK ;清除模式位

            ORRr0,r0,#SYS_MODE ;設(shè)置程序狀態(tài)字的supper模式位

            STMDBsp!,{r0} ;從新將SPSR放入堆棧

            BEHT_SWI_Exit

            EHT_Disable_Interrupts

            LDMIAsp!,{r0} ;從堆棧中讀出SPSR

            ORRr0,r0,#LOCKOUT ;禁止中斷

            STMDBsp!,{r0} ;存儲(chǔ)SPSR到中斷

            ;BEHT_SWI_Exit

            EHT_SWI_Exit

            LDMIAsp!,{r0} ;從堆棧中讀出SPSR

            MSRSPSR_cf,r0 ;將SPSR放入SPSR_cf

            LDMIAsp!,{r0-r2,pc}^ ;寄存器出棧并返回

            END



            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉