日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 8051、ARM和DSP指令周期的測(cè)試與分析方法

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

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

          本文引用地址:http://yuyingmama.com.cn/article/257487.htm

          3 TMS320F2812工作機(jī)制及測(cè)試

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

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

          #include 28_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

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

          #include 28_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(;;)的地方加斷點(diǎn),可以很容易找到上面主程序中循環(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列為機(jī)器碼,后面就是匯編語言程序。指令“MOV @32,#0xFFFF”使GPIO輸出高電平,指令“MOV @32,#0”使GPIO輸出低電平。其中含有6個(gè)使GPIOA0輸出高電平的指令和3個(gè)使GPIOA0輸出低電平的指令,系統(tǒng)的為10 ns,因此循環(huán)周期中保持高電平的時(shí)間為60 ns。通過將該程序放在H0 SARAM中進(jìn)行調(diào)試,可得GPIOA0的波形,如圖5所示。其中高電平時(shí)間正好為60 ns。注意,由于3個(gè)低電平之后要進(jìn)行跳轉(zhuǎn),故清空流水線的周期要長(zhǎng)一些。


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



          圖6 TMS320F2812中GPIOA0的波形2

          4、 三種微處理器的比較

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


          上一頁 1 2 下一頁

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

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉