免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2447 | 回复: 5
打印 上一主题 下一主题

[驱动] 驱动中寄存器的操作 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-22 10:14 |只看该作者 |倒序浏览
各位大哥大姐好:小弟最近新学嵌入式linux驱动编程,在对外设进行编程的时候有一个疑问,麻烦各位高手能解答一下,网上不知道怎么找相关的问题,也就没度娘谷歌到准确答案。

我在编写设备驱动的时候,是要读写设备的寄存器的,但是寄存器有一个偏移地址,我在read寄存器的时候,需要先发一个subaddress,然后再来receive data,而写寄存器的时候也是一样,先发一个subaddress再来write data。
但是read函数的话,一般我只操作其file指针和buf指针,这样我是如何传送偏移offset的呢?我咨询说可以使用loff_t *指针来当做偏移指针,那么我应用层又该如何传递这个偏移地址呢?因为应用层想读取数据的话也不会告诉设备要从哪个寄存器开始读吧?在下初学,好多问题也不是很懂,语言表述的也不是很清楚,麻烦各位轻拍,并给予指点,谢谢!

论坛徽章:
0
2 [报告]
发表于 2013-03-22 10:16 |只看该作者
哦,对了,是不是操作寄存器的话一般不用read或者write函数呢?调用ioctl函数是不是操作寄存器更方便呢?

论坛徽章:
0
3 [报告]
发表于 2013-03-22 12:34 |只看该作者
不明白你是怎么操作的,我的做法是,查datasheet, 得到实际的绝对物理地址,再用ioremap,映射为虚拟地址,直接对这个地址指针读写就行了.

论坛徽章:
0
4 [报告]
发表于 2013-03-22 13:15 |只看该作者
我的意思是应用层的read传递参数不是只有:文件标识符、buf和读取字节数count嘛,那我外设有好几个寄存器,我想读取其中一个寄存器的值,那用read应该如何传递参数呢?这个参数又是如何传递到驱动中的read函数的呢?回复 3# ruigal


   

论坛徽章:
0
5 [报告]
发表于 2013-03-22 15:00 |只看该作者
如果要用read访问,需要你的驱动程序建立设备文件,用lseek确定偏移,用read读取相应的内容,驱动中需要像3楼中说的那样具体实现。

论坛徽章:
0
6 [报告]
发表于 2013-03-25 14:26 |只看该作者
你这样讲我有点明白了,今天看了下ioctl,感觉之前还不是很理解。谢谢指点!
javon123456 发表于 2013-03-22 15:00
如果要用read访问,需要你的驱动程序建立设备文件,用lseek确定偏移,用read读取相应的内容,驱动中需要像3 ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP