• 大小: 14KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签: 4412  ARM  

资源简介

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

评论

共有 条评论