每日一學GPIO的使用
SSD201 和 SSD202 的 GPIOnum 如下表:
uboot 使用 GPIO
- 使用命令列
# gpio output 12 0 //將PAD_GPIO12輸出低電平# gpio input 10 //將PAD_GPIO10設定為輸入# gpio get 10 //獲取PAD_GPIO10的輸入電平# gpio toggle 12 //比如前面PAD_GPIO12輸出了低電平,則執行次命令后PAD_GPIO12輸出高電平
使用API
設定GPIO為輸入模式:
void MDrv_GPIO_Pad_Odn(MS_GPIO_NUM u32IndexGPIO);
獲取GPIO的輸入電平:
U8 MDrv_GPIO_Pad_Read(MS_GPIO_NUM u32IndexGPIO);
設定GPIO為輸出模式:
void MDrv_GPIO_Pad_Oen(MS_GPIO_NUM u32IndexGPIO);
輸出高電平:
void MDrv_GPIO_Pull_High(MS_GPIO_NUM u32IndexGPIO);
輸出低電平:
void MDrv_GPIO_Pull_Low(MS_GPIO_NUM u32IndexGPIO);
drivers 使用 GPIO
先在infinity2m-ssc011a-s01a-padmux-xxx.dtsi中設定為GPIO模式(非其他復用模式):
<PAD_GPIO1 PINMUX_FOR_GPIO_MODE MDRV_PUSE_I2C1_DEV_RESET >,
申請GPIO:
int gpio_request(unsigned gpio,constchar* label);
設定GPIO為輸入模式:
int gpio_direction_input(unsigned gpio);
設定GPIO為輸出模式:
int gpio_direction_output(unsigned gpio,int value);
獲取該GPIO的輸入電平:
int gpio_get_value(unsigned gpio);
設定該GPIO的輸出電平:
void gpio_set_value(unsigned gpio,int value);
userspace 操作 GPIO
userspace即系統啟動后,
首先也需要在 infinity2m-ssc011a-s01a-padmux-xxx.dtsi 中設定為GPIO模式(參考drivers使用GPIO),并且加載GPIO sysfs interface模塊:
# ARCH=arm make menuconfig
這樣配置,系統啟動后我們將看到/sys/class/gpio目錄,在這個目錄中可以操作GPIO的輸入輸出,
輸出模式:
# echo 12 > /sys/class/gpio/export //申請GPIO# echo out > /sys/class/gpio/gpio12/direction //設定為輸出模式# echo 1 > /sys/class/gpio/gpio12/value //輸出高電平# echo 0 > /sys/class/gpio/gpio12/value //輸出低電平# echo 12 > /sys/class/gpio/unexport //卸載該GPIO
輸入模式:
# echo 12 > /sys/class/gpio/export //申請GPIO# echo in > /sys/class/gpio/gpio12/direction //設定為輸出模式# cat /sys/class/gpio/gpio12/value //獲取輸入電平
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298724.html
標籤:其他
