資源簡介
4412 GPIO驅動程序、蜂鳴器實現音樂播放、按鍵中斷驅動代碼

代碼片段和文件信息
#include?
#include?
#include?
#include?
/*驅動注冊的頭文件,包含驅動的結構體和注冊和卸載的函數*/
#include?
/*注冊雜項設備頭文件*/
#include?
/*注冊設備節點的文件結構體*/
#include?
#include?
/*Linux中申請GPIO的頭文件*/
#include?
/*三星平臺的GPIO配置函數頭文件*/
/*三星平臺EXYNOS系列平臺,GPIO配置參數宏定義頭文件*/
#include?
#include?
/*三星平臺4412平臺,GPIO宏定義頭文件*/
#include?
#include?
#include?
/*
#define?DRIVER_NAME?“hello_ctl“
#define?DEVICE_NAME?“hello_ctl“
*/
MODULE_LICENSE(“Dual?BSD/GPL“);
MODULE_AUTHOR(“TOPEET“);
//GPIO?驅動程序的宏定義
#ifndef?__S5PC100__LED_HHHH
#define?__S5PC100__LED_HHHH
//need?arg?=?0/1/2/3/4/5
#define?PWM_ON _IO(‘K‘?0)
#define?PWM_OFF _IO(‘K‘?1)
#define?SET_PRE _IOW(‘K‘?2?int)
#define?SET_CNT _IOW(‘K‘?3?int)
#define?LED_ON _IOW(‘K‘?4?int)
#define?LED_OFF _IOW(‘K‘?5?int)
#define?TCFG0 0x00 //配置寄存器0
#define?TCFG1 0X04 //配置寄存器1
#define?TCON 0x08
#define?TCNTB0 0x0C
#define?TCMPB0 0x10
#define?GPDCON 0x114000A0
#define?TIMER_base 0x139D0000
#define?FS4412_GPL2CON 0x11000100
#define?FS4412_GPL2DAT 0x11000104
#define?FS4412_GPK1CON 0x11000060
#define?FS4412_GPK1DAT 0x11000064
#endif
void?fs4412_led_off(int);
void?fs4412_led_on(int);
int?number_of_device?=?1;
static?int?*gpl2con;
static?int?*gpl2dat;
static?int?*gpk1con;
static?int?*gpk1dat;
//_____________________________________________________
struct?fs4412_gpio
{
unsigned?int?*gpdcon;
void?__iomem?*timer_base;
struct?cdev?cdev;
};
static?struct?fs4412_gpio?*gpik;
//_____________________________________________________
static?long?fs4412_gpio_ioctl(?struct?file?*files?unsigned?int?cmd?unsigned?long?arg){
int?data;
if?(_IOC_TYPE(cmd)?!=?‘K‘)
return?-ENOTTY;
if?(_IOC_NR(cmd)?>?5)
return?-ENOTTY;
if?(_IOC_DIR(cmd)?==?_IOC_WRITE)
if?(copy_from_user(&data?(void?*)arg?sizeof(data)))
return?-EFAULT;
switch(cmd)
{
case?LED_ON:
fs4412_led_on(data);
break;
case?LED_OFF:
fs4412_led_off(data);
break;
case?PWM_ON:
writel((readl(gpik->timer_base?+?TCON)?&?~0x1f)?|?0x9?gpik->timer_base?+?TCON);
break;
case?PWM_OFF:
writel(readl(gpik->timer_base?+?TCON)?&?~0x1f?gpik->timer_base?+?TCON);
break;
case?SET_PRE:
writel(readl(gpik->timer_base?+?TCON)?&?~0x1f?gpik->timer_base?+?TCON);
writel((readl(gpik->timer_base?+?TCFG0)?|?0xff)?|?(data?&?0xff)?gpik->timer_base?+?TCFG0);
writel((readl(gpik->timer_base?+?TCON)?&?~0x1f)?|?0x9?gpik->timer_base?+?TCON);
break;
case?SET_CNT:
writel(data?gpik->timer_base?+?TCNTB0);
writel(data?>>?1?gpik->timer_base?+?TCMPB0);
break;
default:
printk(“Invalid?argument“);
return?-EINVAL;
}
return?0;
}
static?int?fs4412_gpio_rlease(struct?inode?*inode?struct?file?*file){ //release操作,熄滅所
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-11-12?10:47??driver\
?????目錄???????????0??2018-11-12?10:47??driver\GPIO_LED_BEEP\
?????文件????????9424??2018-11-10?19:47??driver\GPIO_LED_BEEP\gpio_drv.c
?????文件?????????642??2018-11-09?15:33??driver\GPIO_LED_BEEP\gpio_drv.h
?????文件????????6534??2018-11-10?19:10??driver\GPIO_LED_BEEP\GPIO_LED_BEEP.zip
?????文件????????1602??2018-11-10?18:57??driver\GPIO_LED_BEEP\gpio_test.c
?????文件?????????755??2018-11-09?12:28??driver\GPIO_LED_BEEP\Makefile
?????文件????????4576??2018-11-10?18:58??driver\GPIO_LED_BEEP\pwm_music.h
?????文件?????????763??2018-11-09?20:06??driver\GPIO_LED_BEEP\test.c
?????目錄???????????0??2018-11-12?10:48??driver\KEY_irp\
?????文件????????3193??2018-11-12?15:54??driver\KEY_irp\fs4412_key.c
評論
共有 條評論