日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]ARM指令集提供了兩條指令,可直接控制程序狀態(tài)寄存器psr。MRS指令用于把cpsr或者spsr的值傳送到一個寄存器;MSR與之相反,它將一個寄存器的內(nèi)容傳送到cpsr或者spsr。這兩條指令結(jié)合,可用于對cpsr和spsr進行讀/寫操作。

9.2狀態(tài)寄存器訪問指令

ARM指令集提供了兩條指令,可直接控制程序狀態(tài)寄存器psr。MRS指令用于把cpsr或者spsr的值傳送到一個寄存器;MSR與之相反,它將一個寄存器的內(nèi)容傳送到cpsr或者spsr。這兩條指令結(jié)合,可用于對cpsr和spsr進行讀/寫操作。

表9.2總結(jié)了狀態(tài)寄存器訪問指令。

表9.2 狀態(tài)寄存器訪問指令

助記符

含義

操作

MRS

將程序狀態(tài)字寄存器的值送到通用寄存器

Rd=spr

MSR

將通用寄存器的值送到程序狀態(tài)字寄存器

Psr[field]=Rm

MSR

將一個立即數(shù)送到程序狀態(tài)字

Psr[field]=immediate

當需要保存或修改當前模式下CISR或SPSR的內(nèi)容時,首先必須將這些內(nèi)容傳送到通用寄存器中,對選擇的位進行修改,然后將數(shù)據(jù)回寫到狀態(tài)寄存器。對于ARM和Thumb的狀態(tài)切換也是如此,程序不能通過直接改寫CPSR中的T控制位直接將程序狀態(tài)切換到Thumb狀態(tài),必須通過BX等指令完成程序狀態(tài)的切換。

9.2.1程序狀態(tài)字內(nèi)容送通用寄存器指令MRS1.指令編碼格式

讀狀態(tài)寄存器指令MRS。在ARM寄存器中,只有MRS指令可以將狀態(tài)寄存器CPSR或SPSR讀出到通用寄存器中。將程序狀態(tài)字內(nèi)容讀取到通用寄存器中后就可以對其進行計算、修改等操作。

指令的編碼格式如圖9.6所示。

圖9.6MRS指令編碼格式

2.指令的語法格式

MRS{<cond>}<Rd>,CPSR

MRS{<cond>}<Rd>,SPSR

①<cond>

為指令編碼中的條件域。它指示指令在什么條件下執(zhí)行。當<cond>忽略時,指令為無條件執(zhí)行(cond=AL(Alway))。

②<Rd>

確定指令的目標寄存器。如果r15被用作目標寄存器,指令的執(zhí)行結(jié)果不可預知。

3.指令操作的偽代碼

指令操作的偽代碼如下面程序段所示。

IfConditionPassed{cond}then

IfR==1then

Rd=SPSR

Else

Rd=CPSR

4.指令的使用

MRS指令注意用于以下3種場合:

·當需要保存或修改當前模式下CPSR或SPSR的內(nèi)容時,首先必須將這些內(nèi)容傳送到通用寄存器中,對選擇的位進行修改,然后將數(shù)據(jù)回寫到狀態(tài)寄存器。

·當異常中斷允許嵌套時,需要在進入異常中斷之后,嵌套中斷發(fā)生之前保存當前處理器模式對應的SPSR。這時需要先通過MRS指令讀出SPSR的值,再用其他指令(如壓棧指令)將SPSR值保存起來。

·在進程切換時也需要保存當前狀態(tài)寄存器的值。

注意

在用戶模式下對CPSR[23∶0]進行任何修改都是無效的。另外,盡量避免在用戶模式或系統(tǒng)模式下訪問SPSR,因為在這種模式下沒有SPSR,如果執(zhí)行此操作,指令的執(zhí)行結(jié)果不可預知。

5.指令舉例

(1)將CPSR狀態(tài)寄存器讀取,保存到r1中。

MRSr1,CPSR

(2)將SPSR狀態(tài)寄存器讀取,保存到r2中。

MRSr2,SPSR

(3)MSR指令讀取CPSR,用來判斷ALU的狀態(tài)標志或IRQ/FIQ中斷是否允許等;在異常處理程序中,讀SPSR可知道進入異常前的處理器狀態(tài)等。MRS與MSR配合使用,實現(xiàn)CPSR或SPSR寄存器的讀-修改-寫操作,可用來進行處理器模式的切換或禁止/使能IRQ/FIQ中斷等設(shè)置。另外,進行切換或允許異常中斷嵌套時,也需要使用MRS指令讀取SPSR狀態(tài)值保存起來。

下面的例子使能IRQ中斷。

ENABLE_IRQ

MRSr0,CPSR

BICr0,r0,#0x80

MSRCPSR_c,r0

MOVPC,LR

下面的例子禁止IRQ中斷。

DISABLE_IRQ

MRSr0,CPSR

ORRr0,r0,#0x80

MSRCPSR_c,r0

MOVPC,LR

9.2.2寫狀態(tài)寄存器指令MSR1.指令編碼格式

寫狀態(tài)寄存器指令MSR(MovetoStatusRegisterfromARMRegister)。在ARM處理器中,只有MSR指令可以直接設(shè)置狀態(tài)寄存器CPSR或SPSR。

圖9.7、圖9.8分別顯示了源操作數(shù)為立即數(shù)的MSR指令和源操作數(shù)為寄存器的MSR指令的編碼格式。

圖9.7源操作數(shù)為立即數(shù)的MSR指令編碼格式

圖9.8源操作數(shù)為寄存器的MSR指令編碼格式

2.指令的語法格式

MSR{<cond>}CPSR_<fields>,#<immediate>

MSR{<cond>}CPSR_<fields>,<Rm>

MSR{<cond>}SPSR_<fields>,#<immediate>

MSR{<cond>}SPSR_<fields>,<Rm>

①<cond>

為指令編碼中的條件域。它指示指令在什么條件下執(zhí)行。當<cond>忽略時,指令為無條件執(zhí)行(cond=AL(Alway))。

②<fields>

域標志位,是下面選項中的一種或幾種的組合。

·C:設(shè)置控制位掩碼域(bit[16])。

·X:設(shè)置擴展位掩碼域(bit[17])。

·S:設(shè)置狀態(tài)位掩碼域(bit[18])。

·F:設(shè)置標志位掩碼域(bit[19])

③<immediate>

將被傳送到CPSR和SPSR寄存器的立即數(shù)。此立即數(shù)可以為8位立即數(shù)(范圍在0x00~0xff之間)。

④<Rm>

指定的通用寄存器,此寄存器包含將要被傳送狀態(tài)寄存器中的數(shù)據(jù)。

3.指令操作的偽代碼

指令操作的偽代碼如下面程序段所示。

IfConditionPassed{cond}then

Ifopcode[25]==1

Operand=8_bit_immediateRotate_Right{rotate_imm*2}

Else/*opcode[25]==0*/

Operand=Rm

IfR==0then

Iffield_mask[0]==1andinAprivilegedMode()then

CPSR[7:0]=operand[7:0]

Iffield_mask[1]==1andinAprivilegedMode()then

CPSR[15:8]=operand[15:8]

Iffield_mask[2]==1andinAprivilegedMode()then

CPSR[23:16]=operand[23:16]

Iffield_mask[3]==1andthen

CPSR[31:24]=operand[31:24]

Else/*R==1*/

Iffield_mask[0]==1andCurrentModeHasSPSR()then

SPSR[7:0]=operand[7:0]

Iffield_mask[1]==1andCurrentModeHasSPSR()then

SPSR[15:8]=operand[15:8]

Iffield_mask[2]==1andCurrentModeHasSPSR()then

SPSR[23:16]=operand[23:16]

Iffield_mask[3]==1andCurrentModeHasSPSR()then

SPSR[31:24]=operand[31:24]

4.指令的使用

詳見MRS指令。

5.指令舉例

(1)使用“讀-修改-寫”模式更新CPSR寄存器。

MRSr0,CPSR ;讀CPSR寄存器的值

BICr0,r0,#0xf0000000 ;清除N、Z、C、V位

MSRCPSR_f,r0 ;更新CPSR中的標志位

注意

因為PSR狀態(tài)寄存器中存在目前沒有定義的保留位,所以在使用時,最好加上“_fsxc”后綴,如上例中的“CPSR_f”。這樣做的目的是使指令只修改程序狀態(tài)寄存器的某個域,防止程序向高版本指令集移植時發(fā)生意外。

(2)禁止IRQ中斷。

MRSr0,CPSR;讀CPSR狀態(tài)寄存器

ORRr0,r0,#0x80;設(shè)置IRQ中斷禁止位

MSRCPSR_c,r0;更新CPSR狀態(tài)寄存器

(3)堆棧初始化。

INITSTACK

MOVr0,LR;保存返回地址

;設(shè)置管理模式堆棧

MSRCPSR_c,#0xd3;

LDRSP,StackSvc;

;設(shè)置中斷模式堆棧

MSRCPSR_c,#0xd2;

LDRSP,StackIrq;

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉