ARM处理器的体系结构.ppt_第1页
ARM处理器的体系结构.ppt_第2页
ARM处理器的体系结构.ppt_第3页
ARM处理器的体系结构.ppt_第4页
ARM处理器的体系结构.ppt_第5页
免费预览已结束,剩余125页可下载查看

下载本文档

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

文档简介

本节提要,1,3,2,5,4,6,arm简介,arm体系结构概览,arm jtag调试接口,arm编程模型,arm 指令集,s3c44b0开发平台简介,arm7tdmi处理器,arm7tdmi处理器,t16位压缩指令集,thumb; d在片调试(debug)支持,允许处理器响应调试请求暂停; m增强型乘法器,产生全64位结果(32x3264or32x32+64 64); i嵌入式ice(in-circuit emulator,在线仿真器),协助硬件和软件调试。提供片上断点和调试点支持。,arm7 tdmi的指令流水线,从存储器取指,指令所用的寄存器译码,从从寄存器组中读寄存器 移位和alu操作 把寄存器写回到存储器组,每条指令可以分3个阶段执行,arm单周期指令3段流水线操作*,t,指令,1,2,3,注:程序计数器pc指向正在取指的指令而不是正在执行的指令,pc值总是指向正在执行指令后面的第2条指令。,流水线技术,arm的5级流水线 arm9和strongarm架构都采用了5级流水线. 增加了i-cache和d-cache,把存储器的取指与数据存取分开; 增加了数据写回的专门通路和寄存器; 把指令的执行过程分割为5部分: 取指-指令译码-执行-数据缓存-写回,处理器的工作状态,arm7tdmi 处理器有两种工作状态: arm - 32-bit, 按字排列的arm指令集 thumb -16-bit, 按半字排列的thumb指令集 arm7tdmi 核的操作状态可能通过bx指令(分支和交换指令)在arm状态和thumb状态之间切换,例: 从arm状态切换到thumb状态: ldr r0,=label+1 bx r0 从thumb状态切换到arm状态: ldr r0,=label bx r0,指令bx利用bit0来确定是arm指令,还是thumb指令。,存储器模式*,大端模式 字数据的高位字节存储在低地址中 字数据的低字节则存放在高地址中 小端模式 低地址中存放字数据的低字节 高地址中存放字数据的高字节,指令长度及数据类型,arm微处理器的指令长度可以是32位(arm状态),也可以为16位(thumb)状态 arm微处理器支持字节(8位)、半字(16位)、字(32位)3种数据类型 字需要4字节对齐(地址的低两位为0)、半字需要2字节对齐(地址的最低位为0),操作模式,arm 处理器有7种工作模式: 用户模式(usr) - 正常的程序执行模式 快速中断模式(fiq) - 支持高速数据传输或通道处理 中断模式(irq) - 用于通用中断处理 管理员模式(svc) - 操作系统的保护模式. 中止模式(abt) - 支持虚拟内存和/或内存保护 系统模式(sys) - 支持操作系统的特殊用户模式(运行操作系统任务) 未定义模式(und) - 支持硬件协处理器的软件仿真 除了用户模式外,其他模式均可视为特权模式,正常程序执行的模式,用于高速数据传输和通道处理,用于通常的中断处理,供操作系统使用的一种保护模式,用于虚拟存储及存储保护,用于支持通过软件仿真硬件的协处理器,用于运行特权级的操作系统任务,寄存器组织 1*,寄存器 - 2,37 寄存器 31 个通用32位寄存器,包括程序计数器pc 未分组寄器r0-r7 分组寄存器r8-r14 程序计数器pc(r15) 6 个状态寄存器 15 通用寄存器 (r0 to r14), 以及1或者2个状态寄存器和程序计数器在任何时候都是可以访问的 可访问的寄存器取决于处理器的模式 其它寄存器 (the banked registers) 的状态在支持irq, fiq, 管理员, 中止和未定义模式处理时被切换,寄存器 - 3,r0 到 r15 可以直接访问 r0 到 r14 是通用寄存器 r13: 堆栈指针 (sp) (通常) 每种处理器模式都有单独的堆栈 r14: 链接寄存器 (lr) r15 包含程序计数器 (pc) cpsr 当前程序状态寄存器,包括代码标志状态和当前模式位 5个spsrs-(程序状态保存寄存器) 当异常发生时保存cpsr状态,程序状态寄存器 - 1,arm7tdmi 包含当前程序状态寄存器 (cpsr), 加上5个程序状态保存寄存器spsr,当异常发生时,用于保存cpsr的状态 这些寄存器的功能是: 保存alu当前操作信息 控制允许和禁止中断 设置处理器操作模式,tdmi 的基本含义为: t-支持16 为压缩指令集thumb d-支持片上debug m-内嵌硬件乘法器(multiplier) i-嵌入式ice,支持片上辅助调试,程序状态寄存器 - 2,n, z, c and v 条件码标志 可以在处理器中作为数学和逻辑操作改变 可以被所有的指令测试,以决定指令是否被执行 n : negative. z : zero. c : carry. v : overflow i and f 位是中断禁止位 t 控制位 用于控制指令执行的状态,即说明本指令是arm指令还是thumb指令。对于不同版本的arm处理器,t控制位的含义不同。 m0, m1, m2, m3 and m4 位是模式位,=1 运算结果为负; =0 运算结果为正。,=1 运算结果为零; =0 运算结果不为零。,加法,结果产生进位;c=1,否则c=0。 减法,发生劫wei=0 运算结果不为零。,i=1 禁止irq中断; f=1 禁止fiq中断。,对于armv4以及更高的版本的t系列的arm处理器,t=0表示执行arm指令;t=1表示执行thumb指令。 对于armv5以及更高的版本的非t系列的arm处理器,t=0表示执行arm指令;t=1表示强制下一条执行的指令产生未定义指令中断。,异常,异常优先级 (1) reset (highest priority) (2) data abort (3) fiq (4) irq (5) prefetch abort (6) 未定义指令 (7) software interrupt (最低优先级),当处理器的复位引脚有效时,系统产生复位中断,程序跳转到复位异常中断处理程序处执行。硬复位和软复位。,当处理器的外部中断请求引脚有效,而且cpsr寄存器的i控制位被清除时,处理器产生外部中断请求(irq)异常中断。系统中各外设通常通过该异常中断请求处理器服务。,这是一个由用户定义的中断指令。可用于用户模式下的程序调用特权操作指令。在实时操作系统(rtos)中可通过该机制实现系统功能调用。,当处理器的外部快速中断请求引脚有效,而且cpsr寄存器的f控制位被清除时,处理器产生外部中断请求(fiq)异常中断。,数据访问中止。如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问中止异常中断。,如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当该被预取的指令执行时,处理器产生指令预取中止异常中断。,当arm处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断。可以通过该异常中断机制仿真浮点向量运算。,异常向量,进入异常的操作-1,将进入异常中的链接寄存器lr_mode (r14)设置成返回地址; 保存处理器当前的状态、中断屏蔽位几个条件标志位。即将cpsr复制到要执行异常中断对应的spsr中。各异常中断有自己的物理spsr寄存器; 设置当前程序状态寄存器cpsr中相应的位。(处理器的模式位,中断屏蔽位),模式位置成对应异常类型的值; 将程序计数器值(pc),设置成对应异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行。,进入异常的操作-2,r14_=return link spsr_=cpsr cpsr4:0=exception mode number cpsr5=0 ;当运行于arm状态时 if=reset or fiq then ;当响应fiq异常时,禁止新的fiq异常 cpsr6=1; cpsr7=1; pc=exception vector address,例子: 用户模式到 fiq模式*,r14_fiq,r13_fiq,r12_fiq,r10_fiq,r11_fiq,r9_fiq,r8_fiq,用户模式 cpsr 复制到 fiq 模式 spsr,返回一个从用户模式计算的地址,pc值存储在fiq模式,用户模式,fiq 模式,异常向量,进入异常的操作-响应复位异常中断,当处理器的复位引脚有效时,处理器终止当前指令。当处理器的复位引脚变成无效时,处理器开始执行下面的操作。,r14_svc = unpredictable value spsr_svc = unpredictable value /* 进入特权模式 */ cpsr4:0 = 0b10011 /* 切换到arm状态 */ cpsr5 = 0 /* 禁止fiq中断 */ cpsr7 = 1 if high vectors configured then pc =0xffff0000 else pc = 0x00000000,进入异常的操作-响应未定义指令异常中断,处理器响应未定义指令异常中断时的处理过程如下面的伪代码所示。,r14_und = adress of next instruction after the undefined instruction spsr_und = cpsr /* 进入未定义指令异常中断 */ cpsr4:0 = 0b11011 /* 切换到arm状态 */ cpsr5 = 0 /* cpsr6不变,禁止irq异常中断 */ cpsr7 = 1 if high vectors configured then pc =0xffff0004 else pc = 0x00000004,进入异常的操作-响应swi异常中断,处理器响应swi异常中断时的处理过程如下面的伪代码所示。,r14_svc = adress of next instruction after the swi instruction spsr_svc = cpsr /* 进入特权模式 */ cpsr4:0 = 0b10011 /* 切换到arm状态 */ cpsr5 = 0 /* cpsr6不变,禁止irq异常中断 */ cpsr7 = 1 if high vectors configured then pc =0xffff0008 else pc = 0x00000008,进入异常的操作-响应指令预取中止异常中断,处理器响应指令预取中止异常中断时的处理过程如下面的伪代码所示。,r14_abt = adress of the aborted instruction + 4 spsr_abt = cpsr /* 进入指令预取中止模式 */ cpsr4:0 = 0b10111 /* 切换到arm状态 */ cpsr5 = 0 /* cpsr6不变,禁止irq异常中断 */ cpsr7 = 1 if high vectors configured then pc =0xffff000c else pc = 0x0000000c,进入异常的操作-响应数据访问中止异常中断,处理器响应数据访问中止异常中断时的处理过程如下面的伪代码所示。,r14_abt = adress of the aborted instruction + 8 spsr_abt = cpsr /* 进入数据访问中止模式 */ cpsr4:0 = 0b10111 /* 切换到arm状态 */ cpsr5 = 0 /* cpsr6不变,禁止irq异常中断 */ cpsr7 = 1 if high vectors configured then pc =0xffff0010 else pc = 0x00000010,进入异常的操作-响应irq异常中断,处理器响应irq异常中断时的处理过程如下面的伪代码所示。,r14_irq = adress of next instruction to be executed + 4 spsr_irq = cpsr /* 进入irq异常中断模式 */ cpsr4:0 = 0b10010 /* 切换到arm状态 */ cpsr5 = 0 /* cpsr6不变,禁止irq异常中断 */ cpsr7 = 1 if high vectors configured then pc =0xffff0018 else pc = 0x00000018,进入异常的操作-响应fiq异常中断,处理器响应fiq异常中断时的处理过程如下面的伪代码所示。,r14_fiq = adress of next instruction to be executed + 4 spsr_fiq = cpsr /* 进入fiq异常中断模式 */ cpsr4:0 = 0b10001 /* 切换到arm状态 */ cpsr5 = 0 /* 禁止fiq异常中断,禁止irq异常中断 */ cpsr6 = 1 cpsr7 = 1 if high vectors configured then pc =0xffff001c else pc = 0x0000001c,退出异常的操作,恢复被中断的程序的处理器状态几中断屏蔽位,即将spsr_mode复制回 cpsr; 返回到发生异常中断的指令的下一条指令处执行,即将lr_mode寄存器中的值减去相应的偏移量送到pc中(三级流水线的预取指令); 可以认为程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。,进入/退出异常概述,退出异常的操作-swi和未定义指令异常中断处理程序的返回,swi和未定义指令异常中断是由当前执行的指令自身产生的,当上述中断产生时,程序计数器pc的值还为更新,它指向当前指令后面的第2条指令(对于arm指令来说,它指向当前指令地址+8个字节的位置;对于thumb指令来说,它指向当前指令地址+4个字节的位置)。当中断发生时,处理器将(pc-4)保存到异常模式lr_mode中。这时(pc-4)即指向当前指令的下一条指令。因此返回操作可以通过下面的指令实现: mov pc, lr 该指令将寄存器lr中的值复制到程序计数器pc中,实现程序返回,同时将spsr_mode寄存器内容复制到当前程序状态寄存器cpsr中。 当异常中断处理程序中使用了数据栈时,可以通过下面的指令保护和恢复异常程序执行的现场: stmfd sp!, reglist, lr ; ldmfd sp!, reglist, pc 在上述指令中,reglist是异常中断处理程序中使用的寄存器列表。标示符指示将spsr_mode寄存器的内容复制到cpsr中。该指令只能在特权模式下使用。,退出异常的操作-irq和fiq异常中断处理程序的返回,通常处理器执行完当前指令后,查询irq和fiq中断引脚,并且查看系统是否允许irq和fiq中断。如果引脚信号有效,且系统允许相应中断,则处理器将产生相应的异常中断。当irq或fiq中断产生时,pc的值已经更新,因此它指向当前指令后面的第3条指令(对于arm指令来说,它指向当前指令地址+12个字节的位置;对于thumb指令来说,它指向当前指令地址+6个字节的位置)。当中断发生时,处理器将(pc-4)保存到异常模式lr_mode中。这时(pc-4)即指向当前指令后的第2条指令。因此返回操作可以通过下面的指令实现: subs pc, lr,#4 该指令将寄存器lr中的值减4后复制到程序计数器pc中,实现程序返回,同时将spsr_mode寄存器内容复制到当前程序状态寄存器cpsr中。,退出异常的操作-irq和fiq异常中断处理程序的返回,当异常中断处理程序中使用了数据栈时,可以通过下面的指令保护和恢复异常程序执行的现场: subs lr, lr, #4 stmfd sp!, reglist, lr ; ldmfd sp!, reglist, pc 在上述指令中,reglist是异常中断处理程序中使用的寄存器列表。标示符指示将spsr_mode寄存器的内容复制到cpsr中。该指令只能在特权模式下使用。,退出异常的操作-指令预取中止异常中断处理程序的返回,当指令预取时,如果目标地址是非法的,该指令将被标记成有问题的指令。这时,流水线上该指令之前的指令继续执行。当执行到该被标志成有问题的指令时,处理器产生指令预取中止异常中断。当发生该异常中断时,程序要回到该有问题的指令处,重新读取并执行该指令。因此指令预取中止异常中断应该返回到产生该指令预取中止异常中断的指令处,而不是像上述两种情况下返回到发生中断的指令的下一条指令。 当指令预取中止异常中断产生时,pc的值还未更新,因此它指向当前指令后面的第3条指令(对于arm指令来说,它指向当前指令地址+12个字节的位置;对于thumb指令来说,它指向当前指令地址+6个字节的位置)。当中断发生时,处理器将(pc-4)保存到异常模式lr_mode中。这时(pc-4)即指向当前指令的下一条指令。因此返回操作可以通过下面的指令实现: subs pc, lr,#8 该指令将寄存器lr中的值减4后复制到程序计数器pc中,实现程序返回,同时将spsr_mode寄存器内容复制到当前程序状态寄存器cpsr中。,退出异常的操作-指令预取中止异常中断处理程序的返回,当异常中断处理程序中使用了数据栈时,可以通过下面的指令保护和恢复异常程序执行的现场: subs lr, lr, #4 stmfd sp!, reglist, lr ; ldmfd sp!, reglist, pc 在上述指令中,reglist是异常中断处理程序中使用的寄存器列表。标示符指示将spsr_mode寄存器的内容复制到cpsr中。该指令只能在特权模式下使用。,退出异常的操作-数据访问中止异常中断处理程序的返回,当发生数据访问中止异常中断时,程序要返回到该有问题的数据访问处,重新访问该数据。因此数据访问中止异常中断应该返回到产生该数据访问中止异常中断的指令处,而不是像上述两种情况下返回到发生中断的指令的下一条指令。 数据访问中止异常中断是由数据访问指令产生的,当数据访问中止异常中断产生时,pc的值已更新,它指向当前指令后面的第2条指令(对于arm指令来说,它指向当前指令地址+8个字节的位置;对于thumb指令来说,它指向当前指令地址+4个字节的位置)。当中断发生时,处理器将(pc-4)保存到异常模式lr_mode中。这时(pc-4)即指向当前指令后的第2条指令。因此返回操作可以通过下面的指令实现: subs pc, lr,#8 该指令将寄存器lr中的值减8后复制到程序计数器pc中,实现程序返回,同时将spsr_mode寄存器内容复制到当前程序状态寄存器cpsr中。,退出异常的操作-指令预取中止异常中断处理程序的返回,当异常中断处理程序中使用了数据栈时,可以通过下面的指令保护和恢复异常程序执行的现场: subs lr, lr, #8 stmfd sp!, reglist, lr ; ldmfd sp!, reglist, pc 在上述指令中,reglist是异常中断处理程序中使用的寄存器列表。标示符指示将spsr_mode寄存器的内容复制到cpsr中。该指令只能在特权模式下使用。,本节提要,1,3,2,5,4,6,嵌入式微处理器及其应用,arm体系结构概览,arm jtag调试接口,arm编程模型,arm 指令集,s3c44b0开发平台简介,指令长度,指令集可以是以下任一种 32 bits 长 (arm状态) 16 bits 长 (thumb 状态) arm7tdmi 支持3种数据类型 字节 (8-bit) 半字 (16-bit) 字 (32-bit) 字必须被排成4个字节边界对齐,半字必须被排列成2个字节边界对齐,arm 指令集,load-store 结构* 在通用寄存器中操作 load/store 从存储器中读某个值,操作完后再将其放回存储器中 指令分类 数据处理指令 使用和改变寄存器的值 数据传送指令 把存储器的值拷贝到寄存器中 (load) or 把寄存器中的值拷贝到存储器中(store) 控制流指令 分支 分支和链接, 保存返回的地址,以恢复最先的次序 陷入系统代码,指令格式,指令格式 3 地址指令格式 在arm状态中使用 2 地址指令格式 在 arm和 thumb 状态下使用,arm指令集,指令执行的条件,共16个。如eq,ne,lt等,指令操作符编码,决定指令的操作是否影响cpsr的值。,表示包含第1个操作数的寄存器。,表示目标寄存器,表示第2个操作数,数据处理指令 - 1,数据处理指令的类别 算术操作 按位逻辑操作 寄存器移位操作 比较操作 操作数: 32-bits 宽; 有3种指定操作数的方式 来自寄存器 第二操作数可以是常数(立即数) 移位寄存器操作数 结果: 32-bits 宽, 放在寄存器中 长乘法产生64位结果,数据处理指令 2*,通过对8位立即数右移得到32位的操作数,因此不是所有的32位立即数都是合法的(即不能通过此方法来形成),例:0x104合法,0x102不合法。,通过对寄存器中的值进行移位得到操作数。,移位值由立即数给出,移位值由寄存器给出,数据处理指令 - 3,数据处理指令 - 4,算术操作,按位逻辑操作,寄存器移位,比较操作,数据处理指令 - 5,立即数操作: 立即数操作 = (0-255) x 22n, 0 = n = 12 移位寄存器操作数 第二个操作数在与第一个操作数合成之前,是服从于移位操作的.,数据处理指令 - 6,移位操作 在任何数据处理指令中,第二个寄存器操作数可以有应用该操作数的移位操作. 逻辑移位 lsl:逻辑左移 字的最小位空位清零 lsr:逻辑右移字的最大位空位清零.,数据处理指令 - 7,移位操作 (contd) 算术移位 asr: = lsr asl: 算术左移 循环移位: ror, rrx,条件码标志,任何数据处理指令都可以设置条件码 (n, z, v, and c) 适用于除比较操作外的所有数据处理指令 特殊的请求必须在汇编语言中实现,这种请求是通过把”s”增加到选择代码中指定的 算术操作设置所有的标志位 (n, z, c, and v) 逻辑和移位操作设置 n and z 当无移位操作时,保存v和n,或根据移位操作设置,乘法指令集,在寄存器产生32位值,32位乘法,32位带加数的乘法,64位无符号数的乘法,64位带加数的无符号数的乘法,64位带符号数的乘法,64位带加数的有符号数的乘法,乘法,例子 (乘法, 乘法累加器) 注意 最低 32-bits 置于结果寄存器中,其余被忽略 不支持第二立即操作数 结果寄存器与源寄存器必须不同 当s=1时,更新cpsr中的条件标志位,不同的版本对标志位的影响不同。,数据传送指令 - 1,单指令传送 (ldr, str) 单字(32bit), 半字(16 bit) 以及字节(8 bit) 传送 寻址 寄存器偏移 地址 =基址 寄存器偏移 立即数偏移 地址 = 基址 立即数常数 后变址post-indexing: modify address after use 前变址pre-indexing: modify address before use 回写 如果可能,更新基址寄存器,数据传送指令 - 2,多数据传送指令 (ldm, stm) 批量load(ldm)内存访问指令可以一次从连续的内存单元中读取数据,传送到指令中的内存列表中的各个寄存器中。 批量store(stm)内存访问指令可以将指令中寄存器列表中的各个寄存器值写入到内存中,内存中的地址由指令中的寻址模式确定。 使用 堆栈: 支持所有堆栈模式(fa,ea,fd,ed) 上下文切换: 保存或重新存储工作寄存器 块拷贝:在主存储器中移动大数据块 寻址 事先(before)/事后(after) 自动增减(increase,decrease) 回写到基址寄存器write back the base register,关于堆栈 满堆栈:堆栈指针指向最后压入堆栈的数据。 空堆栈:堆栈指针指向下一个将要放入数据的空位置。 递增堆栈:堆栈由低地址向高地址生成。 递减堆栈:堆栈由高地址向低地址生成。 满递增堆栈(fa):堆栈指针指向最后压入堆栈的数据,且堆栈由低地址向 高地址生成。 满递减堆栈(fd):堆栈指针指向最后压入堆栈的数据,且堆栈由高地址向低 地址生成。 空递增堆栈(ea):堆栈指针指向下一个将要放入数据的空位置,且堆栈由低 地址向高地址生成。 空递减堆栈(ed):堆栈指针指向下一个将要放入数据的空位置,且堆栈由高 地址向低地址生成。,数据传送指令 - 3,单数据交换 (swap)(本指令主要用于信号量的操作) 信号量用于进程间的同步和互斥。对信号量的操作通常要求是一个原子操作,即在一条指令中完成信号量的读取和修改操作。 在寄存器和外部存储器之间交换字节或字 读存储器和写存储器是是放在一起的 原子指令 执行时不能中断 当lock 信号输出操作时,外部存储器管理单元被锁定,当多线程操作时使程序同步(os支持) 锁定 信号量,数据传送指令 - 4,note: r1 keeps a word address (2 lsbs are 0),寄存器间接寻址,基址+偏移量寻址 (offset of up to 4kbytes),自动变址寻址,后变址寻址,note: no restrictions for r1,单寄存器 load and store,数据传送指令 - 5,数据传送指令 - 6,块拷贝 数据被存贮在基本寄存器的上面地址或下面地址 地址增加或减少是在存贮第一个值之前或之后开始的,note: 寄存器的部分或全部都可以用单指令传送 note: 在表中的寄存器顺序并不重要 note: 在表中包括 r15 i将造成控制流的改变,多寄存器数据传送 increment after,多寄存器传送寻址模式,r5,r1,r9,r0,r9,stmia r9!, r0,r1,r5,1000,16,100c,16,1018,16,r1,r5,r9,stmda r9!, r0,r1,r5,r0,r9,1000,16,100c,16,1018,16,r5,r9,stmdb r9!, r0,r1,r5,r1,r0,r9,1000,16,100c,16,1018,16,r5,r1,r0,r9,r9,stmib r9!, r0,r1,r5,1000,16,100c,16,1018,16,条件执行,所有的arm指令都可以条件执行 指令的执行与否取决于cpsr寄存器的n, z, c and v标志位 所有的thumb指令都可以解压成全部条件指令 condition field in instruction 0000 = eq - z set (equal) 0001 = ne - z clear (not equal) 0010 = cs - c set (unsigned higher or same) 0011 = cc - c clear (unsigned lower) 0100 = mi - n set (negative) 0101 = pl - n clear (positive or zero) 0110 = vs - v set (overflow) 0111 = vc - v clear (no overflow) 1000 = hi - c set and z clear (unsigned higher) 1001 = ls - c clear or z set (unsigned lower or same) 1010 = ge - n set and v set, or n clear and v clear (greater or equal) 1011 = lt - n set and v clear, or n clear and v set (less than) 1100 = gt - z clear, and either n set and v set, or n clear and v clear (greater than) 1101 = le - z set, or n set and v clear, or n clear and v set (less than or equal) 1110 = al - always 1111 = nv - never,控制流指令,条件执行,条件执行避免使用分支指令 example,使用条件执行,note: add 2 letter condition after the 3-letter opcode,控制和分支指令,控制指令 分支和分支连接 跳到希望的指令中 保存当前的pc并返回 (with l bit) 分支和交换 跳到期望的指令中与指令集交换 rm0 = 1: subsequent inst. are thumb. rm0 = 0: subsequent inst. are arm.,分支和链接指令,分支子程序 (r14 serves as a link register) 嵌套子程序,full descending,请求管理程序,管理程序是在特权级操作的程序,它可以实现用户级程序不能实现的任务 example: send text to the display arm isa 包括 swi (software interrupt),转移表,根据程序计算值调用一个子程序,note: slow when the list is long, and all subroutines are equally frequent,psr 指令,程序状态寄存器访问指令(mrs, msr) mrs 程序状态寄存器到通用寄存器的数据传送指令 msr 通用寄存器到程序状态寄存器的数据传送指令,协处理器指令 - 1,协处理器 一般原理是通过增加核扩展指令集 example : 如 mmu & cache. fpu等系统控制器 寄存器 协处理器专用 arm 控制数据流 协处理器只包含数据处理和存贮器传送操作 协处理器数据操作 (cdp) 这类指令是用来告诉协处理器执行某些内部操作 无结果返回arm,arm并不等待操作完成,协处理器指令 - 2,协处理器数据传送 (ldc, stc) load (ldc) or store (stc) 一个协处理器寄存器的子集直接到存储器 例:ldc p6, cr4, r2, #4; r2为arm中的寄存器,r2+4协处理器p6的cr4寄存器中。 arm is 负责提供存储器地址,协处理器提供或接收大量传送的数据或控制指令 协处理器寄存器传送 (mrc, mcr) 在arm和协处理器之间的直接通讯信息 软件中断指令 (swi) 在控制方式中用于进入管理员模式 该指令造成软件中断陷刊产生,它会影响模式改变,area hellow,code,readonly ;声明代码区 swi_writec equ 读取下一字节 cmp r0,#0 ;检查文本终点 swine swi_writec ;若非终点,则打印 bne loop ;并返回loop swi swi_exit ;执行结束 text = “hello world”,&0a,&0d,0 end ;程序结束,example:hello arm world!,arm系统初始化过程简介,包括: 中断向量表 初始化存储器系统 初始化堆栈 初始化有特殊要求的端口、设备 初始化应用程序执行环境 改变处理器模式 call 主应用程序,1、中断向量表,中断向量表的程序,area boot,code,readonly entry b reset_handler b undef_handler b swi_handler b preabort_handler b dataabort_handler b . ;for reserved interrupt,stop here b irq_handler b fiq_handler,中断向量表的程序,vector_init_block ldr pc, reset_addr ldr pc, undef_addr ldr pc, swi_addr ldr pc, preabort_addr ldr pc, dataabort_addr nop ;for reserved interrupt,stop here ldr pc, irq_addrirq_addr ldr pc, fiq_addr,reset_addr dcd reset_handler undef_addr dcd undef_handler swi_addr dcd swi_handler preabort_addr dcd preabort_handler dataabort_addr dcd dataabort_handler dcd 0 dataabort_addr dcd irq_handler fiq_addr dcd fiq_handler,2、初始化存储器系统,在基于arm的嵌入式应用系统中,存储系统通常是通过系统控制协处理器cp15完成的。除了cp15外,在具体的各种存储管理机制中可能还会用到其他的一些技术。如在mmu中除了cp15外还将使用页表等。 cp15可以包含有16个32位的寄存器。 存储器的类型和时序配置 存储器的地址分布,rom地址的重映射,3、初始化堆栈,arm有7种执行状态,每一种状态堆栈指针寄存器(sp)都是独立的; 对每一种模式都要定义sp寄存器的堆栈地址;,4、初始化有特殊要求的端口、设备,如驱动指示系统运行状态的一些简单的输出设备,如led,蜂鸣器等 一般外设初始化可以系统初始化之后进行,5、初始化应用程序执行环境,完成必要的从rom到ram的数据传输,6、改变处理器模式,管理员模式,多种特权模式,用户运行模式,复位后缺省模式,堆栈初始化阶段,用户选择,7、呼叫主应用程序,系统初始化工作完成后,程序流程转入主应用程序执行 可以直接从启动代码跳到应用程序的主函数入口,本节提要,1,3,2,5,4,6,嵌入式微处理器及其应用,arm体系结构概览,arm jtag调试接口,arm编程模型,arm 指令集,s3c44b0开发平台简介,嵌入式软件的开发过程,arm的jtag调试结构,angel,jtag,angel调试监控程序。是一组运行在目标机上的程序,可以接收主机上调试器发送的命令,执行诸如设置断点、单步执行目标程序、观察或者修改寄存器/存储器内容之类的操作。早期使用的是rdp(remote debug protocol)的协议,是基于字节流的简单协议,没有纠错功能。后来广泛使用的是adp(angel debug protocol)的协议,是一个基于数据包的通信协议,具有纠错功能。,宿主机调试器,宿主机调试器通过固定的协议控制下位机(协议转换器)。比如,sdt中通过angel协议或者第三方调试器所提供的协议 宿主机调试器只发送宏观的命令,比如: 程序运行、终止。读内存、arm寄存器等 通讯的介质可以是串口、并口、以太网、usb等,jtag与angel,jtag调试:协议转换器解释上位机传送过来的命令,通过jtag控制arm执行。 angel调试:协议转换器可以直接做为目标板的firmware的一部分。直接执行从宿主机传送过来的调试命令;并回送相应的数据。 angel可以节省专门的jtag仿真器,但是,它需要软件,或者是嵌入式操作系统的支持,做不到完全的实时仿真。而jtag仿真是通过硬件和控制arm的embeddedice实现的,可以做到实时仿真。,什么是jtag?,jtag是joint test action group的缩写是ieee1149.1标准 jtag的建立使得集成电路固定在pcb上,只通过边界扫描便可以被测试 在arm7tdmi处理器中,可以通过jtag直接控制arm的内部总线,io口等信息,从而达到调试的目的,jtag的典型接口,tms: 测试模式选择(test mode select),通过tms信号控制jtag状态机的状态 tck :jtag的时钟信号 tdi:数据输入信号 tdo :数据输出信号 ntrst:jtag复位信号,复位jtag的状态机和内部的宏单元(macrocell),jtag的状态机(tap),在该状态下,通过idcode指令使调试停止。,在该状态下,可以执行runbist指令,结果报存在runbist寄存器中,指令寄存器和所有的调试寄存器都保持该状态。,是暂时的控制器状态,调试数据寄存器将保持原先的状态。,在该状态下,如果当前指令是sample/preload,那么在tck上升沿,边界扫描寄存器将保持原先的状态。,jtag链的组成,arm7tdmi的jtag标准链(1),tap controller:测试访问端口控制器,主要用于芯片之间的测试(extest)和处理器内核测试(intest),用于数据总线测试,用于访问embedded-ice-rt宏单元,arm7tdmi的jtag标准链(2),scan chain 0:包括arm核的所有的io和总线的输入输出控制信号 scan chain 1:包括arm核的数据总线和一个断点控制信号。通过控制这个条链,可以控制arm核执行指定的指令。 scan chain 2:通过控制embeddedice宏单元,实现对arm执行指令的断点、观察点的控制,embeddedice的结构,当观察点寄存器的值与地址、数据和控制信号匹配时,观察点寄存器能中止arm处理器运行。,arm7tdmi中断点的设置,设置embeddedice的两个watchpoint单元 主要包括:地址、数据、控制信号等 当一个(或者两个)watchpoint中的地址(也可以包括数据)和arm所执行的当前的指令相同的时候,arm就从运行状态进入debug状态 硬件断点:在arm中直接设定watchpoint中的地址,当arm运行到指定的地址时,就进入debug状态 软件断点:改变存储器中的arm指令为一个特殊的数据x(arm的未定义指令),同时,设置watchpoint中的断点数据也为x,当arm把x数据作为指令读入的时候,arm就进入debug状态,硬件断点和软件断点的优缺点,硬件断点:数目受embeddedice中的watchpoint数目的限制;但是,可以在任何地方设置断点 软件断点:数目不受限制,但是,软件断点是通过替换系统的断点地址的指令实现的,所以,软件断点只能在可写的存储器的地址中设置(比如:ram),而不能在rom(比如:flash)中设置,本节提要,1,3,2,5,4,6,嵌入式微处理器及其应用,arm体系结构概览,arm jtag调试接口,arm编程模型,arm 指令集,s3c44b0开发平台简介,samsung s3c44b0x,samsung s3c44b0x微处理器是三星公司专为手持设备和一般应用提供的高性价比和高性能的微控制器解决方案,它使用arm7tdmi核,工作在66mhz。为了降低系统总成本和减少外围器件,这款芯片中还集成了下列部件: 8kb cache、外部存储器控制器、lcd控制器、4个dma通道、2通道uart、1个多主i2c总线控制器、1个iis总线控制器,5通道pwm定时器及一个内部定时器、71个通用i/o口、8个外部中断源、实时时钟、8通道10位adc等。,s3c44b0x 体系结构,用于手持设备和通用嵌入式应用的完整系统; 16/32位risc结构和带arm7dmi cpu核的功能强大的指令集; thumb协处理器在保证性能的前提下使代码密度最大; 片上ice中断调试jtag调试方式 328位硬件乘法器;,系统管理,支持大/小端模式 地址空间:每个bank32mb(一共256mb); 每个bank支持8/16/32位数据总线编程; 固定的bank起始地址和7个可编程的bank; 1个起始地址和尺寸可编程的bank; 8个内存bank::个用于rom、sram;2个用于rom/sram/dram; 所有内存bank的可编程寻址周期; 在能量低的情况下支持dram/sdram自动刷新模式;,时钟和能量管理,低能耗; 时钟可以通过软件选择性地反馈回每个功能块 能量模式: 正常模式:正常运行模式; 低能模式:不带pll的底频时钟; 休眠模式:只使cpu的时钟停止; 停止模式:所有时钟都停止; 用eint或rtc警告中断从停止模式唤醒,中断控制器,30个中断源(看门狗定时器,6个定时器,6个uart,8个外部中断,4个dma,2个rtc,1个adc,1个i2c,1个sio; 矢量irq中断模式减少中断响应周期; 外部中断源的水平/边缘模式; 可编程的水平/边缘极性; 对紧急中断请求支持fiq(快速中断请求);,带pwm的定时器,5个16位带pwm的定时器/1个16位基于dma或基于中断的定时器; 可编程的工作循环 支持外部时钟源,实时时钟,全时钟特点:毫秒、秒、分、小时、天、星期、月、年 32.768khz运行 cpu唤醒的警告中断 时钟记号中断,通用输入输出端口,8个外部中断端口 71个多路输入输出口;,uart,2个带dma和中断的uart; 支持5位,6位,7位,8位串行数据传送/接收; 当传送/接收时支持双向握手 可编程波特率; 支持irda1.0(115.2kbps); 测试的循环返回模式; 每个通道有2个内部32位fifo,dma与a/d,dma控制器 2路通用无需要cpu干涉的dma控制器; 2路桥式dma控制器; 采用6种dma请求的桥式dma支持io到内存,内存到io,io到io:软件,4个内部功能块(uart,sio,实时器,iis),外部管脚; dma之间可编程优先级次序; 突发传送模式提高到fpdram、edodram和sdram的传送率; a/d转换 10位多路adc; 最大500ksps/10位;,lcd控制器,支持彩色/单色/灰度lcd; 支持单扫描和双扫描显示; 支持虚拟显示功能 系统内存作为显示内存 专用dma用于从系统内存中提取图象数据; 可编程屏幕尺寸; 灰度:16级 256色,看门狗定时器与

温馨提示

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

评论

0/150

提交评论