Linux芯片总结
- 格式:docx
- 大小:18.66 KB
- 文档页数:2
基于Cortex-M3内核的STM32嵌入式处理器的学习报告
一、Cortex-M3内核概述:
Cortex‐M3是一个32位处理器内核,它内部的数据路径是32位的,寄存器是32位的,存储器接口也是32位的。CM3采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。Cortex-M3采用ARMv7-M构架,不仅支持Thumb-2指令集,而且拥有很多新特性。较之ARM7-TDMI,Cortex-M3 拥有更强劲的性能、更高的代码密度、位带操作、可嵌套中断、低成本、低功耗等众多优势。
CM3提供一个可选的MPU,而且在需要的情况下也可以使用外部的cache;另外在CM3中,Both小端模式和大端模式都是支持的。CM3内部还附赠了好多调试组件,用于在硬件水平上支持调试操作,如指令断点,数据观察点等。另外,它为支持更高级的调试,还有其它可选组件,包括指令跟踪和多种类型的调试接口。
二、Cortex-M3内核配置
ARMCortex-M3采用哈佛结构,并选择了适合于微控制器应用的三级流水线,但增加了分支预测功能,可以预取分支目标地址的指令,使分支延迟减少到一个时钟周期。针对业界对ARM处理器中断响应的问题,Cortex-M3首次在内核上集成了嵌套向量中断控制器(NVIC)。Cortex-M3的中断延迟只有12个时钟周期(ARM7需要24-42个周期);Cortex-M3还使用尾链技术,使得背靠背中断的响应只需要6个时钟周期(ARM7需要大于30个周期)。Cortex-M3采用了基于栈的异常模式,使得芯片初始化的封装更为简单。
Cortex-M3加入了类似于8位处理器的内核低功耗模式,支持3种功耗管理模式:通过一条指令立即睡眠、异常/中断退出时睡眠和深度睡眠,使整个芯片的功耗控制更为有效。
CM3 拥有通用寄存器R0‐R15以及一些特殊功能寄存器。R0‐R12是最通用的,但是绝大多数的16位指令只能使用R0‐R7(低组寄存器),而32位的 Thumb ‐2指令则可以访问所有通用寄存器,特殊功能寄存器有预定义的功能,而且必须通过专用的指令来访问。Cortex‐M3中的特殊功能寄存器包括:程序状态寄存器组(PSRs或xPSR)、中断屏蔽寄存器组、控制寄存器(CONTROL)。
三、Cortex-M3的性能与特点
①Cortex-M3的许多指令都是单周期的——包括乘法相关指令。并且从整
体性能上看,Cortex-M3基于ARMv7-M架构优于绝大多数的内核;
②支持Thumb-2指令集,为编程带来了更多的灵活性,Cortex-M3的代码
密度更高,对存储器的需求更少;
③Cortex-M3有先进的中断处理功能,其内建的嵌套向量中断控制器支持
多达240条外部中断输入,向量化的中断功能剧烈地缩短了中断延迟,
因为不需要软件去判断中断源,而且中断的嵌套也是在硬件水平上实现
的,不需要软件代码来实现;
④Cortex-M3需要的逻辑门数少,所以先天就适合低功耗要求的应用,CM3
的设计是全静态的、同步的、可综合的,所以任何低功耗的或是标准的
半导体工艺均可放心使用;
⑤Cortex-M3支持传统的JTAG基础上,还支持更新更好的串行线调试接口;
四、基于Cortex-M3的STM32F103ZET6嵌入式开发板
国内Cortex-M3市场,ST(意法半导体)公司的STM32无疑是最大赢家,作为 Cortex-M3内核最先进的两个公司之一,ST 无论是在市场占有率,还是在技术支持方面,都是远超其他对手。在Cortex-M3芯片的选择上,STM32无疑是我们学习使用Cortex-M3的首选开发板。
作为初学者来学习使用Cortex-M3内核其实会很困难,而通过运用功能强大的集成开发板stm32,则能够加深我们对内核运用的了解;每一套开发板都会配套一个固件库,这个固件库函数可以是我们不完全了解Cortex-M3内核寄存器的工作方式前提下,通过调用库函数实现对寄存器的控制,而且寄存器版本的STM32开发指南能够帮助我们更进一步认识寄存器的工作。
STM32F103ZET6属于中低端的32位ARM微控制器,有512K的片内Flash存储、64K字节的SRAM等高性价比的配置。作为一款常用的增强型系列微控制器,STM32F103ZET6适用于电力电子系统方面、电机驱动、应用控制、医疗、手持设备、PC游戏外设等。
我之前参加的一位工程学院研究生导师的课题项目----“风送式智能喷雾技术”就利用到STM32F103ZET6作为嵌入式控制器。我首先将STM32F103ZET6
的模块化功能与项目要求匹配之后,再集成运用到这个项目实际当中;比如驱动蠕动泵,我就使用到pwm输出模块,之后我就学习STM32F的有关库函数以及相应定时器、GPIO的配置;又比如比例阀的控制开度运用到A/D转换模块,我除了知道对应的库函数参数设置,同时也要学习了解ADC控制寄存器,每个要转换的通道以及转换速率的计算;这样保证了在接触嵌入式处理器的学习之中不至于生活实际脱节,又能很好去了解内核的寄存器工作情况。