ADC 驱动移植

本文档介绍了如何在S3C2440芯片上移植和测试ADC驱动,包括驱动程序的编写,涉及信号量管理、中断处理及与触摸屏驱动的资源共享。同时提供了ADC驱动配置、编译过程以及一个简单的测试程序,通过读取/dev/adc获取ADC转换值。
摘要由CSDN通过智能技术生成
(1)Linux-2.6.32.2 内核并没有提供支持S3C2440 的ADC 驱动程序,所以需要在drivers/char 目录下,创建一个驱动程序的文件名为:
mini2440_adc.c(囯嵌提供)

在 S3C2440 芯片中,AD 输入和触摸屏接口使用共同的A/D 转换器

ADC 驱动和触摸屏驱动若想共存,就必须解决共享“A/D 转换器”资源这个问

题,因此在ADC 驱动程序中声明了一个全局的“ADC_LOCK”信号量

添加mini2440_adc.c内容如下:

#incl#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/input.h>
#include <linux/init.h>
#include <linux/serio.h>
#include <linux/delay.h>
#include <linux/clk.h>
#include <linux/wait.h>
#include <linux/sched.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/uaccess.h>
#include <mach/regs-clock.h>
#include <plat/regs-timer.h>
#include <plat/regs-adc.h>
#include <mach/regs-gpio.h>
#include <linux/cdev.h>
#include <linux/miscdevice.h>
;自己定义的头文件,因原生内核并没有包含
#include "s3c24xx-adc.h"
#undef DEBUG
//#define DEBUG
#ifdef DEBUG
#define DPRINTK(x...) {printk(__FUNCTION__"(%d): ",__LINE__);printk(##x);}
#else
#define DPRINTK(x...) (void)(0)
#endif
;定义ADC 转换设备名称,将出现在/dev/adc
#define DEVICE_NAME "adc"
static void __iomem *base_addr;
;定义ADC 设备结构
typedef struct {
wait_queue_head_t wait;
int channel;
int prescale;
}ADC_DEV;
;声明全局信号量,以便和触摸屏驱动程序共享A/D 转换器
DECLARE_MUTEX(ADC_LOCK);
;ADC 驱动是否拥有A/D 转换器资源的状态变量
static int OwnADC = 0;
static ADC_DEV adcdev;
static volatile int ev_adc = 0;
static int adc_data;
static struct clk *adc_clock;
;定义ADC 相关的寄存器
#define ADCCON (*(volatile unsigned long *)(base_addr + S3C2410_ADCCON))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值