第5章:存储器系统
1.存储器系统的功能概述
2.存储器映射
3.存储器的各种访问属性
4.缺省的存储器访问许可
5.位带操作
6.非对齐数据传输
7.互斥访问
8.端模式
5.1 存储系统功能概述
2.5存储器映射
Cortex-M3的内部拥有一个总线基础设施,专用于优化对这种存储器结构的使用。
处于最高地址的系统级存储区,是CM3用于藏“私房钱”的--包括中断控制器、MPU以及各种调试组件。所有这些设备均使用固定的地址(本书第5章讨论存储器系统)。通过把基础设施的地址定死,就至少在内核水平上,为应用程序的移植扫清了障碍。
2.6总线接口
Cortex-M3内部有若干个总线接口,以使CM3能同时取地址和访问内存。它们是:
1.指令存储区总线(两条)
2.系统总线
3.私有外设总线
有两条代码存储区总线负责对代码存储区的访问,分别是I-Code总线和D-Code总线。前者用于取指令,后者用于查表等操作,它们按最佳执行速度进行优化。
系统总线用于访问内存和外设,覆盖的区域包括SRAM,片上外设,片外RAM,片外扩展设备,以及系统级存储区的部分空间。
私有外设总线:负责一部分私有外设的访问,主要就是访问调试组件。它们也在系统级存储区。
2.7存储器保护单元(MPU)
2.8指令集
不少有趣和强大的指令为Cortex-M3注入了新鲜的青春血液,下面给出几个例子:
UBFX,BFI,BFC:位段提取,位段插入,位段清零。支持C位段,也简化了外设寄存器操作。
CLZ,RBIT:计算前导零指令和位反转指令。二者组合使用能实现一些特技。
UDIV,SDIV:无符号除法和带符号除法指令。
SEV,WFE,WFI:发送事件,等待事件以及等待中断指令。用于实现多处理器之间的任务同步,还可以进入不同的休眠状态。
MSR,MRS:通向禁地--访问特殊功能寄存器。
2.9中断和异常
ARMv7-M开创了一个全新的异常模型,CM3采用了它。
结果:CM3就有了256个预定义的异常类型。外部中断240,保留(4+1)个挡位。
问题1:片上外设在哪里???
问题2:所有被除能的fault,都将”上访“成硬fault???
虽然CM3是支持240个外中断,但具体使用了多少个是由芯片生产商决定。CM3还有一个NMI(不可屏蔽中断)输入引脚。当它有效时(assert),NMI服务例程会无条件执行。
2.9b 低功耗与高能效(r2p0 修订版)
2.10调试支持
Cortex-M3在内核水平上搭载了若干种调试相关的特性。最主要的就是程序执行控制,包括停机、单步执行、指令断点、数据观察点、寄存器和存储器访问、性能速写以及各种跟踪机制。
Cortex-M3的调试系统基于ARM最新的CoreSight架构。不同于以往的ARM处理器,内核本身不再含有JTAG接口。取而代之的,是CPU提供称为“调试访问接口(DAP)”的总线接口。通过这个总线接口,可以访问芯片的寄存器,也可以访问系统存储器,甚至是在内核运行的时候访问!!!对此总线接口的使用,是由一个调试端口(DP)设备完成的。DPs不属于CM3内核,但它们是在芯片的内部实现的。目前可用的DPs包括SWJ-DP(既支持传统的JTAG调试,也支持新的串行线调试协议),另一个SW-DP则去掉了对JTAG的支持。另外,也可以使用ARM CoreSight产品家族的JTAG-DP模块。这下就有3个DPs可以选了。芯片制造商可以从中选择一个,以提供具体的调试接口(通常都是选SWJ-DP)。
此外,CM3还能挂载一个所谓的“嵌入式跟踪单元(ETM)”。ETM可以不断地发出跟踪信息,这些信息通过一个被称为"跟踪端口接口单元(TPIU)"的模块而送到内核的外部,再再芯片外面使用一个“跟踪信息分析仪“,就可以把TIPU输出的”已执行指令信息”捕捉到,并且送到调试主机--也就是PC。
在Cortex-M3中,调试动作能由一系列的事件触发,包括断点,数据观察点,fault条件,或者是外部调试请求输入的信号。当调试事件发生时,Cortex-M3可能会停机。也可能会进入调试监视器异常handler。具体如何反应,则根据与调试相关寄存器的配置。
与调试相关的还有其它的绝活。现在要介绍的是“仪器化跟踪宏单元(ITM)”,它也有自已的办法把数据送往调试器。通过把数据写到ITM的寄存器中,调试器能够通过跟踪接口来收集这些数据,并且显示或者处理它。此法不但容易使用,而且比JTAG的输出速度更快。
所有这些调试组件都可以由DAP总线接口来控制,CM3内核提供DAP接口。此外,运行中的程序也能控制它们。所有的跟踪信息都能通过TPIU(跟踪端口接口单元!!!)来访问到。
2.1Cortex-M3结构!