




已阅读5页,还剩102页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于GPRS的远程安防监控系统详细设计说明书提交:审核: 提交:farsight审核:XXX核准:XXX 发行签核记录表 发 文 单 位 签 核 发 文 单 位 签 核北京开发中心技术管理部修改纪录表版本发行日期修改记录Ver:1.002008-4-20U-BOOT-1.1.4内核版本是文件系统cramfsVer:2.002008-12-1U-BOOT-1.3.4内核版本是文件系统yaffs2基于GPRS的远程安防监控系统详细设计说明书1、 引言1.1 目的l 本说明书是为了程序员详细了解基于GPRS的远程安防监控系统应该完成的功能和各模块输入、处理、输出关系,指导程序员正确编码;同时作为测试人员的参考资料使用l 面向的读者:程序员、测试人员、评审员;1.2 项目背景n 项目名称:基于GPRS的远程安防监控系统。n 项目功能:使用FS2410开发板和GPRS模块和USB摄像头,完成对现场的监控功能,硬件资源来源于FS2410开发板自带的资源,比如温度传感器,报警器,红外传感器等。如果温度传感器特测温度高于一定的温度或者红外传感器特测有不法分子闯入,那么相应的相应的报警功能,灭火功能被开启,并通过GPRS模块通知用户现场情况,用户根据具体情况采取不同的措施给系统。完成一个远程监控的主要功能。n 系统提出者:北京市华清远见科技信息有限公司n 项目开发者:farsightn 项目管理者:farsightn 最终用户:面向用户n 其他有关背景资料。1.3 术语及缩略语定义1.3.1 术语定义:l FS2410:优龙开发板名称。l cgi : Common Gate Intergace,是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上ll 系统说明:bootloader的版本是u-boot-1.3.4l 内核版本是已经做好的linux-内核l 文件系统可以根据自己的情况来定制1.3.2 缩略语定义:1.4 参考资料1.4.1 文件l 基于GPRS的远程安防监控系统需求分析说明书l 基于GPRS的远程安防监控系统概要设计说明书1.4.2 资料l l l l l l 优龙开发板参考资料光盘2、 主控系统详细设计2.1 程序结构图红外传感器USB摄像头GPRSADSL灭火装置报警存储照片温度传感器火灾主控板 小偷异常现象Internet&手机2.1系统结构图2.2 程序说明:2.2.1 AD模块说明程序描述:AD驱动程序名称:s3c2410-adc.c审核:farsight日期:2008-4-26输入数据:一个模拟电压信号量输出数据:得到一个数字信号量硬件描述:AD转换器是模拟信号源和CPU之间联系的接口,它的任务是将连续变化的模拟信号转化为数字信号,以便计算机和数字系统使用。FS2410开发板用的AD转换器是ARM S3C2410自带的一个一路10位的AD转换器。并且支持触摸屏功能。最大转化率是500K,AD转换器频率的计算公式为:系统时钟/(比例值+1)。本电路的特点是通过改变滑动变阻器的阻值来改变模拟电压量。 软件是通过read,write来进行对AD的读和写的操作。原理图:涉及的datasheet: (s3c2410芯片手册)具体操作根据驱动程序和datasheet来结合注册驱动程序程序流程:alloc_chrdev_region(&dev,0,1, adc)(动态)结束N初始化cdev,并添加到内核之中adc_setup_cdev(&AdcDevs,0,&adc_remap_ops);Y填充adc_remap_ops结构体的各个域。open,release,read,writerequest_irq(IRQ_ADC,adcdone_int_handler,SA_INTERRUPT, DEVICE_NAME, NULL);(中断注册)register_chrdev_region(dev,1,adc) 成功?2.2.1AD模块驱动流程图详细代码设计#include #include #include #include #include #include #include #include #include #include /* printk() */#include /* kmalloc() */#include /* everything. */#include /* error codes */#include /* size_t */#include #include #include #include /#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include s3c2410-adc.h#include #define DEVICE_NAMEadc#define ADCRAW_MINOR0#if 0#define ADC_INPUT(x)(x)3)#define PRSCVL(x) (x)6)#endifstatic int adc_major = 250;typedef struct struct semaphore lock; /声明一个信号量wait_queue_head_t wait; /声明一个等待队列头int channel;/选择哪一路AD转换器int prescale;/预分频值ADC_DEV;static ADC_DEV adcdev;/* *中断处理函数 */static irqreturn_t adcdone_int_handler(int irq,void *dev_id,struct pt_regs *regs)wake_up(&adcdev.wait);/唤醒等待队列return IRQ_HANDLED ;/* *对设备进行写操作,buffer一定是用户空间的 */static ssize_t s3c2410_adc_write(struct file *file, const char *buffer, size_t count, loff_t * ppos)int data;if(count!=sizeof(data)printk(KERN_INFOthe size of input data must be %dn, sizeof(data);return 0;copy_from_user(&data, buffer, count);/从用户空间拷贝数据到内核空间adcdev.channel=ADC_WRITE_GETCH(data);/得到哪一路AD转换器adcdev.prescale=ADC_WRITE_GETPRE(data);/得到预分频值 /printk(KERN_INFOset adc channel=%d, prescale=0x%xn, adcdev.channel, adcdev.prescale);return count;/* *对设备进行读操作,buffer一定是用户空间的 */static ssize_t s3c2410_adc_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)int ret = 0;if (down_interruptible(&adcdev.lock)/获得信号量return -ERESTARTSYS; writel(readl(S3C2410_ADCCON) &(1),S3C2410_ADCCON);/对AD控制寄存器进行操作,具体参看s3c2410 datasheetwritel( (114) | (2556) |(10)|(1owner = THIS_MODULE;dev-ops = fops;/给结构体里的ops成员赋初值,这里是对设备操作的具体的实现函数err = cdev_add (dev, devno, 1);/将结构提struct cdev添加到系统之中/* Fail gracefully if need be */if (err)printk (KERN_NOTICE Error %d adding adc %d, err, minor);static struct cdev AdcDevs;/* *定义一个file_operations结构体,来实现对设备的具体操作的功能 */static struct file_operations adc_remap_ops = owner:THIS_MODULE,open:s3c2410_adc_open,read:s3c2410_adc_read,write:s3c2410_adc_write,release:s3c2410_adc_release,;/* *初始化设备驱动模块,主要完成对字符设备结构体的初始化和添加到系统中,并得到一个设备的设备号 */static int adc_init(void)writel(0,S3C2410_ADCTSC); /XP_PST(NOP_MODE);int result;dev_t dev = MKDEV(adc_major, 0);/将主设备号和次设备号定义到一个dev_t数据类型的结构体之中/* Figure out our device number. */if (adc_major)result = register_chrdev_region(dev, 1, adc);/静态注册一个设备,设备号先前指定好,并得到一个设备名,cat /proc/device来查看信息else result = alloc_chrdev_region(&dev, 0, 1, adc);/如果主设备号被占用,则由系统提供一个主设备号给设备驱动程序adc_major = MAJOR(dev);/得到主设备号if (result 0) return result;if (adc_major = 0) adc_major = result;/如果静态分配失败。把动态非配的设备号给设备驱动程序adc_setup_cdev(&AdcDevs, 0, &adc_remap_ops);/初始化和添加结构体struct cdev到系统之中printk(KERN_INFOadc device installed, with major %dn, adc_major);return 0;/* *卸载驱动模块 */static void adc_cleanup(void)free_irq(IRQ_ADC, NULL);/释放中断资源cdev_del(&AdcDevs);/删除结构体struct cdevunregister_chrdev_region(MKDEV(adc_major, 0), 2);/卸载设备驱动所占有的资源printk(KERN_INFOadc device uninstalledn);module_init(adc_init);/初始化设备驱动程序的入口module_exit(adc_cleanup);/卸载设备驱动程序的入口MODULE_LICENSE(Dual BSD/GPL); /模块应该指定代码所使用的许可证 2、s3c2410-adc.h#ifndef _S3C2410_ADC_H_#define _S3C2410_ADC_H_#define ADC_WRITE(ch, prescale)(ch)16)&0x7)#define ADC_WRITE_GETPRE(data)(data)&0xff)#endif /* _S3C2410_ADC_H_ */3、main-adc.c#include #include #include #include #include #include #include #include s3c2410-adc.h#define ADC_DEV/dev/adcstatic int adc_fd = -1;static int init_ADdevice(void)if(adc_fd=open(ADC_DEV,O_RDWR)0)printf(Error opening %d adc devicen, adc_fd);return -1;static int GetADresult(int channel)int PRESCALE=0XFF;int data=ADC_WRITE(channel, PRESCALE);write(adc_fd, &data, sizeof(data);read(adc_fd, &data, sizeof(data);return data;int main(void)int i;float d;if(init_ADdevice()0)return -1; while( 1 )d=(float)GetADresult(0)*3.3)/1024.0;printf(%8.4ft,d);printf(n);sleep(1);printf(r);close(adc_fd);return 0;4、s3c2410-adc.h#ifndef _S3C2410_ADC_H_#define _S3C2410_ADC_H_#define ADC_WRITE(ch, prescale)(ch)16)&0x7)#define ADC_WRITE_GETPRE(data)(data)&0xff)#endif /* _S3C2410_ADC_H_ */2.2.2 喷水模块说明程序描述:led驱动程序名称:led.c审核:farsight日期:2008-4-26输入数据:有人闯入和有火灾 输出数据: 报警和灭火装备硬件描述:将四个LED灯与S3C2410处理器的四个管脚相连接,由于GPIO是复用管脚,所以首先进行相应寄存器的配置,也就是首先配置控制寄存器GPFCON,配置为output.然后就是对灯的相应控制,这个是对数据寄存器GPFDAT,如果写0,led灯亮。否则灯灭。 软件是通过ioctl进行相应的控制。原理图:涉及的datasheet(s3c2410芯片手册)alloc_chrdev_region(&dev,0,1, led)(动态)结束N初始化cdev,并添加到内核之中led_setup_cdev(&SimpleDevs,0,&led_remap_ops)Y填充led_remap_ops结构体的各个域。open,release,ioctlregister_chrdev_region(dev,1,led) 成功?注册驱动2.2.2红外模块驱动流程图详细代码设计#include #include #include #include #include #include #include #include #include #include #include #include #include MODULE_LICENSE(GPL); #define GPFCON *(volatile unsigned int *)S3C2410_GPFCON /#define GPBDAT *(volatile unsigned int *)S3C2410_GPBDATstatic int led_major=0;static int led_open(struct inode *inode ,struct file *file)GPFCON &=(36);/printk(GPFCON is %xn,GPFCON);return 0;static ssize_t led_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)int flags=0;int ret;/writel(0,S3C2410_GPFDAT);ret = readl(S3C2410_GPFDAT);/printk(!flags is %xn,ret&(13);if(ret & (1owner=THIS_MODULE;dev-ops=fops;err=cdev_add(dev,devno,1);if(err)printk(KERN_INFOError %d adding led %dn,err,minor);static struct file_operations led_remap_ops=.owner=THIS_MODULE,.open=led_open,.release=led_release,.read = led_read,;static struct cdev SimpleDevs; static int led_init(void)int result;/int ret;dev_t dev=MKDEV(led_major,0);if(led_major) result=register_chrdev_region(dev,1,led);else result=alloc_chrdev_region(&dev,0,1,led);led_major=MAJOR(dev); if(result0) printk(KERN_WARNINGled:unable to get major %dn,led_major); return result; if(led_major=0)led_major=result;printk(KERN_INFOled register ok!n);/ret = request_irq(IRQ_EINT19, button_irq, SA_INTERRUPT, led, NULL);led_setup_cdev(&SimpleDevs,0,&led_remap_ops);return 0;static void led_exit(void)cdev_del(&SimpleDevs);unregister_chrdev_region(MKDEV(led_major,0),2); printk(led device uninstalledn);module_init(led_init); module_exit(led_exit);2.测试模块程序设计#include #include #include #include #include #include int main(void)int fd,i,j;int flags=0;j=0;fd=open(/dev/led,O_RDWR); /打开设备驱动程序/进行打开操作的判断if(fd0)printf(led open failedn);exit(0);while(1)read(fd,&flags,1);printf(flags is %dn,flags);sleep(1);close(fd);/关闭设备return 0;2.2.3扫描键盘模块说明程序描述:键盘驱动程序名称:button.c审核:farsight日期:2008-4-26输入数据:有人闯入输出数据: 报警硬件描述:根据硬件电路图可知4*4键盘扫描的工作原理,软件上首先完成对相应的寄存器作配置,这里主要涉及GPFCON,GPGCON,GPECON三个寄存器,把相应的位设置为OUTPUT和INPUT工作模式,这个根据原理图。然后就是对中断的处理,设置下降沿有效。原理图:涉及的datasheet(S3C2410数据手册):GPFCON,GPGCON,GPECON三个寄存器注册驱动程序alloc_chrdev_region(&dev,0,1, button)(动态)结束N初始化cdev,并添加到内核之中button_setup_cdev(&SimpleDevs,0,&button_remap_ops);Y填充button_remap_ops结构体的各个域。open,release,read,ioctlrequest_irq(IRQ_EINTX,button_irq,SA_INTERRUPT, DEVICE_NAME, NULL);(中断注册)register_chrdev_region(dev,1,button) 成功?驱动程序:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define DEVICE_NAME button#defineMAX_KEY_COUNT 32#define EXTINT0 *(volatile unsigned int *)S3C2410_EXTINT0#define EXTINT1 *(volatile unsigned int *)S3C2410_EXTINT1#define EXTINT2 *(volatile unsigned int *)S3C2410_EXTINT2MODULE_LICENSE(GPL);typedef structunsigned long jiffyMAX_KEY_COUNT;unsigned char bufMAX_KEY_COUNT;unsigned int head,tail;KEY_BUFFER;static KEY_BUFFER g_keyBuffer;static spinlock_t buffer_lock;static int button_major = 252;/Define device major add by yoyostatic void *gpecon;static void *gpedat;static void *gpfcon;static void *gpfdat;static void *gpgcon;static void *gpgdat;static unsigned long GetTickCount(void)struct timeval currTick;unsigned long ulRet;do_gettimeofday(&currTick);ulRet = currTick.tv_sec;ulRet *= 1000;ulRet += (currTick.tv_usec + 500) / 1000;return ulRet;static void init_keybuffer(void)int i;spin_lock_irq(&buffer_lock); g_keyBuffer.head = 0;g_keyBuffer.tail = 0;for(i = 0; i MAX_KEY_COUNT; i+)g_keyBuffer.bufi = 0;g_keyBuffer.jiffyi = 0;spin_unlock_irq(&buffer_lock); static void remove_timeoutkey(void)unsigned long ulTick;spin_lock_irq(&buffer_lock);while(g_keyBuffer.head != g_keyBuffer.tail)ulTick = GetTickCount() - g_keyBuffer.jiffyg_keyBuffer.head;if (ulTick 5000)/5绉?break;g_keyBuffer.bufg_keyBuffer.head = 0;g_keyBuffer.jiffyg_keyBuffer.head = 0;g_keyBuffer.head +;g_keyBuffer.head &= (MAX_KEY_COUNT -1);spin_unlock_irq(&buffer_lock); static void init_gpio(void)writel(readl(gpecon) | (326)|(322) & (127)|(123), gpecon);writel(readl(gpedat) & 0xffffd7ff, gpedat);writel(readl(gpgcon) | 0x3030) & 0xffffdfdf, gpgcon);writel(readl(gpgdat) & 0xffffffbb, gpgdat);writel(readl(gpfcon) | 0x33) & 0xffffffee, gpfcon);writel(readl(gpgcon) | (322) | (36) & (122) | (16), gpgcon);set_irq_type(IRQ_EINT0, IRQT_FALLING); / printk(dddddddddddd=%xn,EXTINT0); EXTINT0=(EXTINT0&(0x07)+0x02;set_irq_type(IRQ_EINT2, IRQT_FALLING); EXTINT0=(EXTINT0&(0x078)+(0x028); set_irq_type(IRQ_EINT11, IRQT_FALLING); EXTINT1=(EXTINT1&(0x0712)+(0x0212);set_irq_type(IRQ_EINT19, IRQT_FALLING); EXTINT2=(EXTINT2&(0x0712)+(0x0212);static _inline void enable_irqs(void)enable_irq(IRQ_EINT0);enable_irq(IRQ_EINT2);enable_irq(IRQ_EINT11);enable_irq(IRQ_EINT19);static _inline void disable_irqs(void)disable_irq(IRQ_EINT0);disable_irq(IRQ_EINT2);disable_irq(IRQ_EINT11);disable_irq(IRQ_EINT19);static _inline unsigned char button_scan(int irq)long lGPF, lGPG; writel(readl(gpfcon) | 0x33) & 0xffffffcc, gpfcon); /GPF2,0 input writel(readl(gpgcon) | (322) | (36) & (322) | (36), gpgcon); /GPG11,3 input writel(readl(gpgdat) | (16) & (12), gpgdat);writel(readl(gpedat) | (111) | (113), gpedat);lGPF = readl(gpfdat);lGPG = readl(gpgdat);if (lGPF & (10) = 0)return 16;else if(lGPF & (12) = 0)return 15;else if(lGPG & (13) = 0)return 14;else if(lGPG & (111) = 0)return 13;writel(readl(gpgdat) | (12) & (16), gpgdat);writel(readl(gpedat) | (111) | (113), gpedat);lGPF = readl(gpfdat);lGPG = readl(gpgdat);if (lGPF & (10) = 0)return 11;else if(lGPF & (12) = 0)return 8;else if(lGPG & (13) = 0)return 5;else if(lGPG & (111) = 0)return 2;writel(readl(gpgdat) | (16) | (12), gpgdat);writel(readl(gpedat) | (113) & (111), gpedat);lGPF = readl(gpfdat);lGPG = readl(gpgdat);if (lGPF & (10) = 0)return 10;else if(lGPF & (12) = 0)return 7;else if(lGPG &
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园超市消防知识培训内容课件
- 校园消防知识培训课件演练
- 校园消防知识培训内容课件
- 药师专业考试试题及答案
- 初级底盘考试题及答案
- 金桥劳务面试题及答案
- 中国古建筑考试试题及答案
- 淘宝处罚考试题及答案
- 上海医疗队考试试题及答案
- 换届面试试题及答案
- 化工有限公司3万吨水合肼及配套项目环评可研资料环境影响
- (完整版)内孔数控车削加工(编程)教案
- 道亨铁塔长短腿基础配置系统-操作说明
- 皮瓣移植术后移植(再植)组织的局部观察课件
- DB11-T 1764.42-2020用水定额 第42部分:居民生活
- 蒂森克虏伯电梯 MC2-B控制系统用户手册
- 浅议可转让信用证的风险防范
- 医疗器械嵌入式软件注册描述文档
- 工程认证《机械设计》课程教学大纲
- 建设工程五方责任主体法定代表人授权书、项目负责人质量终身责任承诺书
- 星级精益班组管理考核评价标准
评论
0/150
提交评论