ARM学习笔记(七)--存储器映射的I/O
来源:互联网 发布:windows的logo 编辑:程序博客网 时间:2024/04/28 14:37
存储器映射的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 的数据访问
一个指令序列在执行时会在不同的点访问数据存储器,产生装载和保存访问的时序。如
果这些装载和保存访问的是正常的存储器位置,那么在它们在访问相同的存储器位置时只是
执行交互操作。结果,对不同存储器位置的保存和装载可以按照不同于指令的顺序执行,但
不会改变最终的结果。这种改变存储器访问顺序的自由可被存储器系统用来提高性能(例如
通过使用高速缓存和写缓冲区)。
此外,对同一存储器位置的访问还拥有其它可用于提升性能的特性,其中包括: