ioremap 函数映射操作已知的物理地址(寄存器、端口、IO)

NAME
ioremap - map bus memory into CPU space
SYNOPSIS

  void __iomem * ioremap  (unsigned long  offset, unsigned long size);
  • 1
  • 2

ARGUMENTS

offset
bus address of the memory

size
size of the resource to map

DESCRIPTION

ioremap performs a platform specific sequence of operations to make bus memory CPU accessible via the readb/readw/readl/writeb/ writew/writel functions and the other mmio helpers. The returned address is not guaranteed to be usable directly as a virtual address.
  • 1
  • 2

ioremap 函数来映射到内核地址空间,然后修改虚拟地址空间达到控制寄存器的状态。
我用如下方法操作一个地址为0x56000020的端口
第一种:

unsigned long port_addr;
(void *)(port_addr) = ioremap(0x56000020,0x8);
*(volatile unsigned int *)(port_addr) |= 0x00008000;
  • 1
  • 2
  • 3

编译时候出现警告warning,左值有问题,建议使用第二种。
第二种:

volatile unsigned int *port_addr = ioremap(0x56000020,0x8);
*port_addr |= 0x00008000;
  • 1
  • 2
#define rGPACON (*(volatile unsigned *)(ioremap(GPACON,0x8)))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值