DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 943|回复: 0
打印 上一主题 下一主题

[待整理] ARM体系结构之:I/O管理

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-10 07:33:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        2.4  I/O管理

        ARM系统完成I/O功能的标准方法是使用存储器映射I/O。这种方法使用特定的存储器地址。当从这些地址加载或向这些地址存储时,它们提供I/O功能。某些ARM系统也可能有直接存储器访问(DMA,Direct Memory Access)硬件。
         
        外围设备(如串行线控制器)中包含一些寄存器。在存储器映射系统中,这些寄存器就像特定地址的存储器一样。(在其他的系统组织中,I/O功能可能与存储器件有不同的寻址空间。)串行线控制器可能有以下5种寄存器。
         
        ① 发送数据寄存器(只写):写入这个位置的数据被送往串行线。
        ② 接受数据寄存器(只读):保存从串行线送来的数据。
        ③ 控制寄存器(读/写):设置数据速率,管理RTS(请求发送)和其他类似信号。
        ④ 中断使能寄存器(读/写):控制中断的硬件事件。
        ⑤ 状态寄存器(读/写):指示读数据是否有效、写缓存是否满等。
         
        要接受数据,必须用软件适当地设置器件。通常在接收到有效数据或检测到错误时产生一个中断。中断程序必须将数据复制到缓存器中并进行错误检测。
         
        应该注意的是,存储器映射外围寄存器的行为与存储器不同。连续两次读数据寄存器,即使对该寄存器没有写操作,其结果也很可能不同。而对真正存储器的读是幂等的(idempotent)(可多次重复读,结果一致)。对外围寄存器的读操作可能清除当前值,致使下一次读结果不同。这种寄存器称为读敏感(read-sensitive)的。
         
        当涉及读敏感寄存器时,编程必须小心。特别是不能将这种寄存器的数据复制到Cache存储器。
         
        在许多ARM系统中,不能在用户模式下访问I/O寄存器。要访问这些器件,只能通过监控调用(SWI)或通过使用这种调用的C库函数。
         
                                                                         
                       
                                                                        注意
                       
                                                                        在ARM编程中,通常将存储器的I/O区域标记为非Cache区(uncacheable),并绕过Cache访问。通常Cache与读敏感(read-sensitive)器件相互排斥。显示帧缓存器(DisplayFrame Buffers)也需要仔细考虑,通常也设为不可Cache的。
                       
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-13 14:47 , 耗时 0.089404 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表