Gpio Q&A
Q1:Userspace下如何控制GPIO电平?
可使用下述三种方式。
-
使用echo命令控制IO,示例,控制GPIO4
echo 4 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio4/direction echo 1 > /sys/class/gpio/gpio4/value //拉高 echo 0 > /sys/class/gpio/gpio4/value //拉低
-
使用riu_w写寄存器控制电平,此方法需要查看GPIO_Mapping_Table,同样以GPIO4举例。
查看
kernel/drivers/sstar/include/infinity2m/gpio.h
可知GPIO1对应的是PAD_GPIO4,查看GPIO_Mapping_Table可知PAD_GPIO4对应的RIU地址为103C,8BIT偏移地址为0x08。配置为Output、DRV>4mA,当OUT=low时,Reg value = 0x00;当OUT= high时,Reg value = 0x11。在
kernel/drivers/sstar/gpio/infinity2m/gpio_table.c
文件中也有gpio mode相关寄存器配置说明。由于Userspace下RIU的偏移地址是按16BIT计算,所以PAD_GPIO4的reg地址为0x103C04。
./riu_w 0x103C 0x04 0x00 //拉低 ./riu_w 0x103C 0x04 0x11 //拉高
-
使用mmap映射物理地址到虚拟地址,通过访问虚拟地址访问物理地址。方式2中riu_w的代码实现即是此方式。代码实现:reg_rw.c
...