linux系统编写驱动时,怎样用C语言去访问硬件

linux系统编写驱动时,怎样用C语言去访问硬件,第1张

在linux系统上编写驱动要访问硬件,首先要地址映射,因为有了linux系统后程序中所使用是地址都是虚拟地址,所以需要经过ioremap重映射后得到需要的虚拟地址,然后用ioread32和iowrite32就可以进行读写 *** 作了。如下是led的 *** 作:

int init_led_device(struct led_dev_t *l)

{

l->phys = 0x7F008000

l->virt = ioremap(l->phys, SZ_4K)

l->gpmcon = l->virt + 0x820

l->gpmdat = l->virt + 0x824

return 0

}

void led_config(struct led_dev_t *l)

{

l->reg = ioread32(l->gpmcon)

l->reg &= ~(0xf <<0)

l->reg |= (0x1 <<0)

iowrite32(l->reg, l->gpmcon)

}

如果是访问芯片自带的功能模块的话,可以直接对寄存器进行 *** 作,或者方便点使用对应cpu的固件,调用接口来实现 *** 作各个模块。

如果是访问外设的话需要先和外设建立通讯(iic,spi,uart等,这又包含使用芯片自带的模块化功能还是使用io口模拟),然后按照外设手册进行相应的 *** 作配置。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7412299.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-05
下一篇2023-04-05

发表评论

登录后才能评论

评论列表(0条)

    保存