本次測試針對gpio1進行,挑選了gp1[31],引腳的復用預設的就是gpio
還是老規矩,貼上driver.c,makefile,test.c:
dm8168_gpio.c:
#include #include #include #include /* copy_to_user,copy_from_user */
#include #include #include static struct class *gpio_class;
volatile unsigned long *dir;
volatile unsigned long *dat;
int gpio_open (struct inode *inode,struct file *filp)
ssize_t gpio_read (struct file *filp, char __user *buf, size_t count,loff_t *f_pos)
ssize_t gpio_write (struct file *filp, const char __user *buf, size_t count,loff_t *f_pos)
return count;
}struct file_operations gpio_fops =
;int major;
int gpio_init (void)
void gpio_exit (void)
module_license("gpl");
module_init(gpio_init);
module_exit(gpio_exit);
makefile:
obj-m:= dm8168_gpio.o
crosscompile := /opt/codesourcery/arm-2009q1/bin/arm-none-linux-gnueabi-
cc := $(crosscompile)gcc
kdir:=/home/***/ti-ezsdk_dm816x-evm_5_03_01_15/board-support/linux-2.6.37-psp04.00.01.13.patch2
pwd :=$(shell pwd)
default:
$(make) -c $(kdir) m=$(pwd) modules arch=arm cross_compile=arm-none-linux-gnueabi-
clean:
rm -rf *.ko *.o .*cmd *.mod.c .tmp_versions
gpio_test:
#include #include #include int main(int argc, char *argv)
else
write(fd,argv[1],1);
close(fd);
return 0;
}
測試 :
模組編譯後載入:insmod dm8168_gpio.ko
交叉編譯測試程式:arm-none-linux-gnueabi-gcc -o gpio_test gpio_test.c
執行:./gpio_test 1
gp1[31]為3.3v
執行:./gpio_test 0
gp1[31]為0v
DM8168 PWM驅動(暫存器設定)
dm8168的pwm是通過timx out引腳輸出的,需要對timer進行配置才能有波形輸出。對timer的時鐘進行配置,確保timer能正常工作。設定暫存器之前關閉timer。設定定時溢位後的裝載值。設定比較值,該值決定pwm占空比。設定internal counter值。啟動timer。啟動dm...
linux驅動開發 GPIO配置與使用
gpio驅動是linux驅動開發中最基礎 但卻是很常用 很重要的驅動。比如你要點亮乙個led燈 鍵盤掃瞄 輸出高低電平等等。而linux核心的強大之處在於對最底層的gpio硬體操作層的基礎上封裝了一些統一的gpio操作介面,也就是所謂的gpio驅動框架。這樣開發人員可以呼叫這些介面去操作裝置的io口...
linux驅動開發 GPIO配置與使用
gpio驅動是linux驅動開發中最基礎 但卻是很常用 很重要的驅動。比如你要點亮乙個led燈 鍵盤掃瞄 輸出高低電平等等。而linux核心的強大之處在於對最底層的gpio硬體操作層的基礎上封裝了一些統一的gpio操作介面,也就是所謂的gpio驅動框架。這樣開發人員可以呼叫這些介面去操作裝置的io口...