ARM处理器

本文从底层原理来给大家描述ARM处理器如何编写Bootloader。

1、关于Bootloader

Bootloader顾名思义就是引导加载程序,是在操作系统或应用程序运行之前的一段程序,是在系统上电后执行的一段程序代码。

BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式平台。因此,在嵌入式平台里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对bootloader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。---来源百度百科

Bootloader在手机、电脑、众多嵌入式系统中都存在,它的作用有很多,比如:初始化底层应用驱动、加载应用程序、更新应用程序等。

不同的设备,Bootloader可能差异很大,通常来说Bootloader比较依赖底层硬件和实际项目需求。

2、如何编写bootloader

bootloader是一段引导加载程序代码,它更新用户的应用程序代码,可以使用很多硬件下载通道(例如USB、网络端口)获得新代码。

在执行引导ROM之后,将执行bootloader程序,并在需要时进行更新,然后执行最终用户应用程序。

引导加载程序和用户应用程序应作为两个独立的Project或Object进行编写和编译,从而产生两个独立且可执行的(bin/hex)文件。

引导加载程序的主要任务是在必要时对用户应用程序进行重新编程/替换,并跳转至用户应用程序以执行该程序,应用程序不一定需要知道引导加载程序的存在。

引导加载程序通常位于芯片闪存基址,下面通过一张图来描述内存和Flash代码映射关系:

“结合

有很多方法可以引导bootloader进入编程模式,以将用户应用程序重新编程到Flash中,或者直接跳转到现有的用户应用程序来执行。最简单的方法是检查GPIO引脚以确定是否应进入编程模式。

大多数芯片供应商为用户提供了一种方便的方式,例如 ISP 和 IAP 接口,bootloader将使用它们来更新闪存内容。

当Flash内容已更新或已经是最新时,引导加载程序将跳转到用户应用程序。在执行用户应用程序之前,这需要许多步骤:

1、确保CPU处于特权模式。

2、禁用NVIC中所有启用的中断。

3、禁用所有可能产生中断请求的使能外设,并清除这些外设中的所有未使用中断标志。

4、清除NVIC中所有未使用的中断请求。

5、禁用SysTick并清除其异常挂起位。

6、如果引导加载程序使用了单个故障处理程序,请禁用它们。

7、如果发现内核当前与PSP一起运行,则激活MSP(由于编译器可能仍在使用堆栈,因此在此之前需要将PSP复制到MSP)。

8、将用户应用程序的向量表地址加载到SCB-> VTOR寄存器中。确保地址符合对齐要求。

9、最后一部分是将MSP设置为用户应用程序向量表中找到的值,然后将用户应用程序的重置向量值加载到PC中,也就是跳转功能。

比如通过调用下面的示例BootJump()这样的函数来完成此操作:

static void BootJump(uint32_t *Address)
{
  //1.确保CPU处于特权模式。
  if( CONTROL_nPRIV_Msk & __get_CONTROL())
  {  /* not in privileged mode */
    EnablePrivilegedMode() ;
  }

  //2.禁用NVIC中所有启用的中断。
  Disable_All_Peripherals();

  //3.禁用所有可能产生中断请求的使能外设,并清除这些外设中的所有未使用中断标志。
  NVIC->ICER[ 0 ] = 0xFFFFFFFF;
  NVIC->ICER[ 1 ] = 0xFFFFFFFF;
  NVIC->ICER[ 2 ] = 0xFFFFFFFF;
  NVIC->ICER[ 3 ] = 0xFFFFFFFF;
  NVIC->ICER[ 4 ] = 0xFFFFFFFF;
  NVIC->ICER[ 5 ] = 0xFFFFFFFF;
  NVIC->ICER[ 6 ] = 0xFFFFFFFF;
  NVIC->ICER[ 7 ] = 0xFFFFFFFF;

  //4.清除NVIC中所有未使用的中断请求。
  NVIC->ICPR[ 0 ] = 0xFFFFFFFF;
  NVIC->ICPR[ 1 ] = 0xFFFFFFFF;
  NVIC->ICPR[ 2 ] = 0xFFFFFFFF;
  NVIC->ICPR[ 3 ] = 0xFFFFFFFF;
  NVIC->ICPR[ 4 ] = 0xFFFFFFFF;
  NVIC->ICPR[ 5 ] = 0xFFFFFFFF;
  NVIC->ICPR[ 6 ] = 0xFFFFFFFF;
  NVIC->ICPR[ 7 ] = 0xFFFFFFFF;

  //5.禁用SysTick并清除其异常挂起位。
  SysTick->CTRL = 0;
  SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;

  //6.如果引导加载程序使用了单个故障处理程序,请禁用它们。
  SCB->SHCSR &= ~( SCB_SHCSR_USGFAULTENA_Msk | \ 
                 SCB_SHCSR_BUSFAULTENA_Msk | \ 
                 SCB_SHCSR_MEMFAULTENA_Msk ) ;

  //7.如果发现内核当前与PSP一起运行,则激活MSP
  if( CONTROL_SPSEL_Msk & __get_CONTROL())
  {  /* MSP is not active */
    __set_MSP( __get_PSP()) ;
    __set_CONTROL( __get_CONTROL() & ~CONTROL_SPSEL_Msk);
  }

  //8.将用户应用程序的向量表地址加载到SCB-> VTOR寄存器中。
  SCB->VTOR = ( uint32_t )Address ;

  //9.跳转
  BootJumpASM( Address[ 0 ], Address[ 1 ]);
}

再次说明bootloader与底层硬件和实际需求有关,以上代码仅供参考,主要是提供思路,方便大家理解。

来源:嵌入式专栏
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 180

ARM处理器在市面上到处都是ARM7、ARM9、Cortex-M、Cortex-R、Cortex-A包含的种类繁多,今天我们就来了解一下ARM代码编译链接的工作流程,以及过程中需要的相关概念信息。

一、编译过程

编译过程就是把源代码编译生成目标代码的过程。而采用ARM编译命令,可以将源代码编译成带有ELF格式的目标文件。除了编译命令可以选择相应的编译选项之外,源代码中的pragmas以及特别的关键字也会对编译过程/结果产生一定影响。

1.makefile文件

Makefiile类似一个脚本文件,这个文件用来定义编译过程,其中包含了需要编译的文件、文件顺序,编译的宏定义等等,可以看做完整编译需要的信息及过程的集合。

2.ELF格式文件

ELF文件:(Executable and Linkable Format) ELF文件出了包含编译出的二进制代码,还包含其他链接需要信息,ELF格式提供了相应代码/数据对应编译出的地址信息、文件信息等内容。

二、链接过程

链接就是把编译生成的目标文件和链接库处理成为相应ELF格式的映像文件(image),最终的文件可以写入嵌入式系统的ROM/FLASH中。映像文件中包含:分组信息和定位信息,亦即输出段/域及地址定位信息。链接器同时可以生成相应与域有关的符号来指示关于加载时地址、运行时地址、加载时长度限制、运行时长度限制等信息。同时链接器也具有优化的功能,删除不必要的代码、段域等。

1. 映像文件的组成

一个映像文件包含一个或多个域;一个域包含一个或多个输出段;一个输出段包含一个或多个输入段;输入段中包含了目标文件的代码和数据。

输入段的内容:代码、已初始化的数据、未初始化的数据、初始化0的存储区域。

输出段和域中包含:RO、RW、ZI域。

2. 映像文件的地址映射

加载时地址和运行时地址的区别:加载时地址是运行前的地址,简单理解在FLASH中固定存储即为加载时地址,而若代码载入RAM运行时,新的地址为运行时地址;而程序在FLASH中运行,加载时地址和运行时地址就一致了。当地址映射复杂时,可以通过scatter配置文件进行设置。

3. 初始入口点和普通入口点

初始入口点:运行时的入口点,初始入口点必须位于映像文件运行时入口点,而它的加载时地址和运行时地址一致(称为固定域)。可以通过-entry指定映像文件的初始入口点。

普通入口点:用ENTRY伪操作定义在程序中,一般为中断服务程序的入口点。

4. scatter文件中包含的信息

加载时域描述、运行时域描述、输入段描述、输入段选择符;加载时域包括:名称、起始地址、属性、最大尺寸和一个运行时域;运行时域包括:名称、起始地址、属性、最大尺寸和一个输入段集合;输入段选择符描述了输入段名称或属性的匹配方式。

输入段属性:RO-CODE/CODE、RO_DATA/CONST、RO/TEXT包括前两项、RW_DATARW/DATA(RW_CODE+RW_DATA)、BSS、ZI;FIRST\LAST来指定运行时域的开头结尾,.ANY可以根据实际情况安排到合适的运行时域。

可以使用FIXED属性将域放置在ROM中固定位置,加载时域和固定时域即相同。

三、拓展知识

1. 程序断点

断点可以分为:软件断点和硬件断点,软件断点可以相应地址插入相应的指令实现,而硬件断点必须要需要相应硬件支持才能实现。

2. 链接库的概念

链接库分为:静态链接库和动态链接库,而动态链接库又分为加载时动态链接库和运行时动态链接库;其差别:静态链接库的使用内容包含在生成的目标代码中,加载时动态链接库是程序载入内存时知道相应的动态链接库调用内容同时调入内存中,而运行时动态链接库只有在运行到需要调用时才调入使用。

3. JTAG

JTAG仿真器也称为JTAG调试器,是通过ARM芯片的JTAG边界扫描口进行调试的设备。JTAG仿真器比较便宜,连接比较方便,通过现有的JTAG边界扫描口与 ARM CPU 核通信,属于完全非插入式(即不使用片上资源)调试,它无需目标存储器,不占用目标系统的任何端口,而这些是驻留监控软件所必需的。

另外,由于JTAG调试的目标程序是在目标板上执行,仿真更接近于目标硬件,因此,许多接口问题,如高频操作限制、AC和DC参数不匹配,电线长度的限制等被最小化了。使用集成开发环境配合JTAG仿真器进行开发是目前采用最多的一种调试方式。

本文转自:单片机与嵌入式,转载此文目的在于传递更多信息,版权归原作者所有。

围观 76

RISC处理器

RISC(精简指令集计算机)是一种执行较少类型计算机指令的微处理器,起源于80年代的MIPS主机(即RISC机),RISC机中采用的微处理器统称RISC处理器。

这样一来,它能够以更快的速度执行操作(每秒执行更多百万条指令,即MIPS)。

因为计算机执行每个指令类型都需要额外的晶体管和电路元件,计算机指令集越大就会使微处理器更复杂,执行操作也会更慢。

性能特点一:由于指令集简化后,流水线以及常用指令均可用硬件执行;
性能特点二:采用大量的寄存器,使大部分指令操作都在寄存器之间进行,提高了处理速度;
性能特点三:采用缓存—主机—外存三级存储结构,使取数与存数指令分开执行,使处理器可以完成尽可能多的工作,且不因从存储器存取信息而放慢处理速度。其中ARM/MIPS/PowerPC均是基于精简指令集机器处理器的架构;X86则是基于复杂指令集的架构,Atom是x86或者是x86指令集的精简版。

根据各种新闻,Android在支持各种处理器的现状:

ARM+Android 最早发展、完善的支持,主要在手机市场、上网本、智能等市场;

X86+Android 有比较完善的发展。有atom+Android的上网本,且支持Atom+Android 和 Atom+Window7双系统;

MIPS+Android 目前在移植、完善过程中;

Powpc+Android 目前在移植、完善过程中。

ARM系列处理器

ARM架构,过去称作进阶精简指令集机器(Advanced RISC Machine,更早称作:Acorn RISC Machine),是一个32位精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。

由于节能的特点,ARM处理器非常适用于行动通讯领域,符合其主要设计目标为低耗电的特性。

在今日,ARM家族占了所有32位嵌入式处理器75%的比例,使它成为占全世界最多数的32位架构之一。

ARM处理器可以在很多消费性电子产品上看到,从可携式装置(PDA、移动电话、多媒体播放器、掌上型电子游戏,和计算机)到电脑外设(硬盘、桌上型路由器),甚至在导弹的弹载计算机等军用设施中都有他的存在。

在此还有一些基于ARM设计的派生产品,重要产品还包括Marvell的XScale架构和德州仪器的OMAP系列。

优势:价格低,能耗低;

ARM 授权方式:ARM 公司本身并不靠自有的设计来制造或出售 CPU ,而是将处理器架构授权给有兴趣的厂家。

ARM 提供了多样的授权条款,包括售价与散播性等项目。对于授权方来说,ARM 提供了 ARM 内核的整合硬件叙述,包含完整的软件开发工具(编译器、debugger、SDK),以及针对内含 ARM CPU 硅芯片的销售权。

对于无晶圆厂的授权方来说,其希望能将 ARM 内核整合到他们自行研发的芯片设计中,通常就仅针对取得一份生产就绪的智财核心技术(IP Core)认证。

对这些客户来说,ARM 会释出所选的 ARM 核心的闸极电路图,连同抽象模拟模型和测试程式,以协助设计整合和验证。

需求更多的客户,包括整合元件制造商(IDM)和晶圆厂家,就选择可合成的RTL(暂存器转移层级,如 Verilog)形式来取得处理器的智财权(IP)。

借着可整合的 RTL,客户就有能力能进行架构上的最佳化与加强。这个方式能让设计者完成额外的设计目标(如高震荡频率、低能量耗损、指令集延伸等)而不会受限于无法更动的电路图。

虽然 ARM 并不授予授权方再次出售 ARM 架构本身,但授权方可以任意地出售制品(如芯片元件、评估板、完整系统等)。

商用晶圆厂是特殊例子,因为他们不仅授予能出售包含 ARM 内核的硅晶成品,对其它客户来讲,他们通常也保留重制 ARM 内核的权利。

x86系列/Atom处理器

x86或80x86是英代尔Intel首先开发制造的一种微处理器体系结构的泛称。

x86架构是重要地可变指令长度的CISC(复杂指令集电脑,Complex Instruction Set Computer)。

Intel Atom(中文:凌动,开发代号:Silverthorne)是Intel的一个超低电压处理器系列。处理器采用45纳米工艺制造,集成4700万个晶体管。L2缓存为512KB,支持SSE3指令集,和VT虚拟化技术(部份型号)。

现时,Atom处理器系列有6个型号,全部都是属于Z500系列。它们分别是Z500、Z510、Z520、Z530、Z540和Z550。最低端的Z500内核频率是800MHz,FSB则是400MHz。而最高速的Z550,内核频率则有2.0GHz,FSB则是533MHz。

从Z520开始,所有的处理器都支持超线程技术,但只增加了不到10%的耗电。双内核版本为N系列,依然采用945GC芯片组。

双内核版本仍会支持超线程技术,所以系统会显示出有4个逻辑处理器。这个版本的两个内核并非采用本地设计,只是简单的将两个单内核封装起来。

MIPS系列处理器

MIPS是世界上很流行的一种RISC处理器。MIPS的意思是“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。

它最早是在80年代初期由斯坦福(Stanford)大学Hennessy教授领导的研究小组研制出来的。MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。

MIPS技术公司是美国著名的芯片设计公司,它采用精简指令系统计算结构(RISC)来设计芯片。和英特尔采用的复杂指令系统计算结构(CISC)相比,RISC具有设计更简单、设计周期更短等优点,并可以应用更多先进的技术,开发更快的下一代处理器。

MIPS是出现最早的商业RISC架构芯片之一,新的架构集成了所有原来MIPS指令集,并增加了许多更强大的功能。MIPS自己只进行CPU的设计,之后把设计方案授权给客户,使得客户能够制造出高性能的CPU。

1984年,MIPS计算机公司成立,开始设计RISC处理器;

1986年推出R2000处理器。

1992年,SGI收购了MIPS计算机公司。

1988年推R3000处理器。

1991年推出第一款64位商用微处器R4000;之后又陆续推出R8000(于1994年)、R10000(于1996年)和R12000(于1997年)等型号。

1998年,MIPS脱离SGI,成为MIPS技术公司;随后,MIPS公司的战略发生变化,把重点放在嵌入式系统;1998年-MIPS科技股票在美国纳斯达克股票交易所公开上市。

1999年,MIPS公司发布MIPS32和MIPS64架构标准,为未来MIPS处理器的开发奠定了基础。新的架构集成了所有原来NIPS指令集,并且增加了许多更强大的功能。MIPS公司陆续开发了高性能、低功耗的32位处理器内核(core)MIPS324Kc与高性能64位处理器内核MIPS64 5Kc。

2000年,MIPS公司发布了针对MIPS32 4Kc的版本以及64位MIPS 64 20Kc处理器内核。

2007年8月16日-MIPS科技宣布,中科院计算机研究所的龙芯中央处理器获得其处理器IP的全部专利和总线、指令集授权。

2007年12月20日-MIPS科技宣布,扬智科技已取得其针对先进多媒体所设计的可定制化系统单芯片(SoC)核心“MIPS32 24KEc Pro”授权。

PowerPC系列处理器

PowerPC 是一种精简指令集(RISC)架构的中央处理器(CPU),其基本的设计源自IBM(国际商用机器公司)的IBM PowerPC 601 微处理器POWER架构。二十世纪九十年代,IBM(国际商用机器公司)、Apple(苹果公司)和Motorola(摩托罗拉)公司开发PowerPC芯片成功,并制造出基于PowerPC的多处理器计算机。PowerPC架构的特点是可伸缩性好、方便灵活。

PowerPC 处理器有广泛的实现范围,包括从诸如 Power4 那样的高端服务器 CPU 到嵌入式 CPU 市场(任天堂 Gamecube 使用了 PowerPC)。PowerPC 处理器有非常强的嵌入式表现,因为它具有优异的性能、较低的能量损耗以及较低的散热量。除了象串行和以太网控制器那样的集成 I/O,该嵌入式处理器与“台式机”CPU 存在非常显著的区别。

实时性(Real Time)DSP架构

DSP是微处理器的一种,这种微处理器具有极高的处理速度.因为应用这类处理器的场合要求具有很高的实时性(Real Time)。比如通过移动电话进行通话,如果处理速度不快就只能等待对方停止说话,这一方才能通话。

如果双方同时通话,因为数字信号处理速度不够,就只能关闭信号连接.在DSP出现之前数字信号处理只能依靠MPU(微处理器)来完成。但MPU较低的处理速度无法满足高速实时的要求。

因此,直到70年代,有人才提出了DSP的理论和算法基础。那时的DSP仅仅停留在教科书上,即便是研制出来的DSP系统也是由分立元件组成的,其应用领域仅局限於军事、航空航天部门。

90年代DSP发展最快,相继出现了第四代和第五代DSP器件。现在的DSP属於第五代产品,它与第四代相比,系统集成度更高,将DSP芯核及外围元件综合集成在单一芯片上。这种集成度极高的DSP芯片不仅在通信、计算机领域大显身手,而且逐渐渗透到人们日常消费领域。

‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

本文转自:电子工程专辑,转载此文目的在于传递更多信息,版权归原作者所有。

围观 61

随着人们生活水平的日益提高,我国人口的老龄化也越来越明显,吸尘机器人作为服务机器人的一种,能够代替人进行清扫房间、车间、墙壁等一些简单劳动。

使服务机器人有了广阔的市场,已成为一些企业和科研院所研究的焦点。目前市场上的吸尘机器人虽然也具有智能性,但大多由于结构不尽合理、通用性差、集成度高而导致成本高,不利于普及。在研究总结市场上相对成熟产品的基础上,基于ARM Cortex-M3处理器设计一款具备自我导航功能的室内吸尘机器人。外形紧凑、结构简单、运行平稳、噪音小,并且成本低,操作方便,还具有可扩展接口,用户能够根据实际需要对其功能做进一步开发。

1、吸尘机器人总体构成
  
利用ARM Cortex-M3处理器设计一款应用于室内的移动清洁机器人,主要任务是能够自主清扫房间,因此应该具备以下功能:
  
(1)能正确判断机器人所处的房间和在房间中所处的方位;
(2)能正确检测出房间内的墙壁、家具等障碍物;
(3)在游历完所有房间完成清扫任务后能自主回到出发点,关机。

为了防止机器人在工作时出现堵转现象,并且能自由进入一些家具比如沙发、桌子等的底下,吸尘机器人不能太高,外形采用半圆柱形。底盘由四个轮子共同支撑,其中左右两侧为驱动轮,分别由两个微型直流电机直接驱动,前后两个万向轮起到支撑和导向的作用。采用碰撞、红外传感器、超声波等组成多传感器系统。在机器人的上方装有红外接收传感器,底盘边缘均匀分布装有接近传感器,用来检测障碍物;在机器人的前方装有碰撞传感器;前方和左右装有超声波测距传感器,用来检测周围环境。

总体框架设计如图1所示。

基于ARM处理器的机器人硬件设计

2、硬件主体设计
  
硬件系统主要由ARM Cortex-M3处理器、传感器模块、电机驱动模块、人机交互模块、无线遥控发射模块组成。
  
2.1 ARM Cortex-M3处理
  
机器人控制系统的主要任务是根据传感器和编码器等反馈回来的数据,进行清扫路径规划,控制清扫、吸尘机构,完成各种控制动作。设计合适的人机接口,在LCD上显示机器人状态和运行时间。因此,机器人控制系统包括传感器模块,电机驱动模块,红外遥控接收模块、LED指示灯和液晶显示模块。采用ARM Cortex-M3处理器作为机器人控制系统的核心,主要是低成本、小管脚数和低功耗,并且具有极高的运算能力和极强的中断响应能力,工作电流仅为50 mA.
  
2.2电机模块
  
分成小电机驱动电路和两路大功率驱动板,包括用于行走的两个小直流电机和用于吸尘的大功率无刷直流电机、扫地的直流滚刷电机、扫边角的直流边刷电机。因为电机分别决定机器人的行走路径和吸尘功率,所以设计了专门的驱动板,如图2所示。行走模块的设计对吸尘机器人避障规划有着至关重要的作用,我们将吸尘机器人设计成一个闭环控制,主要包括驱动电路和光电编码反馈电路。光电编码反馈电路通过计算反馈回来的脉冲数量和相位而得到当前的电机速度。芯片最高可以驱动25 V的电机,吸尘机器人里行走电机的工作电压为24 V,芯片的电压为5 V,芯片输出的PWM波转化成大电压PWM波控制电机。其极限参数如表1所示。
  

基于ARM处理器的机器人硬件设计
基于ARM处理器的机器人硬件设计

  
2.3传感器模块
  
主要包括3部分:用于测量和感知障碍物的超声模块、红外和碰撞传感器,用于状态检测的传感器(检测电池电量、尘桶、电机堵转悬空)。传感器模块使机器人对周围环境做出正确判断,为顺利完成任务提供智能决策。
  
(1)超声波测距传感器模块
  
室内吸尘机器人由于工作环境的原因,必须具备检测各种大小、高低、颜色的障碍物,超声波是一种非接触式的检测技术,在空气中传播不受光线、烟雾、电磁场等外界因素的干扰,与红外传感器相比,超声传感器感应距离更远,可靠性高,且成本低。因此,使用高精度的超声波测距系统可以有效地完成障碍物的检测。
  
本文选用的是US-100超声波测距模块可实现0~4.5 m的非接触测距功能,拥有2.4~5.5 V的宽电压输入范围,静态功耗低于2 mA,自带温度传感器对测距结果进行校正,同时具有GPIO,串口等多种通信方式,工作稳定可靠。在机器人的前后各安装两个超声波传感器,处理器产生40 kHz的脉冲经I/O口输出,再经过与非门以及三极管放大形成极性相反的两路脉冲输入超声波发射头的两个引脚,探头便可发出一连串40 kHz的超声波,遇障碍物后返回给接收电路,处理器同时控制门电路,以实现发射波的间断如图3所示。超声波接收端通过压电转换的原理,把经障碍物反射回的信号转换为电信号经过低噪声放大和带通滤波,再比较产生中断给处理器进行时间测量,从而做出障碍物的距离判断,如图4所示。
  
基于ARM处理器的机器人硬件设计
基于ARM处理器的机器人硬件设计

  
(2)红外和碰撞传感器模块
  
本吸尘机器人在工作时对于远距离障碍物主要利用超声波测距,但是超声波对近距离障碍物不敏感,所以增设红外模块进行近距离检测,根据能量反射法设计红外测量模块。机器人前后安装两组红外传感器,每组由多达14组红外发射接收管组成,在机器人的上面和底盘各安装14个,每上位和下位的2个红外发射和接收管并联并且指向同一个方向构成一组,每一组电路可分为高频脉冲信号产生、红外发射调节与控制、红外发射驱动、红外接收等几个部分。通过38 kHz晶振和非门电路得到一个38 kHz的调制脉冲信号;利用三极管驱动红外发射管(TSAL6200)的发射。发射管发出的红外光经物体反射后被红外接收模块接收,通过接收头(HS0038B)内部自带的集成电路处理后返回一个数字信号,输入到微控制器的I/O口,如图5所示。
  
基于ARM处理器的机器人硬件设计

接收头如果接收到38 kHz的红外脉冲就会返回输出低电平,否则就会输出高电平。通过对I/O口的检测,便可以判断物体的有无。这样一共可以检测14个方向,覆盖360°范围。机器人对前后的近距离障碍物都能检测,前进后退都能工作,这种由2个红外接收管组成测障传感器有效距离接近2 m,并且还能够在球非常近的范围内(10 cm内)读取障碍物距离结果(没有溢出)。

在机器人的左前、左后、右前、右后4个方位安装四个碰撞开关(常开),通过采集模拟口上电压值的变化,判断出其中的一个或几个碰撞开关闭合,从而检测出哪个方向有碰撞发生。

2.4人机交互模块

(1)液晶显示和键盘输入:两者配合使用可以设置机器人各种参数,如自主启动、设置工作时间等。
(2)无线遥控模块:红外遥控使机器人的使用更加方便简单,发射距离超过10 m,能满足需要。
  
3、结语
  
通过这样的硬件设计,清洁机器人控制系统,既能满足良好的实用性,还降低了成本,工作稳定可靠。机器人传感器模块能精确定位障碍物,通过软件策略能实现良好的避障。对将来家用服务机器人的研究与开发有着重要现实意义。

来源: 中电网

围观 352

一、存储器格式(字对齐)

Arm体系结构将存储器看做是从零地址开始的字节的线性组合。从零字节到三字节放置第一个存储的字(32位)数据,从第四个字节到第七个字节放置第二个存储的字数据,一次排列。作为32位的微处理器,arm体系结构所支持的最大寻址空间为4GB。

存储器格式

1、大端格式:高字节在低地址,低字节在高地址;
2、小端格式:高字节在高地址,低字节在低地址。

指令长度

Arm微处理器的指令长度是32位的,也可以为16位(thumb状态下)。Arm微处理器中支持字节(8位),半字(16位),字(32位)三种数据类型,其中,字需要4字节对齐,半字需要2字节对齐。

注:所谓的指令长度是一条完整的指令的长度,而不是单纯的mov这3个字母长度。

二、ARM体系的CPU有两种工作状态

1、ARM状态:处理器执行32位的字对齐的ARM指令;
2、Thumb状态:处理器执行16位的、半字对齐的Thumb指令。

在程序运行的过程中,可以在两种状态之间进行相应的转换。处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。

CPU上电处于ARM状态。

三、ARM体系的CPU有以下7种工作模式

1、用户模式(Usr):用于正常执行程序;
2、快速中断模式(FIQ):用于高速数据传输;
3、外部中断模式(IRQ):用于通常的中断处理;
4、管理模式(svc):操作系统使用的保护模式;
5、数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储以及存储保护;
6、系统模式(sys):运行具有特权的操作系统任务;
7、未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件。

CPU的模式可以简单的理解为当前CPU的工作状态,比如:当前操作系统正在执行用户程序,那么当前CPU工作在用户模式,这时网卡上有数据到达,产生中断信号,CPU自动切换到一般中断模式下处理网卡数据(普通应用程序没有权限直接访问硬件),处理完网卡数据,返回到用户模式下继续执行用户程序。

特权模式

除用户模式外,其它模式均为特权模式(Privileged Modes)。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。

异常模式

特权模式中除系统(system)模式之外的其他5种模式又统称为异常模式。它们除了可以通过在特权下的程序切换进入外,也可以由特定的异常进入。比如硬件产生中断信号进入中断异常模式,读取没有权限数据进入中止异常模式,执行未定义指令时进入未定义指令中止异常模式。其中管理模式也称为超级用户模式,是为操作系统提供软中断的特有模式,正是由于有了软中断,用户程序才可以通过系统调用切换到管理模式。

(1)用户模式

用户模式是用户程序的工作模式,它运行在操作系统的用户态,它没有权限去操作其它硬件资源,只能执行处理自己的数据,也不能切换到其它模式下,要想访问硬件资源或切换到其它模式只能通过软中断或产生异常。

(2)系统模式

系统模式是特权模式,不受用户模式的限制。用户模式和系统模式共用一套寄存器,操作系统在该模式下可以方便的访问用户模式的寄存器,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。

(3)一般中断模式

一般中断模式也叫普通中断模式,用于处理一般的中断请求,通常在硬件产生中断信号之后自动进入该模式,该模式为特权模式,可以自由访问系统硬件资源。

(4)快速中断模式

快速中断模式是相对一般中断模式而言的,它是用来处理对时间要求比较紧急的中断请求,主要用于高速数据传输及通道处理中。

(5)管理模式

管理模式是CPU上电后默认模式,因此在该模式下主要用来做系统的初始化,软中断处理也在该模式下,当用户模式下的用户程序请求使用硬件资源时通过软件中断进入该模式。

(6)终止模式

中止模式用于支持虚拟内存或存储器保护,当用户程序访问非法地址,没有权限读取的内存地址时,会进入该模式,Linux下编程时经常出现的segment fault通常都是在该模式下抛出返回的。

(7)未定义模式

未定义模式用于支持硬件协处理器的软件仿真,CPU在指令的译码阶段不能识别该指令操作时,会进入未定义模式。

转自: 嵌入式资讯精选

围观 450
订阅 RSS - ARM处理器