[IMX6DL][Android4.4] 超声波模块HC-SR04 Linux驱动源代码

Platform: IMX6DL
OS: Android 4.4
Kernel branch: 3.0.35


说明:

1. 硬件基于HC-SR04模块,可自行查找。

2. 代码PWM模块用于测试中断响应性能, 背光部分注释掉是因为和PWM复用了。

3. 测试中断响应性能时不要使用在中断上半部使用printk()方式,否则延时会到ms级。

4. 代码中注册的字符设备可不需要,创建的内核线程用于控制时序。

3. 由于超声波采用的是普通的GPIO中断,而且精度需要达到us级,当有许多高优先级的中断需要处理时,

驱动响应会延迟导致得到的时间不同,稳定性会大大下降,只可作为参考,如果要商用最好使用专用单片机模块处理测距。


源代码:

配置:

diff --git a/arch/arm/configs/imx6_tek_android_defconfig b/arch/arm/configs/imx6_tek_android_defconfig
index d26fe73..18125d0 100644
--- a/arch/arm/configs/imx6_tek_android_defconfig
+++ b/arch/arm/configs/imx6_tek_android_defconfig
@@ -12,7 +12,7 @@ CONFIG_GENERIC_CLOCKEVENTS=y
 CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
 CONFIG_KTIME_SCALAR=y
 CONFIG_HAVE_PROC_CPU=y
-CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_STACKTRACE_SUPPOR100T=y
 CONFIG_LOCKDEP_SUPPORT=y
 CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 CONFIG_HARDIRQS_SW_RESEND=y
@@ -1189,7 +1189,8 @@ CONFIG_MXS_PERFMON=m
 # CONFIG_C2PORT is not set
 #Kris,20160226,Add MIC driver.
 CONFIG_XMF10411=y
-
+#Kris, 20160325, add ultrasnoic device.
+CONFIG_ULTRASONIC=y
 #
 # EEPROM support
 #
diff --git a/arch/arm/mach-mx6/board-mx6-tek.c b/arch/arm/mach-mx6/board-mx6-tek.c
index bea16af..8b0327f 100644
--- a/arch/arm/mach-mx6/board-mx6-tek.c
+++ b/arch/arm/mach-mx6/board-mx6-tek.c
@@ -84,6 +84,12 @@
 #include <sound/tlv320aic32x4.h>
 #include <mach/imx_rfkill.h>
 
+/*Kris, 20160325, add ultrasnoic device.  {*/
+#ifdef CONFIG_ULTRASONIC
+#include <linux/ultrasonic.h>
+#endif
+/*Kris, 20160325, add ultrasnoic device.  }*/
+
 #define KD() printk("[DEBUG]%d\n", __LINE__);
 /**
 #define TEK_ANDROID_POWER	IMX_GPIO_NR(1, 4)
@@ -110,7 +116,7 @@
 /*Kris, 20160302, Add head key. }*/
 
 /*Kris, 20160317, Add human sense key. {*/
-#define TEK_HUMEM_SENSE	IMX_GPIO_NR(2, 7)
+#define TEK_HUMAM_SENSE	IMX_GPIO_NR(2, 7)
 /*Kris, 20160317, Add human sense key. }*/
 
 /*Kris, 20150604, add touchscreen driver. {*/
@@ -152,6 +158,16 @@
 #define TEK_HEADPHONE_DET		IMX_GPIO_NR(7, 8)
 #define TEK_PFUZE_INT			IMX_GPIO_NR(7, 13)
 
+
+/*Kris, 20160325, add ultrasnoic device.  {*/
+#ifdef CONFIG_ULTRASONIC
+#define 	ULTRASONIC_DET 			IMX_GPIO_NR(2, 6)
+#define 	ULTRASONIC_CTRL_GPIO  	IMX_GPIO_NR(2, 3)
+#endif
+/*Kris, 20160325, add ultrasnoic device.  }*/
+
+
 
@@ -664,6 +680,27 @@ static struct platform_device tek_battery_device = {
 #endif
 /*Kris, 20150611, add pseudo battery device. }*/
 
+/*Kris, 20160325, add ultrasnoic device.  {*/
+#ifdef CONFIG_ULTRASONIC
+struct ultrasonic_platform_data ultrasonic_data = {
+	.pwm_id = 0,
+	.pwm_duty_ns = 250000,
+	.pwm_period_ns = 500000,
+	.irq = gpio_to_irq(ULTRASONIC_DET),
+	.ctrl_gpio = ULTRASONIC_CTRL_GPIO,
+};
+
+static struct platform_device ultrasonic_device = {
+	.name		= "e-ultrasonic",
+	.id		= -1,
+	.dev	= {
+		.platform_data = &ultrasonic_data,
+	}
+};
+#endif
+/*Kris, 20160325, add ultrasnoic device.  }*/
+
+
 
 struct imx_vout_mem {
 	resource_size_t res_mbase;
@@ -719,12 +756,16 @@ static void daogou_power_
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值