资源简介

基于ARM9-mini2440平台,基于linux2.6.32内核,hc-sr04超声波驱动及应用源码,采用中断方式驱动两路超声波模块,请多指教,多多交流~

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include ///用于中断相关的
#include //copy_to_user函数, 从内核区读数据到用户区
#include 
#include 
#include 
#include 
#include //用于混合型设备驱动
#include 
#include 

#define DEVICE_NAME “sr04_driver“ //设备名为led_driver
#define EFALUT 1
/*定义控制命令****************/
#define SR04_MAGIC ‘k‘ 
#define sr04_on  _IO(SR04_MAGIC 1) //打开SR04命令
//#define sr04_on  2 //打开SR04命令
/*超声波相关数据结构和变量的定义和声明****************/
static unsigned long sr04_table [] = {//超声波trig引脚列表
  S3C2410_GPF(2)
  S3C2410_GPF(3)
};

struct sr04_irq_desc {
    int irq;//中断号
    int pin;//对应硬件的某个管脚
    int pin_setting;//管脚的设置,一般双态, 输入或输出
    int number;//序号
    char *name; //对应的管脚名称
};

static struct sr04_irq_desc sr04_irqs [] = {//声明了两个超声波中断
    {IRQ_EINT4 S3C2410_GPF(4)  S3C2410_GPF4_EINT4  0 “SR04_0“}//超声波0
    {IRQ_EINT5 S3C2410_GPF(5)  S3C2410_GPF5_EINT5  1 “SR04_1“}//超声波1
};
static DECLARE_WAIT_QUEUE_HEAD(sr04_waitq);//等待队列当sr04没有触发中断时,如果有进程调用sr04_read函数,它将休眠
/*定义时间函数相关结构体*****************************/
struct  timeval start [2];
struct  timeval end [2];
/****************************************************/
static volatile int time_lag [] = {00};//声明变量用来保存时间差值
static volatile int ev_press = 0;//中断事件标志 中断服务程序将它置1,sr04_read将它清0
static volatile int sr04_flag [] = {00};//超声波计时标志“0“获取开始计时时间,“1”获取结束计时时间,两次时间差为计算所需时间值
static volatile int last_echo_value [] = {00};//sr04超声波echo引脚的上一次电平值(初始值)
static volatile int current_echo_value [] = {00};//sr04超声波echo引脚的当前电平值
/*sr04中断处理函数(获取时间差值)****************/
static irqreturn_t sr04_interrupt(int irq void *dev_id){//sr04中断函数(回调函数)
    struct sr04_irq_desc *sr04_irqs = (struct sr04_irq_desc *)dev_id;
    current_echo_value[sr04_irqs->number] = s3c2410_gpio_getpin(sr04_irqs->pin);//读取超声波echo管脚,判断高低电平
    if (current_echo_value[sr04_irqs->number] != last_echo_value[sr04_irqs->number]) {// 如果超声波echo管脚电平有改变
      if(sr04_flag[sr04_irqs->number]==0){
      do_gettimeofday(&start[sr04_irqs->number]);//获取开始计时时间
      sr04_flag[sr04_irqs->number] = 1;//超声波计时标志置为“1“表示下次中断的发生则获取结束计时时间
      last_echo_value[sr04_irqs->number] = current_echo_value[sr04_irqs->number];//更新last_echo_value的电平值
      }
      else{
      do_gettimeofday(&end[sr04_irqs->number]);//获取开始计时时间
      time_lag[sr04_irqs->number] = (end[sr04_irqs->number].tv_usec-start[sr04_irqs->number].tv_usec);//获取时间差值,用于计算距离
      //printk(“sr04.No:%d       %d us\n“sr04_irqs->numbertime_lag[sr04_irqs->number]);
      sr04_flag[sr04_irqs->number] = 0;//超声波计时标志置为“0“表示下次中断的发生则获取开始计时时间
      last_echo_value[sr04_irqs->number] = current_echo_value[sr04_irqs->number];//更新last_echo_value的电平值
      }
      ev_press = 1;
      wake_up_interruptible(&sr04_waitq);      
    }
    
   

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    .....H.       338  2015-01-07 14:18  sr04_driver_v1\.sr04_driver.ko.cmd

    .....H.     15892  2015-01-07 14:18  sr04_driver_v1\.sr04_driver.mod.o.cmd

    .....H.     24604  2015-01-07 14:18  sr04_driver_v1\.sr04_driver.o.cmd

    .......       111  2015-01-07 14:18  sr04_driver_v1\.tmp_versions\sr04_driver.mod

     文件        337  2014-12-31 17:24  sr04_driver_v1\Makefile

    .......         0  2015-01-07 14:18  sr04_driver_v1\Module.symvers

    .......        63  2015-01-07 14:18  sr04_driver_v1\modules.order

     文件       8723  2015-01-16 17:39  sr04_driver_v1\sr04_driver.c

    .......      5380  2015-01-07 14:18  sr04_driver_v1\sr04_driver.ko

    .......       444  2015-01-07 14:18  sr04_driver_v1\sr04_driver.mod.c

    .......      1496  2015-01-07 14:18  sr04_driver_v1\sr04_driver.mod.o

    .......      4684  2015-01-07 14:18  sr04_driver_v1\sr04_driver.o

     文件        108  2014-12-27 20:19  sr04_test\Makefile

     文件      15095  2015-01-07 15:30  sr04_test\sr04

     文件        927  2015-01-07 15:28  sr04_test\sr04.h

     文件       6407  2015-01-07 15:32  sr04_test\sr04_test.c

     文件        162  2015-01-16 17:43  readme.txt

    ...D.H.         0  2015-01-07 14:18  sr04_driver_v1\.tmp_versions

     目录          0  2015-01-07 14:18  sr04_driver_v1

     目录          0  2015-01-07 15:30  sr04_test

----------- ---------  ---------- -----  ----

                84771                    20


评论

共有 条评论