没有合适的资源?快使用搜索试试~ 我知道了~
8051、ARM和DSP指令周期的测试与分析
需积分: 12 8 下载量 151 浏览量
2008-06-24
14:56:23
上传
评论
收藏 207KB PDF 举报
温馨提示
试读
11页
8051、ARM和DSP指令周期的测试与分析.pdf
资源详情
资源评论
资源推荐
8051、ARM 和 DSP 指令周期的测试与分析
摘要 在实时嵌入式控制系统中,指令周期对系统的性能有至关重要的影响。介绍几种最常用的
微控制器的工作机制,采用一段循环语句对这几种微控制器的指令周期进行测试,并进行分析比
较。分析结论对系统控制器的选择有一定的指导作用。
关键词 指令周期测试 AT89S51 LPC2114 TMS320F2812,ARM,DSP,微控制器,实时控制
在实时控制系统中,选择微控制器的指标时最重要的是计算速度的问题。指令周期是反映计算速
度的一个重要指标,为此本文对三种最具代表性的微控制器(AT89S51 单片机、ARM7TDMI 核的 L
PC2114 型单片机和 TMS320F2812)的指令周期进行了分析和测试。为了能观察到指令周期,将三
种控制器的 GPIO 口设置为数字输出口,并采用循环不断地置位和清零,通过观察 GPIO 口的波形
变化得到整个循环的周期。为了将整个循环的周期与具体的每一条指令的指令周期对应起来,通
过 C 语言源程序得到汇编语言指令来计算每一条汇编语言的指令周期。
1 AT89S51 工作机制及指令周期的测试
AT89S51 单片机的时钟采用内部方式,时钟发生器对振荡脉冲进行 2 分频。由于时钟周期为振荡
周期的两倍(时钟周期=振荡周期 P1+振荡周期 P2),而 1 个机器周期含有 6 个时钟,因此 1
个机器周期包括 12 个晶振的振荡周期。取石英晶振的振荡频率为 11.059 2 MHz,则单片机的机
器周期为 12/11.059 2=1.085 1 μs。51 系列单片机的指令周期一般含 1~4 个机器周期,多数
指令为单周期指令,有 2 周期和 4 周期指令。
为了观察指令周期,对单片机的 P1 口的最低位进行循环置位操作和清除操作。源程序如下:
#include<reg51.h>
main() {
while(1) {
P1=0x01;
P1=0x00;
}
}
采用 KEIL uVISION2 进行编译、链接,生成可执行文件。当调用该集成环境中的 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 源程序对应的汇编语言代码。每行汇编代码的
第 1 列为该代码在存储器中的位置,第 2 列为机器码,后面是编译、链接后的汇编语言代码。所
有指令共占用 6 个机器周期(其中“MOV P1(0x90),#0x01”占用 2 个机器周期,“CLR A”和
“MOV P1(0x90),A”各占用 1 个机器周期,最后一个跳转指令占用 2 个机器周期),则总的循
环周期为 6×机器周期=6×1.085 1 μs=6.51 μs。
图 1 P1 口最低位的波形
将编译、链接生成的可执行文件下载到 AT89S51 的 Flash 中执行可以得到 P1 口最低位的波形,
如图 1 所示。整个循环周期为 6.1 μs,与上面的分析完全一致。
2 LPC2114 工作机制及指令周期的测试
LPC2114 是基于 ARM7TDMI 核的可加密的单片机,具有零等待 128 KB 的片内 Flash,16 KB 的 SR
AM。时钟频率可达 60 MHz(晶振的频率为 11.059 2 MHz,时钟频率设置为 11.059 2×4 =44.23
6 8 MHz,片内外设频率为时钟频率的 1/4,即晶振的频率)。ARM7TDMI 核通过使用三级流水线
和大量使用内部寄存器来提高指令流的执行速度,能提供 0.9 MIPS/MHz 的指令执行速度,即指
令周期为 1/(0.9×44.236 8)=0.025 12 μs,约为 25 ns。
为了观察指令周期,将 LPC2114 中 GPIO 的 P0.25 脚设置为输出口,并对其进行循环的置位操作
和清除操作。C 源程序如下:
#include"config.h"
//P0.25 引脚输出
#defineLEDCON0x02000000
intmain(void)
{//设置所有引脚连接 GPIO
PINSEL0 = 0x00000000;
PINSEL1 = 0x00000000;
//设置LED4 控制口为输出
IO0DIR = LEDCON;
while(1)
{IO0SET = LEDCON;
IO0CLR = LEDCON;
}
return(0);
}
采用 ADS1.2 进行编译、链接,生成可执行文件。当调用 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]
剩余10页未读,继续阅读
hyperzerg
- 粉丝: 0
- 资源: 75
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0