资源简介
基于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
- 上一篇:NX10.0正版许可证文件
- 下一篇:使用netty使用http协议开发文件服务器
相关资源
- 超声波烧碱浓度计的研制
- 基于超声波倒车雷达 文献综述
- CTD107蓝桥杯555方波计数器&&超声波测距
- 超声模块HC-SR04说明及例程
- 超声波检测电路原理图pcb
- 超声波测距模块的Verilog代码
- LINUX 下的超声波驱动
- STM32超声波测距程序
- Arduino 超声波库函数
- STM32F103驱动三个超声波模块,串口屏
- CC2530+HCSR04超声波测距
- 用STC12C5A60S2写的超声波C程序
- 超声波测距资料 超声波测距资料
- mini2440简易bootloader源码
- 超声波 测距 模块 原理图 PCB
- 51单片机多个超声波测距
- 基于HC-SR04超声波测距LCD12864显示源码
- 超声波和红外避障蓝牙小车完整文件
- 晶体管大功率超声波雾化器
- 使用Field_进行超声波束形成的设计仿
- 超声波电路 含pcb 原理图
- 超声波相关资料超声波相关资料
- 超声波cx20106
- 智能小车超声波避障实验+源码(有舵
- MSP430G2*单片机利用HC-SR04测距
- mini2440的按键,led灯裸机程序,不使用
- 超声波测距的电路设计与单片机编程
- 单片机的超声波雾化器智能控制系统
- 51单片机超声测距汇编
- 超声波测距模块代码及上位机调试软
评论
共有 条评论