51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > 51单片机 > 详细内容
8051、ARM和DSP指令周期的测试与分析
发布时间:2009/6/29  阅读次数:1653  字体大小: 【】 【】【

           从图中可以看出,循环周期中保持为高电平的时间为450 ns左右,低电平的时间为550 ns左右。

图3   GPIO的P0.25脚输出波形2
             在上例的LOOP循环部分中加入乘法指令,即将循环部分改为:
           LOOP   LDRR1,=LEDCON
           LEDSETLDRR0,=IO0SET
             STRR1,[R0]
             MOVR2,#0x0234
             MULR2,R1,R2
           LEDCLRLDRR0,=IO0CLR
             STRR1,[R0]
             B LOOP
             采用ADS1.2进行编译、链接后的汇编代码为:
           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中,将其调用到RAM中运行程序得到循环部分的GPIO的P0.25脚输出波形,如图4所示。
           从图中可以看出,循环周期中保持为高电平的时间为550 ns左右,低电平的时间为550
           ns左右。与上例比较可知,多出的MUL乘法指令和MOV传送指令共占用100 ns。

             综上所述,得出如下结论: 当ARM指令放在RAM中运行时,指令“str  
           r0,[r1,#4]”和指令“strr0,[r1,#0xc]”均需350 ns左右,相当于14个指令周期;指令“ldr
           r0,0x4000012c”的执行时间为100
           ns,相当于4个指令周期;MUL乘法指令和MOV传送指令共占用100ns,相当于4个指令周期;跳转指令共占用100 ns,相当于4个指令周期。
           3   TMS320F2812工作机制及指令周期测试
             TMS320F2812是TI公司的一款用于控制的高性能和高性价比的32位定点DSP芯片。该芯片最高可在150
           MHz主频下工作(本文将其设置到100 MHz),并带有18K×16位0等待周期片上SRAM和128K×16位片上Flash(存取时间为36
           ns)。TMS320F2812采用哈佛总线结构,即在同一个时钟周期内可同时进行一次取指令、读数据和写数据的操作,同时TMS320F2812还通过采用8级流水线来提高系统指令的执行速度。
             为了观察指令周期,对TMS320F2812的GPIOA0进行循环的置位操作和清除操作。C源程序如下:
           #i nclude "DSP28_Device.h"
           void main(void) {
             InitSysCtrl();/*初始化系统*/
             DINT;/*关中断*/
             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
             其中最重要的是要对通用输入/输出进行初始化和确定系统CPU时钟。其中系统的时钟通过PLL设定为100 MHz,而初始化 InitGpio()
           的源程序为:
           #i nclude "DSP28_Device.h"
           void InitGpio(void)
           { EALLOW;
             //多路复用器选为数字I/O
             GpioMuxRegs.GPAMUX.all=0x0000;
             //GPIOAO为输出,其余为输入
             GpioMuxRegs.GPADIR.all=0x0001;
             GpioMuxRegs.GPAQUAL.all=0x0000;
             EDIS;
           }
             通过在主程序for(;;)的地方加断点,可以很容易找到上面主程序中循环部分程序编译后的汇编指令:
             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输出低电平的指令,系统的指令周期为10
           ns,因此循环周期中保持高电平的时间为60 ns。通过将该程序放在H0
           SARAM中进行调试,可得GPIOA0的波形,如图5所示。其中高电平时间正好为60
           ns。注意,由于3个低电平之后要进行跳转,故清空流水线的周期要长一些。

图5   TMS320F2812中GPIOA0的波形1
             为了观察乘法指令的周期,将上述循环部分的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;
           }
             上述程序经过编译、链接后的汇编指令如下:
             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个乘法指令),因为乘法指令也是单周期的,因此循环周期中保持高电平的时间为60
           ns。通过将该程序放在H0 SARAM中进行调试可得GPIOA0的波形,如图6所示。其中高电平时间正好为60
           ns,而由于3个低电平之后要进行跳转,要清空流水线,而且还要为乘法做准备,因此保持低电平的时间比图5所需的时间要长。当采用数字式示波器观察时,如果探头采用×1档观察的波形不是很理想,则可以采用×10档,并配合调节探头的补偿旋钮。

图6   TMS320F2812中GPIOA0的波形2
           4   三种微处理器的比较
             首先要强调的是,这几种微控制器都可以通过提高晶振的振荡频率来缩短指令周期,但是这些控制器的振荡频率是有一定限制的,例如单片机不超过40
           MHz,而LPC2114的频率不超过60 MHz,TMS320F2812的最高频率为150
           MHz。在同样的工作频率下,ARM指令运行的指令周期远远高于传统的单片机。
           因为传统的单片机没有采用流水线机制,而ARM核和DSP都采用了流水线,但是由于访问外设和RAM等存储器要加一定的时钟周期,因此ARM不是真正可以实现单周期运行的,特别是不能实现单周期的乘法指令,而DSP可以实现真正的单周期乘法指令,速度要远远高于ARM微控制器。
           参考文献
           [1]   马忠梅,籍顺心,等. 单片机的C语言应用程序设计. 北京:北京航空航天大学出版社,2003.
           [2]   薛钧义,张彦斌. MCS51/96系列单片微型计算机及其应用. 西安:西安交通大学出版社,1990.
           [3]   周立功,等. ARM微控制器基础与实践. 北京:北京航空航天大学出版社,2005.
           [4]   Texas Instruments Incorporated. TMS320C28x Assembly Language Tools
           Users Guide. 2001.
           [5]   Texas Instruments Incorporated. 软件TMS320C28x Optimizing C C++
           Compiler Users Guide. 2003.


    转载自《单片机与嵌入式系统应用》

  

  

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号