DM8168 GPIO驅動與測試程式

2021-06-22 11:16:40 字數 1714 閱讀 8685

本次測試針對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口...