urshine 发表于 2013-03-22 10:14

驱动中寄存器的操作

各位大哥大姐好:小弟最近新学嵌入式linux驱动编程,在对外设进行编程的时候有一个疑问,麻烦各位高手能解答一下,网上不知道怎么找相关的问题,也就没度娘谷歌到准确答案。

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

urshine 发表于 2013-03-22 10:16

哦,对了,是不是操作寄存器的话一般不用read或者write函数呢?调用ioctl函数是不是操作寄存器更方便呢?

ruigal 发表于 2013-03-22 12:34

不明白你是怎么操作的,我的做法是,查datasheet, 得到实际的绝对物理地址,再用ioremap,映射为虚拟地址,直接对这个地址指针读写就行了.

urshine 发表于 2013-03-22 13:15

我的意思是应用层的read传递参数不是只有:文件标识符、buf和读取字节数count嘛,那我外设有好几个寄存器,我想读取其中一个寄存器的值,那用read应该如何传递参数呢?这个参数又是如何传递到驱动中的read函数的呢?回复 3# ruigal


   

javon123456 发表于 2013-03-22 15:00

如果要用read访问,需要你的驱动程序建立设备文件,用lseek确定偏移,用read读取相应的内容,驱动中需要像3楼中说的那样具体实现。

urshine 发表于 2013-03-25 14:26

你这样讲我有点明白了,今天看了下ioctl,感觉之前还不是很理解。谢谢指点!javon123456 发表于 2013-03-22 15:00 static/image/common/back.gif
如果要用read访问,需要你的驱动程序建立设备文件,用lseek确定偏移,用read读取相应的内容,驱动中需要像3 ...
页: [1]
查看完整版本: 驱动中寄存器的操作