第九章:与硬件通信

原创 2012年03月30日 14:32:08

I/0寄存器和常规内存

I/0寄存器和RAM最主要区别:I/O操作具有边际效应,而内存操作则没有。

使用I/O端口(I/O端口分配)

#include <linux/ioport.h>

struct resource *request_region(unsigned long first, unsigned long n, const char *name);

该函数告诉内核,我们要使用起始于firstn个端口。name是设备的名称。若返回非NULL值,则说明分配成功。

所有端口分配可从/proc/ioports中得到。

下函数释放某组不再使用的I/O端口:

void release_region(unsigned long start, unsigned long n);

下函数检查给定的I/O端口是否可用(不推荐使用):

int check_region(unsigned long first, unsigned long n);

使用I/O端口(操作I/O端口)

大多数硬件会把8位,16位以及32位的端口区分开来,因此,C语言必须调用不同的函数来访问大小不同的端口。

字节宽度(8位)读写端口

unsigned inb(unsigned port);

void outb(unsigned char byte, unsigned port);

字宽度(16位)读写端口

unsigned inw(unsigned port);

void outw(unsigned short word, unsigned port);

双字宽度(32位)读写端口

unsigned inl(unsigned port);

void outl(unsigned longword, unsigned port);

串操作I/O

void insb(unsigned port, void *addr, unsigned long count);

void outsb(unsigned port, void *addr, unsigned long count);

void insw(unsigned port, void *addr, unsigned long count);

void outsw(unsigned port, void *addr, unsigned long count);

void insl(unsigned port, void *addr, unsigned long count);

void outsl(unsigned port, void *addr, unsigned long count);

从内存地址addr开始连续读/count数目的字节,字,双字。只对单一端口port读取或写入数据。

需要注意的是:要明确知道字节序会造成相关的影响,而这些函数是不关心字节序的,必要时需要转换。

使用I/O内存(I/O内存的分配,映射,访问等详见书)

与硬件通信(第九章 )

1、I/O端口和I/O内存      I/O寄存器和常规内存      Linux提供了4个宏来解决由编译器和硬件重新排序引起的问题:      #include      void bar...
  • cnxxrj
  • cnxxrj
  • 2013年11月19日 13:39
  • 826

《Linux Device Drivers》 第九章 与硬件通信

每种外设都通过读写寄存器进行控制在硬件层,内存区域和I/O区域没有概念上的区别:它们都通过向地址总线和控制总线发送电平信号进行访问,再通过数据总线读写数据I/O寄存器和常规内存 I/O寄存器和RAM...
  • luopingfeng
  • luopingfeng
  • 2014年09月28日 09:24
  • 191513

51 单片机与PC 串口通信程序及硬件电路图

51 单片机与PC 串口通信程序及硬件电路图 2009-10-16 10:18 #include #define BUFFERLEGTH 10 //-------------...
  • opshres169
  • opshres169
  • 2016年06月28日 20:44
  • 952

“拿来主义”——怎样嗅探一个串口通信程序与硬件之间的通信(一)

前言这是最好的时代,也是最坏的时代,这是一个鼓励创新的时代,但是也是一个抄袭满地的时代。 事实上,不站在巨人的肩膀上,没有明确的社会分工,以人类有限的声明,科学永远无法进步。概述跑题太远哈哈哈,很多...
  • liujj05
  • liujj05
  • 2015年02月15日 16:21
  • 1270

深入理解计算机系统(第二版) 家庭作业 第九章

9.11 A.虚拟地址0x027c 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 ...
  • zhanyu1990
  • zhanyu1990
  • 2014年01月19日 13:26
  • 2624

手机访问智能硬件的三种模式

手机访问智能硬件的三种基本模式:B/S模式、C/S模式、云模式。
  • zoomdy
  • zoomdy
  • 2016年06月06日 13:55
  • 1227

思科CCNA第一学期第九章答案

1   将二进制数字 10111010 转换为等值的十六进制数字。请从下面选择正确的答案。 85 90 B...
  • u014253173
  • u014253173
  • 2015年01月02日 23:39
  • 3211

数据结构笔记整理第9章:数据结构规律类识点(1)

第9章 数据结构规律类识点本章内容本章主要总结了笔者在复习过程中遇到的规律性质并且易错的知识点,希望不仅对考研的童鞋有帮助,还可以为秋招的童鞋带来参考。...
  • lby0910
  • lby0910
  • 2016年06月08日 10:20
  • 369

线上服务器和本地服务器一个TCP通信及本地服务器对接硬件一个TCP备忘

本地服务器和云服务器的tcp通道,云上启动一个线程,while read循环阻塞监听本地服务器的返回内容,当有http的请求时候,加锁防止多个http请求同时发送请求数据导致数据错误,同时让while...
  • mapsong
  • mapsong
  • 2017年01月09日 11:22
  • 484

实现智能硬件与移动app后台的服务器架构选择

1.thinkPHP ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的...
  • li3007liuu
  • li3007liuu
  • 2016年09月03日 18:27
  • 2531
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第九章:与硬件通信
举报原因:
原因补充:

(最多只允许输入30个字)