1、第3章 Cortex-M3指令与Proteus软件 第1节 Cortex-M3指令寻址模式 第2节 Cortex-M3指令集 第3节 Cortex-M3汇编语言编程模型 第4节 Proteus仿真软件第3章 Cortex-M3指令与Proteus软件 第1节 Cortex-M3指令寻址模式 第2节 Cortex-M3指令集 第3节 Cortex-M3汇编语言编程模型 第4节 Proteus仿真软件Cortex-M3指令系统 指令系统反映中央处理单元(CPU)的结构。指令系统确定后,CPU内核结构就确定。 指令由2部分构成,即:操作码和操作数。v 操作码最终操作对象是操作数,被操作的对象可放在C
2、PU内部寄存器,片内存储器或片外存储器,也可是常数。v CPU必须按照“预先制定的规则”找到这些被操作的对象。v 操作对象包括:立即数、直接位地址、程序地址、直接数地址、间接地址、特殊的汇编器符号。v 这些操作对象和寻址模式相关。Cortex-M3指令寻址模式 CPU寻找操作对象位置的过程,称为寻址。v 把寻找操作对象的方法,称为寻址模式。 Cortex-M3支持的寻址模式:v 立即寻址;寄存器寻址;v 寄存器移位寻址;寄存器间接寻址;v 多寄存器寻址;基址寻址;v 堆栈寻址;v 块复制寻址;相对寻址立即寻址与寄存器寻址 立即寻址:操作数由1个直接16位地址域指定。v 指令: MOS R11,
3、#0 x000B v 功能:将值0 x000B写入到寄存器R11。 寄存器寻址:某些特定指令用来访问寄存器组中的1个寄存器。这些指令不需要地址域,因此这些指令访问效率更高。v 指令: SUB R0,R1,R2v 功能:寄存器R1内容减去寄存器R2内容,结果保存到R0。寄存器移位寻址与寄存器间接寻址 寄存器移位寻址:ARM指令集特有寻址模式。第2个操作数是移位方式时,第2个寄存器操作数与第1个操作数结合之前,选择移位操作。v 指令: ANDS R1,R1,R2,LSL R3v 功能:寄存器R2值左移R3位,然后和寄存器R1值逻辑与,结果保存在R1寄存器中。 寄存器间接寻址:指令指定1个寄存器,该
4、寄存器包含操作数的地址。v 指令: LDR R8,R10v 功能:将R10所指向地址的内容加载到寄存器R8内。多寄存器寻址与基址寻址 多寄存器寻址:1次可传送数个寄存器的值。v 指令:LDMIA R1!,R2-R7,R12v 功能:R1指向单元数据读出道R2:7或R12寄存器。 基址寻址:基址寄存器内容与指令偏移量相加,形成操作数有效地址。访问基址附近存储单元,用于查表、数组操作等。v 指令:LDR R2,R3,#0 x0Cv 功能:读取R3+0 x0C指向存储器单元内容,并加载到寄存器R2中。堆栈寻址 堆栈寻址v 栈是按特定顺序进行存取的存储区,操作顺序为后进先出,堆栈寻址是隐含的,v 使用
5、专门寄存器(堆栈指针)指向存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。v 存储器堆栈分为2种: 向上生长:向高地址方向生长,称为递增堆栈。 向下生长:向低地址方向生长,称为递减堆栈。v 堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下1个待压入数据的空位置,称为空堆栈。 堆栈寻址v 满递增 堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。 指令:LDMFA、STMFA等; v 空递增 堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。 指令: LDMEA、STMEA等; 堆栈寻址v 满递减 堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。 指令:LDMFD、S
6、TMFD等;v 空递减 堆栈向下增长,堆栈指针向堆栈下的第一个空位置。 指令: LDMED、STMED等。快复制寻址与相对寻址 块复制寻址:多寄存器传输指令将数据从存储器空间的某位置复制到存储器空间的另位置。v 指令:STMIA R0!,R1-R7v 功能:将R1-R7的数据保存到存储器中,存储器指针在保存第一个值后增加,增长的方向为向上增长。 相对寻址:基址寻址的变通。PC提供基地址,指令地址码部分作为偏移量,两者相加得到的地址即为操作数有效地址。v 指令: BL SUBR1v 功能:调用到SUBR1的子程序。第3章 Cortex-M3指令与Proteus软件 第1节 Cortex-M3指令
7、寻址模式 第2节 Cortex-M3指令集 第3节 Cortex-M3汇编语言编程模型 第4节 Proteus仿真软件Cortex-M3指令集 指令集概述 CMSIS函数 存储器访问指令 通用数据处理指令 乘法和除法指令 饱和指令 比特位操作指令 分支和控制指令 其它操作指令指令集概述 指令宽度选择v 很多指令产生16位或32位编码,取决于指定的操作数和目标寄存器。 使用带有宽度后缀,强制指定具体指令大小。.W后缀强制32位指令编码。.N后缀强制16位指令编码。v 若给出宽度后缀,而汇编器不能产生所要求宽度的指令编码,则产生错误。v 一些情况下需要指定.W后缀。 如,分支指令中,若操作数是一个
8、指令标号或一个文字数据。这是因汇编器不能自动产生正确大小的编码。CMSIS函数 ISO/IEC C代码不能直接访问某些Cortex-M3指令。v 这部分给出使用CMSIS和C编译器内提供的固有函数,能产生这些指令。v 若C编译器不支持合理的固有函数,则使用内联汇编器访问一些指令。 Cortex微控制器软件接口标准(Cortex Microcontroller Software Interface Standard - CMSIS)函数产生某些Cortex-M3指令。v CMSS函数也提供大量的函数,用于使用MRS和MSR指令访问特殊寄存器。存储器访问指令 ADR指令 LDR和STR立即偏移指令
9、 LDR和STR寄存器偏移指令 LDR和STR非特权指令 LDR和PC相对指令 LDM和STM指令 PUSH和POP指令 LDREX和STREX指令 CLREX指令通用数据处理指令 ADD,ADC,SUB,SBC和RSB指令 AND,ORR,EOR,BIC和ORN指令 ASR,LSL,LSR,ROR和RRX指令 CLZ指令 CMP和CMN指令 MOV和MVN指令 MOVT指令 REV,REV16,REVSH和RBIT指令 TST和TEQ指令乘法和除法指令 MUL,MLA和MLS指令 UMULL,UMLAL,SMULL和SMLAL指令 SDIV和UDIV指令比特位操作指令 BFC和BFI指令 S
10、BFX和UBFX指令 SXT和UXT指令分支和控制指令 B,BL,BX和BLX指令 CBZ和CBNZ指令 IT指令 TBB和TBH指令其他操作指令 BKPT指令和CPS指令 DMB指令和DSB指令 ISB指令和MRS指令 MSR指令和NOP指令 SEV指令和SVC指令 WFE指令和WFI指令第3章 Cortex-M3指令与Proteus软件 第1节 Cortex-M3指令寻址模式 第2节 Cortex-M3指令集 第3节 Cortex-M3汇编语言编程模型 第4节 Proteus仿真软件C语言编程 示例实现下述功能的C语言代码描述main() int i=0; s=0; for(i=1;ir7
11、Cortex-M3汇编语言编程(2)mov r3, #0 ;/将0加载到r3寄存器str r3, r7, #4 ;/将r3寄存器内容保存到(r7)+4所指向的存储器地址的空间,(r3)-r7+4mov r3, #1 ;/将1加载到r3寄存器str r3, r7, #0 ;/将r3寄存器的内容保存到r7寄存器所保存的存储器地址的空间,即(r3)-r7Cortex-M3汇编语言编程(3)b.L2 ;/无条件跳转到标号为L2位置的汇编指令区.L3: ldr r2, r7, #4;/将(r7)+4所指向的存储器地址的空间的内容加载到r2寄存器,r7+4-(r2) ldr r3, r7, #0;/将r7
12、寄存器所指向的存储器地址空间的内容加载到r3寄存器,即r7-(r3)Cortex-M3汇编语言编程(4)add r3, r2, r3; /将r2寄存器内容和r3寄存器内容相加后,保存到r3寄存器中,(r3)+(r2)-(r3)str r3, r7, #4;/将r3寄存器内容保存到(r7)+4所指向的存储器地址的空间,(r3)-r7+4ldr r3, r7, #0 ;/将r7寄存器所指向的存储器地址空间的内容加载到r3寄存器,即r7-(r3)add r3, r3, #1;/将r2寄存器内容加1后,保存到r3寄存器中,(r3)+1-(r3)Cortex-M3汇编语言编程(5)str r3, r7,
13、 #0 ;/将r3寄存器内容保存到(r7)所指向的存储器地址的空间,(r3)-r7.L2:ldr r3, r7, #0 ;/将r7寄存器所指向的存储器地址空间的内容加载到r3寄存器,即r7-(r3)cmp r3, #10;/将r3寄存器的内容和10进行比较 ble .L3;/如果r3寄存器的内容小于等于10,则跳转到标号为L3的位置Cortex-M3汇编语言编程(6)ldr r3, r7, #4 ;/将(r7)+4所指向的存储器地址的空间的内容加载到r3寄存器,r7+4-(r3)ldr r0, =result ;/将数据段result所指向的存储空间的地址加载到r0str r3,r0;/将r3
14、寄存器的内容保存到r0所指向的存储空间,(r3)-r0.L4:Cortex-M3汇编语言编程(7)b.L4;/无限循环过程.data ;/定义数据段 result: ;/定义数据段的变量result word 0;/类型为1个字的空间 .end ;/汇编语言结束第3章 Cortex-M3指令与Proteus软件 第1节 Cortex-M3指令寻址模式 第2节 Cortex-M3指令集 第3节 Cortex-M3汇编语言编程模型 第4节 Proteus仿真软件Proteus软件简介 Proteus是英国Labcenter公司研发的嵌入式系统仿真开发软件。v 从原理图布图、代码调试到单片机与外围电
15、路协同仿真,一键切换到PCB设计,实现从概念到产品的完整设计。v 将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,v 处理器模型支持8051、HC11、PICxx、AVR、ARM、8086,MSP430,Cortex-M3和DSP处理器,并持续增加。v 编译支持IAR、Keil和MATLAB等多种编译器。Proteus软件架构ProSPICE混合模式仿真器ISIS设计仿真平台ARESPCB设计平台VSM嵌入式仿真平台模拟电路仿真数字电路仿真原理图设计原理图调试PCB设计PCB 3D预览光绘文件生成MCU仿真8086仿真ARM仿真Proteus设计套件(Design Suite
16、)Proteus ISIS界面Proteus ARES界面Proteus VSM界面Proteus VSM优势Proteus VSM功能 原理图输入 电路仿真 微控制器软件的协同仿真 源级调试 诊断报文发送 外设模型库Proteus VSM仿真与工具 2种仿真方式:v 交互式仿真:实时直观反映电路设计的仿真结果;v 图表仿真(ASF):精确分析电路的各种性能,如频率特性、噪声特性等。 提供虚拟仪器、曲 线图表、激励源和探针等仿真工具:v 探针:电压探针、电流探针v 电路激励:14种激励信号源v 曲线图表:13种曲线图表v 虚拟仪器:13种虚拟仪器如示波器等探针 2种探针:直接在线路上实时采集和
17、测量电压/电流信号。v 电压探针(Voltage probes):模拟和数字仿真均可使用。模拟电路中记录真实电压值,数字电路中记录逻辑电平及强度。v 电流探针(Current probes):仅在模拟电路仿真中使用,显示电流方向和电流瞬时值。电压探针电流探针电路激励 14种信号源v DC(直流电压源);Sine(正弦发生器);Pulse(脉冲发生器)v Exp(指数脉冲发生器);SFFM(单频调频波信号发生器)v Pwlin(任意分段线性脉冲信号发生器);File(文件信号发生器)v Audio(音频信号发生器);DState(稳态逻辑电平发生器)v DEdge(单边沿信号发生器);DPuls
18、e(单周期数字脉冲发生器)v DClock(数字时钟信号发生器);DPattern(模式信号发生器)图表 13种图表v 模拟图表(Aanlogue);直流扫描分析图表 (DC Sweep);v 数字图表(Digital);交流扫描分析图表 (AC Sweep)v 混合分析图表 (Mixed);频率分析图表 (Frequency)v 转移特性分析图表 (Transfer);噪声分析图表 (Noise)v 失真分析图表 (Distortion);傅立叶分析图表 (Fourier);v 音频分析图表 (Audio);交互分析图表 (Interactive)v 一致性分析图表 (Conformance
19、);图表 13种虚拟仪器v 示波器(Oscilloscope);逻辑分析仪(Logic Analyser)v 计数/定时器(Counter/Timer);虚拟终端(Virual Terminal);v 模式发生器(Pattern Generator);USB调试器(USB Debugger)v 交直流电压/电流表(AC/DC Voltmeters/Ammeters); v SPI调试器(SPI Debugger);I2C调试器(I2C Debugger) ;微处理器系统仿真 微处理器的系统仿真是Proteus VSM的主要特色。v 用户在Proteus中绘制原理图,编辑、编译、调试代码,并直观
20、看到仿真结果,完成单片机的系统设计。v 目前CPU模型有 PIC, AVR,8051/8052,HC11,Basic Stamp,MSP430,8086,ARM7,Cortex-M3等。v 模型库还包含LED/LCD显示、键盘、按钮、开关、常用电机等大量通用外围设备。v VSM能仿真多个CPU,便利处理含2个及以上微处理器的系统设计。仿真流程之原理图输入仿真流程之建立代码源文件1、选择代码生成工具、选择代码生成工具2、建立新的源代码文件、建立新的源代码文件3、源文件命源文件命名名仿真流程之源代码链接4、源代码编辑、源代码编辑5、源代码编译、链接、源代码编译、链接6、程序加载到、程序加载到CPU
21、仿真流程之交互式仿真实时显示系统输出结果 实时显示元器件引脚电平Proteus VSM for Cortex-M3简介 Proteus VSM Cortex-M3包含对以下微控制器的嵌入式系统设计进行开发,测试和虚拟原型的所有软件单元。v TI的LM3S系列v Atmel的SAM3系列v NXP的LPC1300系列 采用原理图的微控制器仿真的独特本质使其快速,灵活和并行开发系统硬件和韧件。v 此设计协调允许工程师更加快速设计项目,使得硬件或韧件修改的灵活性缩短上市时间。Proteus VSM for Cortex-M3特征(1) 完全仿真完整指令集(多处理器支持操作除外); 支持所有端口和其他
22、I/O操作; 支持睡眠和深度睡眠模式; 支持看门狗计时器; 支持所有模式的通用计时器; 支持FIFO模式的通用异步收发器(UART); 支持Freescale,MICROWIRE或TI帧类型的同步串行接口(SSI); 支持给定器件上所有模式的集成电路间总线(I2C); 支持信号源所有配置的模拟比较器;Proteus VSM for Cortex-M3特征(2) 支持多通道内置温度传感器的10位模数转换器(ADC); 支持内部代码和数据的FLASH存储(含Cortex-M3存储区保护); 支持所有中断模式; 提高性能的内部发生处理器时钟。时间时序精确至1个时钟周期; 提供代码的内部一致性检查(如
23、无效执行代码的执行,非法存储读取,堆栈完整性检查等); VSM源级调试系统的完全集成; Proteus诊断控制系统的完全集成。TI的LM3S系列ADC过采样技术仿真TI的LM3S系列通信桥仿真TI的LM3S系列I2C总线仿真外设模型列表模数/数模转换器模型部分微处理器系统仿真之外设模型数据存储器窗口源代码窗口:提供了6种程序执行命令按钮 程序调试断点处理器程序计数器的当前位置 SFR寄存器窗口CPU寄存器窗口IDLOC寄存器窗口变量窗口观测窗口系统调试汇编语言代码调试 使用PROTEUS自带的汇编语言的编译器进行代码编译。汇编源码调试窗口C语言代码调试CPU加载加载COF文件文件C源码调试窗口
24、源码调试窗口 若设置编译环境,使其输出含有调试信息的代码文件,下载到单片机,仿真时直接在Proteus下观察、调试C源代码。物理接口模型 物理接口模型(Physical Interface Model - PIM)是PROTEUS虚拟电路与外部建立通信的桥梁。v 目前最新Proteus VSM中有2种PIM: COMPIM(串口物理接口模型):仿真电路通过本机的RS232接口与外部通信。 EPIM(以太网物理接口模型):真电路通过本机的网络接口与外部通信,目前有RTL8019AS和ENC28J60两种控制器模型PC串行口COMPIM模型实际温度测量板Proteus仿真电路串行电缆 通过串口物理
25、接口(COMPIM)模型,实现虚拟仿真电路与外部实际电路的双向串行通信串口物理接口模型ENC28J60模型电脑1电脑2LAN 使用以太网物理接口模型(EPIM),实现虚拟仿真电路通过本地网卡与局域网内其他计算机的双向网络通信。以太网物理接口模型 第3方代码生成工具(汇编编译器) :v 共享汇编软件或编译器从系统CD上安装到Proteus 的TOOLS目录,并被自动作为Proteus代码生成工具。 第3方源代码编辑器(文本编辑器)v 提供简明源代码文本编辑器SRCEDIT,还可使用第3方源代码编辑器,如UltraEdit。 第3方IDE :v 可使用第3方IDE,如IAR, Keil,MP-LA
26、B和AVR studio开发源代码,编辑生成可执行文件(如HEX或COD文件)在Proteus VSM中,将可执行文件下载到CPU进行仿真。 第3方工具 仪器与分析工具 光电显示型号与驱动器 电机型号与控制器 霍尔效应传感器型号 以太网控制器型号 电位器型号 存储器型号 温度控制型号 恒温型号 1-Wire协议型号 RMS检测/转换型号外设库(1) 压控放大器(VCA)型号 线缆接收器型号 RS232/RS485/RS422协议型号 ADC/DAC转换器型号 电源管理型号 脉宽控制型号 Laplace变换型号 热离子管型号 换能器型号 微控制器外设型号 其他型号外设库(2) 百度云盘下载v Introduction to Proteus VSM Part I & II 24 pages,1.90M参考文献