



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 基于ARM智能家居控制器设计与实现 基于ARM智能家居控制器设计与实现 类别:单片机/DSP  
2、来源:微计算机信息 作者:朱华生 冯祥胜  摘 要: 如何将家庭里相对独立的设备连接成一个系统,从而方便进行本地和远程控制?本文通过采用ARM构成智能家居控制器来实现这个目标。智能家居控制器使用S3C2410、SIM100-E等元件来组成硬件平台,再将Linux系统移植到硬件平台上,然后设计好相应的驱动程序和应用程序,最后将软件下载到硬件平台来对家电进行本地和远程控制。  关键词: ARM;GP
3、RS;嵌入式  0 前言  随着数字化家用电器的飞速发展,如何对家庭中相对独立的家用电器进行智能化管理和操作?这是人们非常关心的一个问题。智能家居控制器能够将许多相对独立的家用电器构成一个统一的系统,从而方便对家用电器进行本地操作,也可通过互联网或GPRS系统对家用电器实现远程控制等等。本文主要讨论智能家居控制的设计和实现。
4、;  1 智能家居控制器的硬件设计  在设计智能家居控制器时,考虑到系统的稳定性和扩展性,因此将控制器硬件设计成核心板和控制板2部分。核心板主要用来构成一台嵌入式计算机系统,控制板主要是一些外围接口。系统硬件如图1所示。  图1 智能家居硬件结构图 &
5、#160; 核心板采用三星公司生产的S3C2410微处理器。ROM采用SAMSUNG K9F1208芯片构成64M NAND FLASH,将FLASH芯片连接到系统的nGCS0,所以它的起始地址为:0x00000000。RAM采用2片HY57V561620AT-H构成64M ,将它连接到系统nGCS6,所以它的起始地址为:0x03000000。为了让系统从NAND FLASH启动,要将S3C2410的OM0和OM1引脚都接地。最后将S3C2410处理器的串口控制信号、USB主机控制信号、LCD控制信号、触摸屏信号、数据总线、地址总线、控制总线、外部中断等信号全部连接到核心板上的
6、200芯插座上。  GPRS模块采用SIMCOM公司生产的SIM100-E芯片。通过第三个串口信号线TXD2和RXD2和处理器相连接。  LCD直接由CPU来控制,不过要增加驱动电路。  触摸屏采用4线电阻式,直接将它和CPU的nYPON、YMON、nXPON、XMON相连。
7、  传感器接口的输出信号连接到CPU的EINT9外部中断引脚上,当传感器接收到某个信号时,就可以通过外部中断引脚向CPU申请服务。 家电控制接口的输入控制信号连接到CPU的GPIO端口,当要对某个家电进行控制时,只需向指定的端口写入0或1,然后再由家电控制接口发遥控信号去控制相应的家电。  2 智能家居控制器操作系统的移植及
8、裁剪  考虑到成本,以及系统对实时性的要求不高等因素,所以决定选用Linux操作系统。目前发行的Linux操作系统都能支持ARM机的体系结构,所以只要根据平台的具体结构进行移植。移植主要包括建立交叉编译环境、修改内核源码、内核裁剪和内核编译4等个环节。  2.1 建立交叉编译环境  交叉编译是指利用
9、运行在某台计算机上的编译器编译某个源程序生成在另一种结构计算机上运行的目标代码的过程。编译器的生成依赖于相应的函数库,而这些函数库又得依靠编译器来编译。建立交叉编译环境就是将ARM使用的编译器(如:arm-linux-gcc)和函数库(如:glibc)安装到指定目录,并使用configure配置好Makefile文件。  2.2 修改内核源代码  修改内核源代码主要包括启动代码的修改、内核的链接及
10、装入、参数传递和内核引导几个部分。Linux内核分为体系结构相关部分和体系结构无关部分。在Linux启动的第一阶段,内核与体系结构相关部分首先执行,它会完成硬件寄存器设置,内存映射等初始化工作。然后把控制权转给内核中与系统体系结构无关的部分。在移植工作中要修改的代码主要集中在与体系结构相关的部分。ARM芯片的体系结构在arch/arm目录下。首先根据芯片手册修改boot/init.S文件中的:片选组基地址寄存器、DRAM存储配置寄存器、DRAM片选寄存器、中断屏蔽寄存器等。然后修改内核的链接及装入ELF。最后将系统中可用页面的数目、文件系统大小等信息以参数形式从启动代码传给内核,完成设置陷阱,
11、初始化中断,初始化计时器,初始化控制台等一系列操作而使内核正常启动。  2.3 内核裁剪和编译  内核裁剪是根据控制系统的要求将不需要的模块从内核中裁剪了,Linux内核的裁剪有好几个版本,可以使用命令make menuconfig对系统进行裁剪。  内核裁剪之后,最后要进行交叉编译生成内核映象文件
12、zImage。具体命令如下:  make clean /清理编译环境  make dep/编译依赖文件  make zImage /编译内核  3 驱动程序的设计 &
13、#160;  智能家居控制器要多个设备驱动程序,有的驱动程序可以采用标准的驱动程序,有的要专门设计。芯片SIM100-E是通过第三个串口与S3C2410相连的,所以可以直接使用标准的串口驱动程序。传感器接口和家电控制接口要设计专用的驱动程序。控制器的处理器通过外部中断来检测传感器,通过GPIO端口来控制家电,虽然它们的工作原理有所不同,但驱动程序设计的方法没有很大差别,因为在嵌入式Linux系统中设备驱动程序有一个标准的框架,设计驱动程序的大部分工作就是根据硬件结构来“填写”框架中的函数。主要的函数包括open()、read()、write(
14、)、ioctl()、release()、module_init()和module_exit()等等。  下面以传感器接口驱动程序设计为例,简介驱动程序的“填写”过程。  3.1 设备初始化模块和退出模块  设备初始化模块的主要功能是:设置和申请中断、向内核注册设备等。设备退出模块的主要功能是:释放设
15、备所占用的资源。具体函数如下:  int _init s3c2410_int_init(void) set_external_irq(IRQ_EINT9, );/设置外部中断 request_irq(IRQ
16、_EINT9,demo_int_handler, );/申请外部中断 ret = register_chrdev(0, DEVICE_NAME, &s3c2410_exio_fops); /申请主设备号 devfs_int_demo= devfs_register(NULL, "int_demo", ); /注册设备文件
17、160;    void _exit s3c2410_int_exit(void) free_irq(IRQ_EINT9,NULL);/释放中断 devfs_unreg
18、ister(devfs_int_demo); /删除设备文件 unregister_chrdev(exioMajor, DEVICE_NAME); /释放主设备号    3.2 打开模块和释放模块  打
19、开模块的主要功能是:初始化一些变量。具体实现函数如下:  static int s3c2410_int_open(struct inode *inode, struct file *filp) init_MUTEX(&demodev.lock);/初始化自旋锁 init_waitqueue_he
20、ad(&(demodev.wait);初始化队列 MOD_INC_USE_COUNT;/使用计数加1    static int s3c2410_int_release(struct inode *inode, struct file *filp)
21、; MOD_DEC_USE_COUNT; /使用计数减1    3.3 读数据模块  读数据模块的主要功能是:使线程休眼,然后等待中断来唤醒。具体实现函数如下: &a
22、mp;nbspstatic int s3c2410_int_read(struct file *filp,char *buffer,size_t count,loff_t *ppos) copy_to_user(buffer,(char *)&bak,sizeof(bak); /内核态到用户态 i
23、nterruptible_sleep_on(&demodev.wait);/进入休眠    3.4 中断处理模块  中断处理模块的主要功能是:唤醒正在休眼的线程。具体实现函数如下:  stat
24、ic void s3c2410_int_handler(int irq, void *dev_id, struct pt_regs *reg) wake_up(&demodev.wait);/中断唤醒    驱动程序设计完成后,再编写Makefile文件,通过make命令生成目标文件,最后利用i
25、nsmod命令向内核加载驱动程序。  4 应用程序的设计  为了提高应用程序的运行速度,以及程序运行的稳定性,所以将应用程序设计成多线程结构,如图2所示。应用程序由7个线程和一个共享数据结构组成。  如
26、图2 应用程序结构框图  共享数据主要用于存放家电开启和关闭时间,发送短信的电话号和短信内容等信息。共享数据是通过2个设置线程来修改的。家电控制线程主要是根据控制数据、检测短信线程的内容和操作线程的内容来进行操作。发送短信线程主要是根据控制数据、检测传感器线程的内容和操作线程的内容来进行操作。应用程序的具体内容如下。 #include<pthread.h>/线程库头文件
27、0;    int main() pthread_creat(&th_a,NULL,send_msg,0); /创建发送短信线程 &am
28、p;nbsppthread_creat(&th_b,NULL,control_driver,0); /创建家电控制线程   pthread_join(th_b,&retval); /等待家电控制线程结束  pthread_join(th_a,&retval); /等待发送短信线
29、程结束   /*发送短信线程*/  int send_msg() tty_init(); /初始化串口
30、60; gprs_init(); /初始化GPRS模块 tty_writecmd(“at”,strlen(“at”); /发送AT命令 tty_writecmd(“at+cmgf=1”,strlen(“at+cmgf=1”);/发送修改字符集命令 tty_write(“at+cmgs=”,strlen(“at+cmgs=”); /发送短信命令 tty_writecmd(msg.send_tel,strlen(msg.send_tel); /发送电话号码  tty_writecmd(msg.send_text,strlen(msg.send_text); /发送短信内容
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 音韵在诗歌中的作用文学概论试题及答案
- 深入文学主题试题及答案探讨
- 破解思维2025年计算机二级MySQL试题及答案
- 公共基础知识视野试题及答案
- C++跨平台开发的试题及答案
- 二级Web考试核心知识试题及答案集
- 经济法教育的未来展望试题及答案
- Delphi类与对象的深入探讨试题及答案
- 财务成本管理解析方法题及答案
- 财务决策的逻辑推理全景分析试题及答案
- (二模)保定市2025年高三第二次模拟考试地理试卷(含答案解析)
- 应用文写作-介绍智能校园图书馆的英文发言稿+讲义-2025届吉林省长春市高三下学期质量监测(三)英语试题
- 2025年CSCO胃癌诊疗指南更新要点解读
- 去极端化教育宣讲
- 【MOOC】电工电子学-浙江大学 中国大学慕课MOOC答案
- 2024-2025学年中职数学基础模块 下册高教版(2021·十四五)教学设计合集
- 创新工程实践智慧树知到期末考试答案章节答案2024年北京大学等跨校共建
- MOOC 跨文化交际入门-华中师范大学 中国大学慕课答案
- 小小科学家《生物》模拟试卷A(附答案)
- DB11 2075-2022 建筑工程减隔震技术规程
- 基于PLC的电镀生产线控制系统的设计
评论
0/150
提交评论