码迷,mamicode.com
首页 > 其他好文 > 详细

基于TQ2440的小车编写(初步)

时间:2016-07-16 23:43:35      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:

由于之前做过51的小车项目,最近刚做完国嵌的移动物体监控系统,今天就写了个小车的雏形。

当然,它只是字符驱动做的,对俺这样的新人满练手的,哈哈技术分享

言归正传,先上图:

技术分享

技术分享

技术分享

技术分享

我选取这4个引脚做输出端控制小车。

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/uaccess.h>
#include <linux/clk.h>
#include <mach/regs-gpio.h>
#include <mach/io.h>
#include <mach/map.h>
#include <mach/regs-clock.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/platform_device.h>
#include <linux/delay.h>
/*四个输出口*/
#define   EINT3             S3C2410_GPF3
#define   E3_IN         S3C2410_GPF3_INP
#define   E3_OUT        S3C2410_GPF3_OUTP

#define   EINT4             S3C2410_GPF4
#define   E4_IN         S3C2410_GPF4_INP
#define   E4_OUT        S3C2410_GPF4_OUTP

#define   EINT8             S3C2410_GPG0
#define   E8_IN         S3C2410_GPG0_INP
#define   E8_OUT        S3C2410_GPG0_OUTP

#define   EINT11             S3C2410_GPG3
#define   E11_IN         S3C2410_GPG3_INP
#define   E11_OUT        S3C2410_GPG3_OUTP

#define QIAN 0
#define HOU 1
#define ZUO 2
#define YOU 3
#define TING 4

#define DEVICE_NAME "xiaoche"  //自定义驱动称为“xiaoche”。
#define XIAOCHE_MAJOR 202

/*static unsigned char init_xiaoche(void)
{
  s3c2410_gpio_cfgpin(EINT3, E3_OUT);   // 配置EINT3输出模式
  
  s3c2410_gpio_cfgpin(EINT4, E4_OUT);   // 配置EINT3输出模式
  
  s3c2410_gpio_cfgpin(EINT4, E8_OUT);   // 配置EINT3输出模式
  
  s3c2410_gpio_cfgpin(EINT11, E11_OUT);   // 配置EINT3输出模式
 

}*/

//前
static void qian_xiaoche()
{
		s3c2410_gpio_cfgpin(EINT3, E3_OUT);   // 配置EINT3输出模式
  
  	s3c2410_gpio_cfgpin(EINT4, E4_OUT);   // 配置EINT3输出模式
  
 	  s3c2410_gpio_cfgpin(EINT4, E8_OUT);   // 配置EINT3输出模式
  
  	s3c2410_gpio_cfgpin(EINT11, E11_OUT);   // 配置EINT3输出模式
		
		 	s3c2410_gpio_setpin(EINT3, 1); 
 			s3c2410_gpio_setpin(EINT4, 1); 
 			s3c2410_gpio_setpin(EINT8, 0); 
 			s3c2410_gpio_setpin(EINT11,0); 
}

//后
static void hou_xiaoche()
{
		s3c2410_gpio_cfgpin(EINT3, E3_OUT);   // 配置EINT3输出模式
  
  	s3c2410_gpio_cfgpin(EINT4, E4_OUT);   // 配置EINT3输出模式
  
 	  s3c2410_gpio_cfgpin(EINT4, E8_OUT);   // 配置EINT3输出模式
  
  	s3c2410_gpio_cfgpin(EINT11, E11_OUT);   // 配置EINT3输出模式
		
		 	s3c2410_gpio_setpin(EINT3, 0); 
 			s3c2410_gpio_setpin(EINT4, 0); 
 			s3c2410_gpio_setpin(EINT8, 1); 
 			s3c2410_gpio_setpin(EINT11, 1); 
}

//左
static void zuo_xiaoche()
{
		s3c2410_gpio_cfgpin(EINT3, E3_OUT);   // 配置EINT3输出模式
  
  	s3c2410_gpio_cfgpin(EINT4, E4_OUT);   // 配置EINT3输出模式
  
 	  s3c2410_gpio_cfgpin(EINT4, E8_OUT);   // 配置EINT3输出模式
  
  	s3c2410_gpio_cfgpin(EINT11, E11_OUT);   // 配置EINT3输出模式
		
		 	s3c2410_gpio_setpin(EINT3, 1); 
 			s3c2410_gpio_setpin(EINT4, 0); 
 			s3c2410_gpio_setpin(EINT8, 0); 
 			s3c2410_gpio_setpin(EINT11,1); 
}

//右
static void you_xiaoche()
{
		s3c2410_gpio_cfgpin(EINT3, E3_OUT);   // 配置EINT3输出模式
  
  	s3c2410_gpio_cfgpin(EINT4, E4_OUT);   // 配置EINT3输出模式
  
 	  s3c2410_gpio_cfgpin(EINT4, E8_OUT);   // 配置EINT3输出模式
  
  	s3c2410_gpio_cfgpin(EINT11, E11_OUT);   // 配置EINT3输出模式
		
		 	s3c2410_gpio_setpin(EINT3, 0); 
 			s3c2410_gpio_setpin(EINT4, 1); 
 			s3c2410_gpio_setpin(EINT8, 1); 
 			s3c2410_gpio_setpin(EINT11,0); 
}

//停
static void ting_xiaoche()
{
		s3c2410_gpio_cfgpin(EINT3, E3_OUT);   // 配置EINT3输出模式
  
  	s3c2410_gpio_cfgpin(EINT4, E4_OUT);   // 配置EINT3输出模式
  
 	  s3c2410_gpio_cfgpin(EINT4, E8_OUT);   // 配置EINT3输出模式
  
  	s3c2410_gpio_cfgpin(EINT11, E11_OUT);   // 配置EINT3输出模式
		
		 	s3c2410_gpio_setpin(EINT3, 0); 
 			s3c2410_gpio_setpin(EINT4, 0); 
 			s3c2410_gpio_setpin(EINT8, 0); 
 			s3c2410_gpio_setpin(EINT11, 0); 
}


long xiaoche_ioctl (struct file *filp, unsigned int cmd, unsigned long arg)
{
		switch(cmd)
		{
				case QIAN:
				qian_xiaoche();
				return 0;
				
				case HOU:
				hou_xiaoche();
				return 0;	
				
				case ZUO:
				zuo_xiaoche();
				return 0;
				
				case YOU:
				you_xiaoche();
				return 0;
				
				case TING:
				ting_xiaoche();
				return 0;
				
			default:
				return -EINVAL;
		}
}

static struct file_operations xiaoche_fops = {
	.owner = THIS_MODULE,
  .unlocked_ioctl = xiaoche_ioctl,
  //.open = init_xiaoche,
};

static char __initdata banner[] = "TQ2440 XIAOCHE\n";//打印信息
static struct class *xiaoche_class;

static int __init xiaoche_init(void)
{
		int ret;
	 	printk(banner);
	  ret = register_chrdev(XIAOCHE_MAJOR, DEVICE_NAME, &xiaoche_fops);
 		if (ret < 0)
		 {
 			 printk(DEVICE_NAME " can't register major number\n");
 			 return ret;
 		 }//错误处理
 		 
 	 xiaoche_class = class_create(THIS_MODULE, DEVICE_NAME);
 	  if(IS_ERR(xiaoche_class))
 		{
  		printk("Err: failed in tope-leds class. \n");
  		return -1;
	 	}
	 	
	 	device_create(xiaoche_class, NULL, MKDEV(XIAOCHE_MAJOR, 0), NULL, DEVICE_NAME);//创建一个设备节点,节点名为DEVICE_NAME
	  printk(DEVICE_NAME " initialized\n");//打印信息,内核中的打印用printk函数

 	 return 0;
}

static void __exit xiaoche_exit(void)
{
	printk(DEVICE_NAME " exit\n");//打印信息,内核中的打印用printk函数
  unregister_chrdev(XIAOCHE_MAJOR, DEVICE_NAME);//取消注册设备
  device_destroy(xiaoche_class, MKDEV(XIAOCHE_MAJOR, 0)); //删掉设备节点
  class_destroy(xiaoche_class);     //注销类
}

module_init(xiaoche_init);
module_exit(xiaoche_exit);
MODULE_LICENSE("GPL");//遵循的协议

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include "stdio.h"

#define QIAN 0
#define HOU 1
#define ZUO 2
#define YOU 3
#define TING 4

int main(int argc, char *argv[])
{
		int fd;
		int cmd;
		
		if(argc <2)
		{
				printf("please enter the second para!\n");
				return 0;
		}
		
		cmd = atoi(argv[1]);
		
		fd = open("/dev/xiaoche",O_RDWR);	
		
		if(cmd == 1)
					ioctl(fd,QIAN);
		if(cmd == 2)
					ioctl(fd,HOU);
		if(cmd == 3)
					ioctl(fd,ZUO);
		if(cmd == 4)
					ioctl(fd,YOU);
		if(cmd == 0)
					ioctl(fd,TING);

		return 0;
}
这就是我的全部代码了,不过我这有个疑问请教过路的大神,这个怎么改技术分享

技术分享技术分享

这个 代码我编译时报错,后来改的

技术分享技术分享

就这样了,技术分享

基于TQ2440的小车编写(初步)

标签:

原文地址:http://blog.csdn.net/qq_33594960/article/details/51924895

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!