在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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)用 > 8051、ARM和DSP指令周期的測(cè)試與分析方法

            8051、ARM和DSP指令周期的測(cè)試與分析方法

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

            在實(shí)時(shí)嵌入式控制系統(tǒng)中,對(duì)系統(tǒng)的性能有至關(guān)重要的影響。介紹幾種最常用的微控制器的工作機(jī)制,采用一段循環(huán)語(yǔ)句對(duì)這幾種微控制器的進(jìn)行測(cè)試,并進(jìn)行分析比較。分析結(jié)論對(duì)系統(tǒng)控制器的選擇有一定的指導(dǎo)作用。

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

            在實(shí)時(shí)控制系統(tǒng)中,選擇微控制器的指標(biāo)時(shí)最重要的是計(jì)算速度的問(wèn)題。是反映計(jì)算速度的一個(gè)重要指標(biāo),為此本文對(duì)三種最具代表性的微控制器(AT89S51單片機(jī)、7TDMI核的LPC2114型單片機(jī)和TMS320F2812)的指令周期進(jìn)行了分析和測(cè)試。為了能觀察到指令周期,將三種控制器的GPIO口設(shè)置為數(shù)字輸出口,并采用循環(huán)不斷地置位和清零,通過(guò)觀察GPIO口的波形變化得到整個(gè)循環(huán)的周期。為了將整個(gè)循環(huán)的周期與具體的每一條指令的指令周期對(duì)應(yīng)起來(lái),通過(guò)C語(yǔ)言源程序得到匯編語(yǔ)言指令來(lái)計(jì)算每一條匯編語(yǔ)言的指令周期。

            1、 AT89S51工作機(jī)制及指令周期的測(cè)試

            AT89S51單片機(jī)的時(shí)鐘采用內(nèi)部方式,時(shí)鐘發(fā)生器對(duì)振蕩脈沖進(jìn)行2分頻。由于時(shí)鐘周期為振蕩周期的兩倍(時(shí)鐘周期=振蕩周期P1+振蕩周期P2),而1個(gè)機(jī)器周期含有6個(gè)時(shí)鐘,因此1個(gè)機(jī)器周期包括12個(gè)晶振的振蕩周期。取石英晶振的振蕩頻率為11.059 2 MHz,則單片機(jī)的機(jī)器周期為12/11.059 2=1.085 1 μs。51系列單片機(jī)的指令周期一般含1~4個(gè)機(jī)器周期,多數(shù)指令為單周期指令,有2周期和4周期指令。

            為了觀察指令周期,對(duì)單片機(jī)的P1口的最低位進(jìn)行循環(huán)置位操作和清除操作。源程序如下:

            #include
            main() {
              while(1) {
                P1=0x01;
                P1=0x00;
              }
            }

            采用KEIL uVISION2進(jìn)行編譯、鏈接,生成可執(zhí)行文件。當(dāng)調(diào)用該集成環(huán)境中的Debug時(shí),可以得到上述源程序混合模式的反匯編代碼:

                2:main()
                3: {
                4:while(1)
                5:{
                6:P1=0x01;
              0x000F759001MOVP1(0x90),#0x01
                7:P1=0x00;
              0x0012 E4CLRA
              0x0013 F590MOVP1(0x90),A
                8:}
              0x001580EDSJMPmain (C:0003)

            其中斜體的代碼為C源程序,正體的代碼為斜體C源程序?qū)?yīng)的匯編語(yǔ)言代碼。每行匯編代碼的第1列為該代碼在存儲(chǔ)器中的位置,第2列為機(jī)器碼,后面是編譯、鏈接后的匯編語(yǔ)言代碼。所有指令共占用6個(gè)機(jī)器周期(其中“MOV P1(0x90),#0x01”占用2個(gè)機(jī)器周期,“CLR A”和“MOV P1(0x90),A”各占用1個(gè)機(jī)器周期,最后一個(gè)跳轉(zhuǎn)指令占用2個(gè)機(jī)器周期),則總的循環(huán)周期為6×機(jī)器周期=6×1.085 1 μs=6.51 μs。


            圖1 P1口最低位的波形

            將編譯、鏈接生成的可執(zhí)行文件下載到AT89S51的Flash中執(zhí)行可以得到P1口最低位的波形,如圖1所示。整個(gè)循環(huán)周期為6.1 μs,與上面的分析完全一致。

            2、 LPC2114工作機(jī)制及指令周期的測(cè)試

            LPC2114是基于7TDMI核的可加密的單片機(jī),具有零等待128 KB的片內(nèi)Flash,16 KB的SRAM。時(shí)鐘頻率可達(dá)60 MHz(晶振的頻率為11.059 2 MHz,時(shí)鐘頻率設(shè)置為11.059 2×4 =44.236 8 MHz,片內(nèi)外設(shè)頻率為時(shí)鐘頻率的1/4,即晶振的頻率)。7TDMI核通過(guò)使用三級(jí)流水線和大量使用內(nèi)部寄存器來(lái)提高指令流的執(zhí)行速度,能提供 0.9 MIPS/MHz的指令執(zhí)行速度,即指令周期為1/(0.9×44.236 8)=0.025 12 μs,約為25 ns。

            為了觀察指令周期,將LPC2114中GPIO的P0.25腳設(shè)置為輸出口,并對(duì)其進(jìn)行循環(huán)的置位操作和清除操作。C源程序如下:

              #includeconfig.h
              //P0.25引腳輸出
              #defineLEDCON0x02000000
              intmain(void)
              {//設(shè)置所有引腳連接GPIO
                PINSEL0 = 0x00000000;
                PINSEL1 = 0x00000000;
                //設(shè)置LED4控制口為輸出
                IO0DIR = LEDCON;
                while(1)
                {IO0SET = LEDCON;
                  IO0CLR = LEDCON;
                }
              return(0);
            }

            采用ADS1.2進(jìn)行編譯、鏈接,生成可執(zhí)行文件。當(dāng)調(diào)用AXD Debugger時(shí),可以得到上述源程序的反匯編代碼:

              main[0xe59f1020]ldrr1,0x40000248
              40000224[0xe3a00000]movr0,#0
              40000228[0xe5810000]strr0,[r1,#0]
              4000022c[0xe5810004]strr0,[r1,#4]
              40000230[0xe3a00780]movr0,#0x2000000
              40000234[0xe1c115c0]bicr1,r1,r0,asr #11
              40000238[0xe5810008]strr0,[r1,#8]
              4000023c[0xe5810004]strr0,[r1,#4]
              40000240[0xe581000c]strr0,[r1,#0xc]
              40000244[0xeafffffc]b0x4000023c
              40000248[0xe002c000]dcd0xe002c000

            每行匯編代碼的第1列為該代碼在存儲(chǔ)器中的位置,第2列為機(jī)器碼,后面是編譯、鏈接后的匯編語(yǔ)言代碼。循環(huán)部分的語(yǔ)句最關(guān)鍵的就是下面3句:

              4000023c[0xe5810004]strr0,[r1,#4]
              40000240[0xe581000c]strr0,[r1,#0xc]
              40000244[0xeafffffc]b0x4000023c

            在AXD Debugger中,將其調(diào)用到RAM中運(yùn)行程序得到循環(huán)部分GPIO的P0.25的輸出波形,如圖2所示。從圖中可以看出,循環(huán)周期中保持為高電平的時(shí)間為1350 ns左右,低電平的時(shí)間為450 ns左右,即指令“str r0,[r1,#4]”和指令“str r0,[r1,#0xc]”均需350 ns左右,而跳轉(zhuǎn)指令則需100 ns左右。這主要是由于以下原因造成的: ① ARM的大部分指令是單周期的,但是也有一些指令(如乘法指令)是多周期的;② 基于ARM核的微控制器只有加載、存儲(chǔ)和交換指令可以對(duì)存儲(chǔ)器的數(shù)據(jù)進(jìn)行訪問(wèn),這樣從存儲(chǔ)器讀數(shù)據(jù)或向存儲(chǔ)器寫(xiě)數(shù)據(jù)要增加1個(gè)時(shí)鐘周期;③ 訪問(wèn)片內(nèi)外設(shè)要增加一個(gè)外設(shè)時(shí)鐘周期。當(dāng)然,每個(gè)指令還要有1個(gè)時(shí)鐘周期,跳轉(zhuǎn)時(shí)要清空流水線還要另加一定的時(shí)鐘周期。

            圖2 GPIO的P0.25腳輸出波形

            為了觀察乘法指令,特地采用下述匯編語(yǔ)言進(jìn)行了實(shí)驗(yàn)。首先是沒(méi)有乘法指令的匯編源程序:

              INCLUDELPC2294.INC ;引入頭文件
            ; P0.25引腳控制LED4,低電平點(diǎn)亮
            LEDCONEQU0x02000000
              EXPORTMAIN
            ;聲明程序代碼塊
              AREALEDCONC,CODE,READONLY
            ;裝載寄存器地址,PINSEL0
            MAINLDRR0,=PINSEL0
            ;設(shè)置數(shù)據(jù),即設(shè)置引腳連接GPIO
              MOVR1,#0x00000000
              STRR1,[R0]; [R0] ← R1
              LDRR0,=PINSEL1
              STRR1,[R0]
              LDRR0,=IO0DIR
              LDRR1,=LEDCON
            ;設(shè)置LED控制口為輸出
              STRR1,[R0]
            ;設(shè)置GPIO控制參數(shù)
            LOOPLDRR1,=LEDCON
            LEDSETLDRR0,=IO0SET
            ; LED控制I/O置位,即LED4熄滅
              STRR1,[R0]
            LEDCLRLDRR0,=IO0CLR
            ; LED控制I/O復(fù)位,即LED4點(diǎn)亮
              STRR1,[R0]
            ;無(wú)條件跳轉(zhuǎn)到LOOP
              B LOOP

            采用ADS1.2進(jìn)行編譯、鏈接后的匯編代碼為:

            LOOP [0xe3a01780]movr1,#0x2000000
            LEDSET[0xe59f0028] ldrr0,0x40000128
            400000fc[0xe5801000]strr1,[r0,#0]
            LEDCLR[0xe59f0024] ldrr0,0x4000012c
            40000104 [0xe5801000]strr1,[r0,#0]
            40000108 [0xeafffff9] bLOOP

            在AXD Debugger中,將其調(diào)用到RAM中運(yùn)行程序得到循環(huán)部分的GPIO的P0.25腳輸出波形,如圖3所示。 從圖中可以看出,循環(huán)周期中保持為高電平的時(shí)間為450 ns左右,低電平的時(shí)間為550 ns左右。



            圖3 GPIO的P0.25腳輸出波形2

            在上例的LOOP循環(huán)部分中加入乘法指令,即將循環(huán)部分改為:

            LOOP LDRR1,=LEDCON
            LEDSETLDRR0,=IO0SET
              STRR1,[R0]
              MOVR2,#0x0234
              MULR2,R1,R2
            LEDCLRLDRR0,=IO0CLR
              STRR1,[R0]
              B LOOP

            采用ADS1.2進(jìn)行編譯、鏈接后的匯編代碼為:

            LOOP[0xe3a01780]movr1,#0x2000000
            LEDSET[0xe59f0030]ldrr0,0x40000130
            400000fc[0xe5801000]strr1,[r0,#0]
            40000100[0xe3a02f8d]movr2,#0x234
            40000104[0xe0020291] mulr2,r1,r2
            LEDCLR[0xe59f0024] ldrr0,0x40000134
            4000010c[0xe5801000]strr1,[r0,#0]
            40000110[0xeafffff7]bLOOP

            在AXD Debugger中,將其調(diào)用到RAM中運(yùn)行程序得到循環(huán)部分的GPIO的P0.25腳輸出波形,如圖4所示。從圖中可以看出,循環(huán)周期中保持為高電平的時(shí)間為550 ns左右,低電平的時(shí)間為550 ns左右。與上例比較可知,多出的MUL乘法指令和MOV傳送指令共占用100 ns。

            綜上所述,得出如下結(jié)論:當(dāng)ARM指令放在RAM中運(yùn)行時(shí),指令“str r0,[r1,#4]”和指令“strr0,[r1,#0xc]”均需350 ns左右,相當(dāng)于14個(gè)指令周期;指令“ldr r0,0x4000012c”的執(zhí)行時(shí)間為100 ns,相當(dāng)于4個(gè)指令周期;MUL乘法指令和MOV傳送指令共占用100ns,相當(dāng)于4個(gè)指令周期;跳轉(zhuǎn)指令共占用100 ns,相當(dāng)于4個(gè)指令周期。


            上一頁(yè) 1 2 下一頁(yè)

            關(guān)鍵詞: DSP 指令周期 ARM

            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉