GPIO Q&A
Q:Userspace下如何控制GPIO电平?
可使用下述三种方式。
-
使用echo命令控制IO,示例,控制GPIO1
echo 1 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio1/direction echo 1 > /sys/class/gpio/gpio1/value //拉高 echo 0 > /sys/class/gpio/gpio1/value //拉低
-
使用riu_w写寄存器控制电平,此方法需要查看GPIO_Mapping_Table,同样以GPIO1举例。
查看kernel/drivers/sstar/pioneer3/gpio.h可知GPIO1对应的是PAD_SR_IO01,查看GPIO_Mapping_Table可知PAD_SR_IO01对应的RIU地址为103E,8BIT偏移地址为0x02。配置为Output、LeakHi、DRV=1→8mA,当OUT=low时,Reg value = 0x58;当OUT= high时,Reg value = 0x5B。
由于Userspace下RIU的偏移地址是按16BIT计算,所以PAD_SR_IO01的reg地址为0x103E01。
./riu_w 0x103E 0x01 0x58 //拉低 ./riu_w 0x103E 0x01 0x5B //拉高
-
使用mmap映射物理地址到虚拟地址,通过访问虚拟地址访问物理地址。方式2中riu_w的代码实现即是此方式。
代码实现:reg_rw.c
...