linux内核 寄存器读写函数writel readl

1、writel函数

原型

#include <linux/io.h>
void writel(unsigned char data , unsigned int addr ) 

参数:
data:要写入的一个字节的数据.
addr:32位I/O 地址。

功能:
  往内存映射的 I/O 空间上写数据,wirtel() I/O 上写入 32 位数据 (4字节)。

2、readl函数

原型:

#include <linux/io.h>
unsigned char readl(unsigned int addr )

功能:
readl() 从内存映射的 I/O 空间读取数据,readl 从 I/O 读取 32 位数据 ( 4 字节 )。

参数:
addr :I/O 地址。

返回值 :
从 I/O 空间读取的数值。

unsigned char readb (unsigned int addr )   //读1字节
unsigned short readw (unsigned int addr )   //读2字节
unsigned int readl (unsigned int addr )    //读四字节
 
 
void writeb (unsigned char data, unsigned short addr)  //写1字节
void writew (unsigned short data, unsigned short addr)  //写2字节
void writel (unsigned int data, unsigned short addr )  //写4字节
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Wind River 中,可以通过 I/O 端口和内存映射 I/O 两种方式进行寄存器读写操作。 1. I/O 端口读写 I/O 端口读写是通过访问特定的 I/O 端口进行的,可以使用 `inb`、`inw`、`inl`、`outb`、`outw`、`outl` 等函数进行读写操作。例如,要读取 I/O 端口号为 0x80 的寄存器的值,可以使用以下代码: ```c unsigned char val = inb(0x80); ``` 要将值写入 I/O 端口号为 0x80 的寄存器,可以使用以下代码: ```c outb(val, 0x80); ``` 2. 内存映射 I/O 读写 内存映射 I/O 读写是通过将 I/O 端口映射到内存地址空间进行的,可以使用 `ioremap`、`iounmap`、`readb`、`readw`、`readl`、`writeb`、`writew`、`writel` 等函数进行读写操作。例如,要读取地址为 0x6000 的内存映射 I/O 寄存器的值,可以使用以下代码: ```c volatile unsigned char *reg = (volatile unsigned char *)ioremap(0x6000, sizeof(unsigned char)); unsigned char val = readb(reg); ``` 要将值写入地址为 0x6000 的内存映射 I/O 寄存器,可以使用以下代码: ```c volatile unsigned char *reg = (volatile unsigned char *)ioremap(0x6000, sizeof(unsigned char)); writeb(val, reg); ``` 需要注意的是,I/O 端口和内存映射 I/O 读写的方法在实现上有所不同,具体使用哪种方式需要根据硬件平台和操作系统进行选择。在使用 Wind River 进行寄存器读写操作时,应该根据具体情况选择合适的方法,并仔细阅读相关文档和参考资料,以确保正确实现功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值