`
javababy1
  • 浏览: 1161783 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ARM学习笔记(七)--存储器映射的I/O

 
阅读更多

储器映射的I/O

基于ARM内核的芯片具有许多的外设,这些外设访问的标准方法是使用存储器映射的I/O,为外设的每个寄存器都分配一个地址。通常,从这些地址装载数据用于读入,向这些地址保存数据用于输出。有些地址的装载和保存用于外设的控制功能,而不是输入或输出功能。

注意:存储器映射的I/O位置的操作不同于正常的存储器位置的操作。通常,存储器映射的I/O位置没有高速缓存和无缓冲区。

执行ARM 系统I/O 功能的标准方法是使用存储器映射的I/O。装载或保存I/O 值时,使

用提供给I/O 功能的特殊存储器地址。通常,从存储器映射的I/O 地址装载用于输入,而保

存到存储器映射的I/O 地址则用于输出。装载和保存都可用于执行控制功能,用于取代它们

正常的输入或输出功能。

存储器映射的I/O 位置的动作通常不同于正常的存储器位置的动作。例如,正常存储器

位置的两次连续装载每次都会返回相同的值,除非中间插入了保存的操作。对于存储器映射

的I/O 位置,第二次装载返回的值可以不同于第一次返回的值。因为第一次装载的副作用(例

如从缓冲区移走已装载的值)或是因为插入另一个存储器映射I/O 位置的装载和保存的副作

用。

这些区别主要影响高速缓存的使用和存储器系统的写缓冲区,具体信息请参考相关资

料。一般来说,存储器映射的I/O 位置通常标示为无高速缓存和无缓冲区,以避免对它们进

行访问的次数、类型、顺序或时序发生改变。

从存储器映射的I/O 取指

在 1.11.5 节中讲到,不同ARM 的实现(可以理解为不同的芯片)在存储器指令取指时

会有相当大的区别。因此强烈建议存储器映射的I/O 位置只用于数据的装载和保存,不用于

指令取指。任何依赖于从存储器映射I/O 位置取指的系统设计都可能难于移植到将来的ARM

实现。

对存储器映射I/O 的数据访问

一个指令序列在执行时会在不同的点访问数据存储器,产生装载和保存访问的时序。如

果这些装载和保存访问的是正常的存储器位置,那么在它们在访问相同的存储器位置时只是

执行交互操作。结果,对不同存储器位置的保存和装载可以按照不同于指令的顺序执行,但

不会改变最终的结果。这种改变存储器访问顺序的自由可被存储器系统用来提高性能(例如

通过使用高速缓存和写缓冲区)。

此外,对同一存储器位置的访问还拥有其它可用于提升性能的特性,其中包括:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics