當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]在實時嵌入式控制系統(tǒng)中,指令周期對系統(tǒng)的性能有至關(guān)重要的影響。介紹幾種最常用的微控制器的工作機制,采用一段循環(huán)語句對這幾種微控制器的指令周期進(jìn)行測試,并進(jìn)行分析比較。分析結(jié)論對系統(tǒng)控制器的選擇有一定的

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

關(guān)鍵詞 指令周期測試 AT89S51 LPC2114 TMS320F2812

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

1  AT89S51工作機制及指令周期的測試

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

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

#include<reg51.h>
main() {
  while(1) {
    P1=0x01;
    P1=0x00;
  }
}

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

    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)的匯編語言代碼。每行匯編代碼的第1列為該代碼在存儲器中的位置,第2列為機器碼,后面是編譯、鏈接后的匯編語言代碼。所有指令共占用6個機器周期(其中“MOV  P1(0x90),#0x01”占用2個機器周期,“CLR  A”和“MOV  P1(0x90),A”各占用1個機器周期,最后一個跳轉(zhuǎn)指令占用2個機器周期),則總的循環(huán)周期為6×機器周期=6×1.085 1 μs=6.51 μs。


圖1  P1口最低位的波形

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

2  LPC2114工作機制及指令周期的測試

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

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

  #include"config.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時,可以得到上述源程序的反匯編代碼:

  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列為該代碼在存儲器中的位置,第2列為機器碼,后面是編譯、鏈接后的匯編語言代碼。循環(huán)部分的語句最關(guān)鍵的就是下面3句:

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

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


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

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

  INCLUDELPC2294.INC ;引入頭文件
; P0.25引腳控制LED4,低電平點亮
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點亮
  STRR1,[R0]
;無條件跳轉(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中運行程序得到循環(huán)部分的GPIO的P0.25腳輸出波形,如圖3所示。 從圖中可以看出,循環(huán)周期中保持為高電平的時間為450 ns左右,低電平的時間為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[!--empirenews.page--]

  采用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中運行程序得到循環(huán)部分的GPIO的P0.25腳輸出波形,如圖4所示。 從圖中可以看出,循環(huán)周期中保持為高電平的時間為550 ns左右,低電平的時間為550 ns左右。與上例比較可知,多出的MUL乘法指令和MOV傳送指令共占用100 ns。
 

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

3  TMS320F2812工作機制及指令周期測試

  TMS320F2812是TI公司的一款用于控制的高性能和高性價比的32位定點DSP芯片。該芯片最高可在150 MHz主頻下工作(本文將其設(shè)置到100 MHz),并帶有18K×16位0等待周期片上SRAM和128K×16位片上Flash(存取時間為36 ns)。TMS320F2812采用哈佛總線結(jié)構(gòu),即在同一個時鐘周期內(nèi)可同時進(jìn)行一次取指令、讀數(shù)據(jù)和寫數(shù)據(jù)的操作,同時TMS320F2812還通過采用8級流水線來提高系統(tǒng)指令的執(zhí)行速度。

  為了觀察指令周期,對TMS320F2812的GPIOA0進(jìn)行循環(huán)的置位操作和清除操作。C源程序如下:

#include "DSP28_Device.h"
void main(void) {
  InitSysCtrl();/*初始化系統(tǒng)*/
  DINT;/*關(guān)中斷*/
  IER = 0x0000;
  IFR = 0x0000;
  InitPieCtrl();/*初始化PIE控制寄存器*/
  InitPieVectTable();/*初始化PIE矢量表*/
  InitGpio();/*初始化EV*/
  EINT;
  ERTM;
  for(;;) {
    GpioDataRegs.GPADAT.all=0xFFFF;
    GpioDataRegs.GPADAT.all=0xFFFF;
    GpioDataRegs.GPADAT.all=0xFFFF;
    GpioDataRegs.GPADAT.all=0x0000;
    GpioDataRegs.GPADAT.all=0x0000;
    GpioDataRegs.GPADAT.all=0x0000;
  }
}


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

  其中最重要的是要對通用輸入/輸出進(jìn)行初始化和確定系統(tǒng)CPU時鐘。其中系統(tǒng)的時鐘通過PLL設(shè)定為100 MHz,而初始化 InitGpio() 的源程序為:

#include "DSP28_Device.h"
void InitGpio(void)
{ EALLOW;
  //多路復(fù)用器選為數(shù)字I/O
  GpioMuxRegs.GPAMUX.all=0x0000;
  //GPIOAO為輸出,其余為輸入
  GpioMuxRegs.GPADIR.all=0x0001;
  GpioMuxRegs.GPAQUAL.all=0x0000;
  EDIS;
}

  通過在主程序for(;;)的地方加斷點,可以很容易找到上面主程序中循環(huán)部分程序編譯后的匯編指令:

  3F8011 L1:
  3F8011761FMOVWDP,#0x01C3
  3F8013 2820  MOV@32,#0xFFFF
  3F8015  2820  MOV@32,#0xFFFF
  3F8017 2820  MOV@32,#0xFFFF
  3F8019  2820 MOV@32,#0xFFFF
  3F801B  2820  MOV@32,#0xFFFF
  3F801D 2820 MOV@32,#0xFFFF
  3F801F 2B20  MOV@32,#0
  3F8020  2B20 MOV@32,#0
  3F8021  2B20  MOV@32,#0
  3F8022  6FEF  SBL1,UNC

  其中第1列為程序在RAM中的位置,第2列為機器碼,后面就是匯編語言程序。指令“MOV @32,#0xFFFF”使GPIO輸出高電平,指令“MOV @32,#0”使GPIO輸出低電平。其中含有6個使GPIOA0輸出高電平的指令和3個使GPIOA0輸出低電平的指令,系統(tǒng)的指令周期為10 ns,因此循環(huán)周期中保持高電平的時間為60 ns。通過將該程序放在H0 SARAM中進(jìn)行調(diào)試,可得GPIOA0的波形,如圖5所示。其中高電平時間正好為60 ns。注意,由于3個低電平之后要進(jìn)行跳轉(zhuǎn),故清空流水線的周期要長一些。


圖5  TMS320F2812中GPIOA0的波形1

  為了觀察乘法指令的周期,將上述循環(huán)部分的C源程序修改為:

for(;;)
{Uint16 test1,test2,test3;
  test1=0x1234; test2=0x2345;
  GpioDataRegs.GPADAT.all=0xFFFF;
  GpioDataRegs.GPADAT.all=0xFFFF;
  GpioDataRegs.GPADAT.all=0xFFFF;
  test3=test1*test2;
  GpioDataRegs.GPADAT.all=0x0000;
  GpioDataRegs.GPADAT.all=0x0000;
  GpioDataRegs.GPADAT.all=0x0000;
}

  上述程序經(jīng)過編譯、鏈接后的匯編指令如下:

  3F8012L1:
  3F80122841MOV*-SP[1],#0x1234
  3F8014 2842 MOV*-SP[2],#0x2345
  3F8016 761F MOVWDP,#0x01C3
  3F8018 2820 MOV@32,#0xFFFF
  3F801A 2820 MOV@32,#0xFFFF
  3F801C 2820 MOV@32,#0xFFFF
  3F801E 2D42 MOVT,*-SP[2]
  3F801F 1241 MPYACC,T,*-SP[1]
  3F8020 9643 MOV*-SP[3],AL
  3F8021 2B20 MOV@32,#0
  3F8022 2B20 MOV@32,#0
  3F8023 2B20 MOV@32,#0
  3F8024 6FEE SBL1,UNC

  其中使GPIOA0為高電平的指令仍然為6個指令周期(其中包括1個乘法指令),因為乘法指令也是單周期的,因此循環(huán)周期中保持高電平的時間為60 ns。通過將該程序放在H0 SARAM中進(jìn)行調(diào)試可得GPIOA0的波形,如圖6所示。其中高電平時間正好為60 ns,而由于3個低電平之后要進(jìn)行跳轉(zhuǎn),要清空流水線,而且還要為乘法做準(zhǔn)備,因此保持低電平的時間比圖5所需的時間要長。當(dāng)采用數(shù)字式示波器觀察時,如果探頭采用×1檔觀察的波形不是很理想,則可以采用×10檔,并配合調(diào)節(jié)探頭的補償旋鈕。


圖6  TMS320F2812中GPIOA0的波形2

4  三種微處理器的比較

  首先要強調(diào)的是,這幾種微控制器都可以通過提高晶振的振蕩頻率來縮短指令周期,但是這些控制器的振蕩頻率是有一定限制的,例如單片機不超過40 MHz,而LPC2114的頻率不超過60 MHz,TMS320F2812的最高頻率為150 MHz。在同樣的工作頻率下,ARM指令運行的指令周期遠(yuǎn)遠(yuǎn)高于傳統(tǒng)的單片機。 因為傳統(tǒng)的單片機沒有采用流水線機制,而ARM核和DSP都采用了流水線,但是由于訪問外設(shè)和RAM等存儲器要加一定的時鐘周期,因此ARM不是真正可以實現(xiàn)單周期運行的,特別是不能實現(xiàn)單周期的乘法指令,而DSP可以實現(xiàn)真正的單周期乘法指令,速度要遠(yuǎn)遠(yuǎn)高于ARM微控制器。

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉