1. 用request_mem_region函数和ioremap等得到控制寄存器的地址,然后用iowrite32函数控制该gpio
2. 用gpio_request 和 gpio_set_value函数来控制gpio引脚
请问:这两种方法有什么区别,分别适用什么场合?
6 个解决方案
#1
1 第一种方式需要知道IO的寄存器地址。把物理地址转换成虚拟地址后,直接对地址操作。 一般在批量GPIO寄存器操作时使用顺。
2 第二种方式一般放在设备驱动里使用,只要调用预先定义好的IO就行了,
个人理解。
2 第二种方式一般放在设备驱动里使用,只要调用预先定义好的IO就行了,
个人理解。
#2
都行,推荐使用后者,后者进行了封装,确保你每次只对一个gpio操作,而不会影响到别的gpio
#3
前者是比较底层的控制,在进行读写操作时,需要注意相应的bit位,而后者是封装好的接口,只需要将控制的GPIO ID传入即可。
#4
看你的目的,一般用后一种比较好。 前者过于底层。
#5
uboot里面操作gpio类似前者,内核里面多用后者。前者需要对照芯片参数对应各个位来进行操作。后者更简单
#6
建议尽可能用后者,这是linux推荐。
#1
1 第一种方式需要知道IO的寄存器地址。把物理地址转换成虚拟地址后,直接对地址操作。 一般在批量GPIO寄存器操作时使用顺。
2 第二种方式一般放在设备驱动里使用,只要调用预先定义好的IO就行了,
个人理解。
2 第二种方式一般放在设备驱动里使用,只要调用预先定义好的IO就行了,
个人理解。
#2
都行,推荐使用后者,后者进行了封装,确保你每次只对一个gpio操作,而不会影响到别的gpio
#3
前者是比较底层的控制,在进行读写操作时,需要注意相应的bit位,而后者是封装好的接口,只需要将控制的GPIO ID传入即可。
#4
看你的目的,一般用后一种比较好。 前者过于底层。
#5
uboot里面操作gpio类似前者,内核里面多用后者。前者需要对照芯片参数对应各个位来进行操作。后者更简单
#6
建议尽可能用后者,这是linux推荐。