在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM處理器模式切換(含MRS,MSR指令)

            ARM處理器模式切換(含MRS,MSR指令)

            作者: 時間:2016-11-20 來源:網(wǎng)絡(luò) 收藏

            1.1.1ARM處理器模式切換(含MRS,MSR指令

            除了用戶模式和系統(tǒng)模式,其余模式下都有一個私有SPSR保存狀態(tài)寄存器,用來保存切換到該模式之前的執(zhí)行狀態(tài),之所以用戶模式和系統(tǒng)模式?jīng)]有SPSR是因為,通常CPU大部分時間執(zhí)行在用戶模式下,當(dāng)產(chǎn)生異?;蛳到y(tǒng)調(diào)用時會分別切換進入另外幾種模式,保存用戶模式下的狀態(tài),當(dāng)切換回原先模式時,直接回復(fù)SPSR的值到CPSR就可以了,因此,用戶模式和系統(tǒng)模式下不需要SPSR,其詳細(xì)操作查看下節(jié)異常處理。
            以上幾種模式通過CPSR里的M[4:0]位進行區(qū)分,如圖3-1所示:


            圖3-1 CPSR控制位
            通過向模式位M[4:0]里寫入相應(yīng)的數(shù)據(jù)切換到不同的模式,在對CPSR,SPSR寄存器進行操作不能使用mov,ldr等通用指令,只能使用特權(quán)指令msr和mrs。
            在ARM處理器中,只有MRS(Move to Register from State register)指令可以對狀態(tài)寄存器CPSR和SPSR進行讀操作。通過讀CPSR可以獲得當(dāng)前處理器的工作狀態(tài)。讀SPSR寄存器可以獲得進入異常前的處理器狀態(tài)(因為只有異常模式下有SPSR寄存器)。
            例如:
            MRSR1,CPSR;將CPSR狀態(tài)寄存器讀取,保存到R1中
            MRSR2,SPSR;將SPSR狀態(tài)寄存器讀取,保存到R2中
            通過MRS指令可以取得狀態(tài)寄存器里的值,然后比較其模式位M[4:0]的值判斷當(dāng)前所處模式,當(dāng)然也可以比較其它相應(yīng)位了解當(dāng)前CPU的狀態(tài)。
            同樣,在ARM處理器中,只有MSR指令可以對狀態(tài)寄存器CPSR和SPSR進行寫操作。與MRS配合使用,可以實現(xiàn)對CPSR或SPSR寄存器的讀-修改-寫操作,可以切換處理器模式、或者允許/禁止IRQ/FIQ中斷等。
            由于xPSR寄存器代表了CPU的狀態(tài),其每個位有特殊意義,在執(zhí)行對xPSR狀態(tài)寄存器寫入時(讀取時不存在該用法),為了防止誤操作和方便記憶,將xPSR里32位分成四個區(qū)域,每個區(qū)域用小寫字母表示:
            c控制域屏蔽psr[7..0]
            x擴展域屏蔽psr[15..8]
            s狀態(tài)域屏蔽psr[23..16]
            f標(biāo)志域屏蔽psr[31..24]
            注意:區(qū)域名必須為小寫字母
            向?qū)?yīng)區(qū)域進行執(zhí)行寫入時,使用xPSR_x可以指定寫入?yún)^(qū)域,而不影響狀態(tài)寄存器其它位,如:
            使能IRQ中斷:
            ENABLE_IRQ
            MRSR0,CPSR;將CPSR寄存器內(nèi)容讀出到R0
            BICR0,R0,#0x80;清掉CPSR中的I控制位
            MSRCPSR_c,R0;將修改后的值寫回CPSR寄存器的對應(yīng)控制域
            MOVPC,LR;返回上一層函數(shù)
            禁用IRQ中斷:
            DISABLE_IRQ
            MRSR0 CPSR;將CPSR寄存器內(nèi)容讀出到R0
            ORRR0,R0,#0x80;設(shè)置CPSR中的I控制位
            MSRCPSR_c,R0;將修改后的值寫回CPSR寄存器的對應(yīng)控制域
            MOVPC,LR;返回上一層函數(shù)
            下表列出了不同模式的二進制數(shù)表示:
            表3-3不同工作模式對應(yīng)二進制
            模式名用戶快中斷中斷管理中止未定義系統(tǒng)
            M[4:0]10000100011001010011101111101111111
            在對開發(fā)板進行初始化時,用對不同模式指定其棧空間,下面例子對各模式的棧指針sp進行初始化:
            stack_init;棧指針初始化函數(shù)
            @ undefine_stack
            msr cpsr_c,#0xdb;切換到未定義異常
            ldrsp,=0x34000000;棧指針為內(nèi)存最高地址,棧為倒生的棧
            ;棧空間的最后1M0x34000000~0x33f00000
            @ abort_stack
            msr cpsr_c,#0xd7;切換到終止異常模式
            ldrsp,=0x33f00000;??臻g為1M,0x33f00000~0x33e00000
            @ irq_stack
            msrcpsr_c,#0xd2;切換到中斷模式
            ldrsp,=0x33e00000;??臻g為1M,0x33e00000~0x33d00000
            @ sys_stack
            msrcpsr_c,#0xdf;切換到系統(tǒng)模式
            ldrsp,=0x33d00000;??臻g為1M,0x33d00000~0x33c00000
            msrcpsr_c,#0xd3;切換回管理模式
            mov pc,lr



            評論


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

            關(guān)閉