humb2指令集及汇编格式_第1页
humb2指令集及汇编格式_第2页
humb2指令集及汇编格式_第3页
humb2指令集及汇编格式_第4页
humb2指令集及汇编格式_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二讲thumb-2指令集、IAR汇编及固件库,Thumb-2指令集,同时支持16位和32位指令系统Bit15:110b111010b111100b11111紧邻的两个半字构成一条32位指令其他:皆为16位指令,1前索引2后索引,32位指令解码,.N表明此指令为16位指令.W表面此指令为32位指令集如果没有,则根据指令的15:11位自动选择,WFE等待一个事件发生,WFI等待一个中断发生,汇编语言设计,汇编语言程序设计更能充分发挥处理器的硬件特性两个优势操作系统移植需要编写几百行底层硬件的汇编语言程序,这是C语言不可取代的。优化算法的时空效率,C语言的目标代码优化是编译器完成的,而汇编语言的目标代码优化是人工完成的。人是算法的创造者,也是编译器的设计者,人工优化比编译器质量高。弱点编程效率低,开发周期长,经济代价大。,ARM汇编程序编写规范,汇编语句格式ARM汇编中,所有标号必须在一行的顶格书写,而所有指令均不能顶格书写。ARM汇编器对标识符大小写敏感(即区分大小写字母),书写标号及指令时字母大小写要一致。在ARM汇编程序中,ARM指令、伪指令、寄存器名可以全部为大写字母,也可以全部为小写字母,但不要大小写混合使用。源程序中,语句之间可以插入空行,以使得源代码的可读性更好。,ARM汇编程序编写规范(续),格式如下:标号;注释源程序中允许有空行。适当地插入空行,可以提高源程序的可读性。如果单行代码太长,可以使用字符“”将其分行。“”后不能有任何字符,包括空格和制表符等。对于变量的设置、常量的定义,其标识符必须在一行的顶格书写。,汇编指令错误的例子,DOBMOVR0,#1;标号DOB没有顶格书写MOVR2,#3;命令不允许顶格书写LoopMovR2,#3;指令中大小写混合Bloop;无法跳转到loop标号,大小写;不一致,几个重要伪指令,1.DCB:标号DCB表达式说明:DCB用于分配一块字节单元并用伪指令中指定的表达式进行初始化。其中,表达式可以为使用双引号的字符串或0255的数字,DCB可用“=”代替。2.DCD/DCDU:标号DCD/DCDU表达式说明:DCD伪指令用于分配一块字存储单元并用伪指令中指定的表达式初始化,它定义的存储空间是字对齐的。DCD也可用“asm(movr0,#1);asm(movr0,#1);asm(addr0,r1);,IAR的固件库,由ST公司开发,包括驱动程序和应用函数的函数库版本:3.4优点:入手快便于开发,节约时间缺点:结构复杂繁琐原理不够清晰,PPP:某一外设名称,说明,每一个外设都有一个对应的源文件:stm32f10 x_ppp.c和一个对应的头文件:stm32f10 x_ppp.h文件stm32f10 x_ppp.c包含了使用外设PPP所需的所有固件函数文件stm32f10 x_ppp.h包含了.c文件所需的预定义,函数声明以及变量定义等同时,外设需要在时钟控制下工作,因此会用到时钟的头文件,说明,CM3对包括外设的所有存储设备统一编址,因此在头文件中包含了存储器的映射关系stm32f10 x_map.h该文件也包含了所有寄存器的声明用户文件与库文件通过stm32f10 x_lib.h建立关系,该文件中定义了所有外设头文件的头文件,用于声明头文件,因此需要include在用户的文件中而文件stm32f10 x_conf.h则指定具体的参数,用户可以对此文件进行修改,外设的操作步骤,PPP代表任意外设1.在主应用文件中,声明一个结构PPP_InitTypeDef,例如:PPP_InitTypeDefPPP_InitStructure;这里PPP_InitStructure是一个位于内存中的工作变量,用来初始化一个或者多个外设PPP。,外设的操作步骤,2.为变量PPP_InitStructure的各个结构成员填入允许的值。按照如下程序设置整个结构体PPP_InitStructure.member1=val1;PPP_InitStructure.member2=val2;PPP_InitStructure.memberN=valN;3.调用函数PPP_Init(.)来初始化外设PPP。4.在这一步,外设PPP已被初始化。可以调用函数PPP_Cmd(.)来使能之。PPP_Cmd(PPP,ENABLE);可以通过调用一系列函数来使用外设。每个外设都拥有各自的功能函数。,外设的操作步骤,注:1.在设置一个外设前,必须调用以下一个函数来使能它的时钟:RCC_AHBPeriphClockCmd(RCC_AHBPeriph_PPPx,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_PPPx,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_PPPx,ENABLE);2.可以调用函数PPP_Deinit(.)来把外设PPP的所有寄存器复位为缺省值:PPP_DeInit(PPP),外设的操作步骤,注:3.在外设设置完成以后,继续修改它的一些参数,可以参照如下步骤:PPP_InitStucture.memberX=valX;PPP_InitStructure.memberY=valY;PPP_Init(PPP,仅为arm公司粗略设计的存储器映射图,不同厂家根据需要,设计自己的存储器映射(对应)关系,以及各存储器的大小。,关于存储器映射关系,Bit-Band,处理器存储器映射包括两个bit-banding区域。它们分别为SRAM和外设存储区域中的最低的1MB。作用:将存储器别名区的一个字映射为bit-band区的一个位即:在别名存储区写入一个字具有对位段区的目标位执读-改-写操作的相同效果。目的:所有STM32F10 x外设寄存器都被映射到一个位段(bit-band)区。在各个函数中对单个比特进行置1/置0操作时被大量使用,用以减小和优化代码尺寸。,Bit-Band,Bit-Band,如何对应?映射公式:bit_word_offset=(byte_offsetx32)+(bit_number4)bit_word_addr=bit_band_base+bit_word_offset其中:bit_word_offset是目标位在存取器位段区中的位置bit_word_addr是别名存储器区中字的地址,它映射到某个目标位。bit_band_base是别名区的起始地址。byte_offset是包含目标位的字节在位段的序号bit_number是目标位所在位置(0-31),Bit-Band,example,设置地址0 x2000_0000中的比特2,则:,bit_word_offset=(byte_offsetx32)+(bit_number4)=0*32+2*4=8bit_word_addr=bit_band_base+bit_word_offset=0 x22000000+8=0 x2200008,example,设置地址0 x2000_0000中的比特2,则:,寄存器RCC_CR的PLLON24位,映射到别名区:#definePERIPH_BASE(u32)0 x40000000)#definePERIPH_BB_BASE(u32)0 x42000000)#defineRCC_OFFSET(RCC_BASE-PERIPH_BASE)#defineCR_OFFSET(RCC_OFFSET+0 x00)#definePLLON_BitNumber0 x18#defineCR_PLLON_BB(PERIPH_BB_BASE+(CR_OFFSET*32(PLLON_BitNumber*4),一、什么是GPIO?GPIO,英文全称为General-PurposeIOports,也就是通用IO口。嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路有的需要CPU为之提供控制手段,有的则需要被CPU用作输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如灯亮与灭。对这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。,Example:GPIO控制,硬件资源分配:PC6-PC9分别连到4个LED,定义为LED14,跑马灯实验,控制过程,点亮LED,相应管脚输出高电平即相应管脚置1,管脚如何控制?,特殊寄存器(端口配置寄存器),Example:GPIO控制,GPIO寄存器结构GPIO寄存器结构,GPIO_TypeDef和AFIO_TypeDef,在文件“stm32f10 x_map.h”中定义如下:typedefstructvu32CRL;vu32CRH;vu32IDR;vu32ODR;vu32BSRR;vu32BRR;vu32LCKR;GPIO_TypeDef;,typedefstructvu32EVCR;vu32MAPR;vu32EXTICR4;AFIO_TypeDef;,Example:GPIO控制,五个GPIO外设声明于文件“stm32f10 x_map.h”:#definePERIPH_BASE(u32)0 x40000000)#defineAPB1PERIPH_BASEPERIPH_BASE#defineAPB2PERIPH_BASE(PERIPH_BASE+0 x10000)#defineAHBPERIPH_BASE(PERIPH_BASE+0 x20000).#defineAFIO_BASE(APB2PERIPH_BASE+0 x0000)#defineGPIOA_BASE(APB2PERIPH_BASE+0 x0800)#defineGPIOB_BASE(APB2PERIPH_BASE+0 x0C00)#defineGPIOC_BASE(APB2PERIPH_BASE+0 x1000)#defineGPIOD_BASE(APB2PERIPH_BASE+0 x1400)#defineGPIOE_BASE(APB2PERIPH_BASE+0 x1800),Example:GPIO控制,“stm32f10 x_conf.h”中定义如下:#define_GPIO#define_GPIOA#define_GPIOB#define_GPIOC#define_GPIOD#define_GPIOE#define_AFIO用户可根据需要修改此文件中的定义,以决定其是否参与编译,Example:GPIO控制,,初始化指针AFIO,GPIOA,GPIOB,GPIOC,GPIOD和GPIOE于文件“stm32f10 x_lib.c”:#ifdef_GPIOAGPIOA=(GPIO_TypeDef*)GPIOA_BASE;#endif#ifdef_GPIOBGPIOB=(GPIO_TypeDef*)GPIOB_BASE;#endif#ifdef_GPIOCGPIOC=(GPIO_TypeDef*)GPIOC_BASE;#endif#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论