资源简介
基于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协议开发文件服务器
相关资源
- STM32f103超声波模块例程
- 用于无线传感器网络应用的超声波传
- mini2440全套裸机程序MDK 运行
- 循迹小车51程序(超声波 颜色识别 舵
- 国嵌mini2440项目开发手册
- 基于51单片机的超声波测距技术实现含
- 51单片机智能小车花式,寻迹,红外,
- 基于M-BUS的矿用超声波明渠流量计设计
- 超声波遥控开关电路图
- 基于51单片机超声波测距毕业设计
- STM32F103RCT6 TIME4 TIME5 同时捕获六路
- HC-SR04超声波模块(包含基于51stm32配套
- STM32f103C8t6型单片机用于超声波测距
- 超声波车速测量系统设计
- 基于mini2440安全文件传输系统
- 基于嵌入式的安防视频监控
- 基于单片机控制和超声波传感器的液
- 基于超声波定位的跟随小车
- 基于STM32VET6的身高体重肺活量测量系
- 超声波传感器全套资料
- 超声波雾化器专用IC
- stm32-超声波避障程序案例
- MSP432蓝牙控制小车并进行超声波测距
- stm32f103超声波传感器hcsr04控制模板
- STM32F103_SRF05超声波测距模块程序
- STM32蓝牙+超声波+舵机.rar
- 超声波测距stm32
- 基于超声波与航迹推算的扫地机器人
- 超声波测距 基于51 pic avr单片机
- 超声波测距codePCB原理图
评论
共有 条评论