资源简介
s3c6410简单GPIO、LED、PWR驱动示例及使用说明。

代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define DEVICE_NAME “buttons“
struct button_irq_desc {
int irq;
int number;
char *name;
};
static struct button_irq_desc button_irqs [] = {
{IRQ_EINT( 0) 0 “KEY0“}
{IRQ_EINT(18) 1 “KEY1“}
};
static volatile char key_values [] = {‘0‘ ‘0‘};
static DECLARE_WAIT_QUEUE_HEAD(button_waitq);
static volatile int ev_press = 0;
static irqreturn_t buttons_interrupt(int irq void *dev_id)
{
struct button_irq_desc *button_irqs = (struct button_irq_desc *)dev_id;
int down;
int number;
unsigned tmp;
udelay(0);
number = button_irqs->number;
switch(number) {
case 0:
tmp = readl(S3C64XX_GPNDAT);
down = !(tmp & (1< break;
case 1:
tmp = readl(S3C64XX_GPLDAT);
down = !(tmp & (1 << (number + 9)));
break;
default:
down = 0;
}
if (down != (key_values[number] & 1)) {
key_values[number] = ‘0‘ + down;
ev_press = 1;
wake_up_interruptible(&button_waitq);
}
return IRQ_RETVAL(IRQ_HANDLED);
}
static int s3c64xx_buttons_open(struct inode *inode struct file *file)
{
int i;
int err = 0;
for (i = 0; i < sizeof(button_irqs)/sizeof(button_irqs[0]); i++) {
if (button_irqs[i].irq < 0) {
continue;
}
err = request_irq(button_irqs[i].irq buttons_interrupt IRQ_TYPE_EDGE_BOTH
button_irqs[i].name (void *)&button_irqs[i]);
if (err)
break;
}
if (err) {
i--;
for (; i >= 0; i--) {
if (button_irqs[i].irq < 0) {
continue;
}
disable_irq(button_irqs[i].irq);
free_irq(button_irqs[i].irq (void *)&button_irqs[i]);
}
return -EBUSY;
}
ev_press = 1;
return 0;
}
static int s3c64xx_buttons_close(struct inode *inode struct file *file)
{
int i;
for (i = 0; i < sizeof(button_irqs)/sizeof(button_irqs[0]); i++) {
if (button_irqs[i].irq < 0) {
continue;
}
free_irq(button_irqs[i].irq (void *)&button_irqs[i]);
}
return 0;
}
static int s3c64xx_buttons_read(struct file *filp char __user *buff size_t count loff_t *offp)
{
unsigned long err;
if (!ev_press) {
if (filp->f_flags & O_NONBLOCK)
return -EAGAIN;
else
wait_event_interruptible(button_waitq ev_press);
}
ev_press = 0;
err = copy_to_user((void *)buff (const void *)(&key_values) min(sizeof(key_values) count));
return err ? -EFAULT : min(sizeof(key_values) count);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3925 2011-01-17 10:54 drivers\s3c6410_buttons.c
文件 3866 2011-01-17 10:55 drivers\s3c6410_leds.c
文件 3193 2011-01-17 10:53 drivers\s3c6410_pwm.c
I..D... 0 2011-01-17 10:56 drivers
文件 1242 2011-09-23 17:51 readme.txt
----------- --------- ---------- ----- ----
12226 5
相关资源
- STM32 led 时钟
- LED灯串电路图说明
- stm32f103c8t6 4 oled.rar
-
Cme
taFileDC的使用示例 - 光立方制作(原理图 源程序 LED搭接方
- 使用OpenFileDialog打开文件对话框.rar
- [免费]基于stm32f103ze 的OLED驱动代码
- 2410的led测试程序keil可以用
- windows ce 系统的GPIO驱动程序
- LED背光的设计与优化
- ChilledWindows.exe(玩笑病毒)
- 玩转Altera FPGA:基于PLL分频计数的LE
- PLL例化配置与LED之PLL的IP核配置
- 大功率LED高频驱动电路设计方案
- 基于MCU+FPGA的LED大屏幕控制系统的设计
- ARM7 GPIO LED控制实验高速GPIO与低速GP
- Numerical simulation and prediction of radio f
- FEATURE SELECTION FOR KNOWLEDGE DISCOVERY AND
- 简析led晶片基础知识
- EXPERIMENTAL STUDY OF CONCRETE-FILLED COLD-FOR
- 通用LED显示屏控件Delphi开发例程源码
- delphi LED显示屏-工厂看板
- STM32F103实现OV7670摄像头显示
- The Existence of Optimal Control for Fully Cou
- Cluster Ensembles – A Knowledge Reuse fr
- 基于AP3029变换器的WLED背光驱动电源设
- LED/LED背光显示器/OLED显示屏
- LEDE/OpenWrt解包工具
- 详析LED驱动电源电磁干扰问题
- LED显示屏三合一表贴与三并一表贴本
评论
共有 条评论