LDD3学习笔记(12):与硬件通讯

简介:  #include void barrier(void)这个"软件"内存屏蔽要求编译器对待所有内存是跨这个指令而非易失的.#include void rmb(void);void read_barrier_depends(void);void wmb(void);void mb(void);硬件内存屏障.
  #include <linux/kernel.h>

void barrier(void)

这个"软件"内存屏蔽要求编译器对待所有内存是跨这个指令而非易失的.

#include <asm/system.h>

void rmb(void);

void read_barrier_depends(void);

void wmb(void);

void mb(void);

硬件内存屏障它们请求 CPU(和编译器)来检查所有的跨这个指令的内存读或都有.

#include <asm/io.h>

unsigned inb(unsigned port);

void outb(unsigned char byte, unsigned port);

unsigned inw(unsigned port);

void outw(unsigned short word, unsigned port);

unsigned inl(unsigned port);

void outl(unsigned doubleword, unsigned port);

用来读和写 I/O 端口的函数它们还可以被用户空间程序调用如果它们有正当的权限来存

取端口.

unsigned inb_p(unsigned port);

如果在一次 I/O 操作后需要一个小延时你可以使用在前一项中介绍的这些函数的 个暂停

对应部分这些暂停函数有以 _p 结尾的名子.

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);

这些"字串函数"被优化为传送数据从一个输入端口到一个内存区或者其他的方式这些传送通过读或写到同一端口 count 次来完成.

#include <linux/ioport.h>

struct resource *request_region(unsigned long start, unsigned long len, char *name);

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

int check_region(unsigned long start, unsigned long len);

I/O 端口的资源分配器这个检查函数成功返回 并且在错误时小于 0.

struct resource *request_mem_region(unsigned long start, unsigned long len, char *name);

void release_mem_region(unsigned long start, unsigned long len);

int check_mem_region(unsigned long start, unsigned long len);

为内存区处理资源分配的函数

#include <asm/io.h>

void *ioremap(unsigned long phys_addr, unsigned long size);

void *ioremap_nocache(unsigned long phys_addr, unsigned long size);

void iounmap(void *virt_addr);

ioremap 重映射一个物理地址范围到处理器的虚拟地址空间使它对内核可用. iounmap 释放

映射当不再需要它时.

#include <asm/io.h>

unsigned int ioread8(void *addr);

unsigned int ioread16(void *addr);

unsigned int ioread32(void *addr);

void iowrite8(u8 value, void *addr);

void iowrite16(u16 value, void *addr);

void iowrite32(u32 value, void *addr);

用来使用 I/O 内存的存取者函数.

void ioread8_rep(void *addr, void *buf, unsigned long count);

void ioread16_rep(void *addr, void *buf, unsigned long count);

void ioread32_rep(void *addr, void *buf, unsigned long count);

void iowrite8_rep(void *addr, const void *buf, unsigned long count);

void iowrite16_rep(void *addr, const void *buf, unsigned long count);

void iowrite32_rep(void *addr, const void *buf, unsigned long count);

I/O 内存原语的"重复"版本.

unsigned readb(address);

unsigned readw(address);

unsigned readl(address);

void writeb(unsigned value, address);

void writew(unsigned value, address);

void writel(unsigned value, address);

memset_io(address, value, count);

memcpy_fromio(dest, source, nbytes);

memcpy_toio(dest, source, nbytes);

旧的类型不安全的存取 I/O 内存的函数.

void *ioport_map(unsigned long port, unsigned int count);

void ioport_unmap(void *addr);

一个想对待 I/O 端口如同它们是 I/O 内存的驱动作者可以传递它们的端口给 ioport_map. 

这个映射应当在不需要的时候恢复使用 ioport_unmap )

目录
相关文章
|
6月前
|
传感器 芯片
嵌入式通信协议全解析:SPI、I²C、UART详解(附带面试题)
通信是指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递。从广义上来说,通信是指需要信息的双方或多方在不违背各自意愿的情况下采用任意方法、任意媒质,将信息从某方准确安全地传送到另方。在出现电波传递通信后,通信被单一解释为信息的传递,是指由一地向另一地进行信息的传输与交换,其目的是传输消息。通信方式包括利用“电”来传递消息的电信,这种通信具有迅速、准确、可靠等特点,且几乎不受时间、地点、空间、距离的限制,因而得到了飞速发展和广泛应用。
1281 0
|
6月前
|
数据采集 网络协议 数据处理
LabVIEW与Arm控制器之间的通讯
LabVIEW与Arm控制器之间的通讯
49 0
|
8月前
|
传感器 监控 芯片
嵌入式系统中MCU与SoC通信方式的选择与应用
嵌入式系统中MCU与SoC通信方式的选择与应用
277 3
|
数据安全/隐私保护
MicroPython 玩转硬件系列5:WIFI实验
MicroPython 玩转硬件系列5:WIFI实验
|
JavaScript Linux Python
【Matter】如何在Linux平台下测试Matter应用级通信(虚拟设备)
我们使用chip tool结合生成的QR码进行调试,重新打开一个终端,使用默认的chip tool工具(记住不是之前构建应用程序生成的chip tool),通过QR码可以快捷迅速地将虚拟设备添加到网络中,我们使用chip tool对设备进行调试
631 0
|
数据采集 自然语言处理 网络协议
Powerlink协议在嵌入式linux上的移植和主从站通信(电脑和linux板通信实验)
Powerlink协议在嵌入式linux上的移植和主从站通信(电脑和linux板通信实验)
|
网络协议 测试技术 芯片
基于ZYNQ+DSP平台Zynq7035/45 FPGA高速串行接口的千兆以太网UDP例程设计和使用说明
Xilinx XC7Z035/45-2FFG676I PL端高速串行接口的千兆以太网UDP例程设计和使用说明
基于ZYNQ+DSP平台Zynq7035/45 FPGA高速串行接口的千兆以太网UDP例程设计和使用说明
|
传感器 定位技术 数据处理
ARM裸板开发——UART通信方式及使用(一)
ARM裸板开发——UART通信方式及使用
304 0
ARM裸板开发——UART通信方式及使用(一)
|
网络协议 C语言 Perl
西门子S7-200 SMART硬件设备如何组态?通信如何组态,通信参数如何设置?
本篇我们来讲一下西门子S7-200 SMART硬件设备如何组态以及通信参数如何设置。
西门子S7-200 SMART硬件设备如何组态?通信如何组态,通信参数如何设置?
|
缓存 芯片
ARM裸板开发——UART通信方式及使用(二)
ARM裸板开发——UART通信方式及使用
261 0

热门文章

最新文章