我们再来看一下LPC2300 ARM的MAM工作模式.LPC2300系列ARM允许用户设置MAM的加速级别,使芯片应用于某些对功耗和可预见性有要求的场合.MAM定义了如下的三种工作模式:
从图中可以看出MAM功能会使系统耗费更多的能量,但预见性会提高.
MAM部分使能:
CPU顺序执行时所需要的代码由缓冲区提供,但是成像跳转后需要对Flash进行读操作.此外,若数据缓冲区中的数据可用,则从其中获取数据.但是,为了保证可预见性,同时也为了不增加功耗,MAM还是会虚拟一次对Flash的读操作.该模式下,CPU具有较好信号,较低的功耗,数据的可预见性也比较好.至于是如虚拟的,我目前还不清楚.
MAM完全使能:
CPU对需要的任何代码或数据,都会尝试先从喊出去中读取.如果存在,那么从缓冲区执行该代码或对该数据执行访问,否则对Flash执行读操作.该模式下,CPU具有最好的性能,但是系统的功耗身高,可预见性降低.
模式配置:
在复位后,MAM默认问禁止状态.用户可以随时将MAM打开或关闭.通常,我们都会把加速设置为完全使能,以使程序最高速度运行.而运行某些要求更坚强定时的代码时,我们可以关闭或部分关闭使能MAM,以较慢但可预测的速度运行代码.
MAM的寄存器只有两个,分别是MAM控制寄存器(MAMCR),MAM定时寄存器(MAMTIM):
.MAMCR:用于配置MAM的操作模式
.MAMTIM:用于配置访问片内Flash存储器的CCLK周期数.
只须用好这两个寄存器即可完成对MAM的各项操作.
在改变MAM定时值是须先光MAM.
然后将新值写入MAMTIM.
最后将需要的模式的对应值写入MAMCR,打开MAM.
在编程和擦除操作过程中不运行访问Flash存储器,若CPU发出访问Flash请求,MAM会强制CPU等待.此时,用户许注意看门狗溢出的可能.
为了防止从Flash存储器中读取无效的数据,Flash编程或擦除操作开始后MAM将不缓冲任何数据.所以,Flash操作结束后,任何Flash读操作都将启动新的取指操作.
Flash编程不受存储器加上模块的控制,而是作为一个独立的功能另行处理.
—————————————————————转自Eagle的BLOG, http://blog.sina.com.cn/eaglechen1968