国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

ARM智能家居控制器設計與實現

發布時間:2010-7-30 11:12    發布者:lavida
關鍵詞: arm , 智能家居
隨著數字化家用電器的飛速發展,如何對家庭中相對獨立的家用電器進行智能化管理和操作?這是人們非常關心的一個問題。智能家居控制器能夠將許多相對獨立的家用電器構成一個統一的系統,從而方便對家用電器進行本地操作,也可通過互聯網或GPRS系統對家用電器實現遠程控制等等。本文主要討論智能家居控制的設計和實現。

1 智能家居控制器的硬件設計

在設計智能家居控制器時,考慮到系統的穩定性和擴展性,因此將控制器硬件設計成核心板和控制板2部分。核心板主要用來構成一臺嵌入式計算機系統,控制板主要是一些外圍接口。系統硬件如圖1所示。



圖1 智能家居硬件結構圖
  
核心板采用三星公司生產的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控制信號、觸摸屏信號、數據總線、地址總線、控制總線、外部中斷等信號全部連接到核心板上的200芯插座上。

GPRS模塊采用SIMCOM公司生產的SIM100-E芯片。通過第三個串口信號線TXD2和RXD2和處理器相連接。

LCD直接由CPU來控制,不過要增加驅動電路

觸摸屏采用4線電阻式,直接將它和CPU的nYPON、YMON、nXPON、XMON相連。

傳感器接口的輸出信號連接到CPU的EINT9外部中斷引腳上,當傳感器接收到某個信號時,就可以通過外部中斷引腳向CPU申請服務。

家電控制接口的輸入控制信號連接到CPU的GPIO端口,當要對某個家電進行控制時,只需向指定的端口寫入0或1,然后再由家電控制接口發遙控信號去控制相應的家電。

2 智能家居控制器操作系統的移植及裁剪

考慮到成本,以及系統對實時性的要求不高等因素,所以決定選用Linux操作系統。目前發行的Linux操作系統都能支持ARM機的體系結構,所以只要根據平臺的具體結構進行移植。移植主要包括建立交叉編譯環境、修改內核源碼、內核裁剪和內核編譯4等個環節。

2.1 建立交叉編譯環境

交叉編譯是指利用運行在某臺計算機上的編譯器編譯某個源程序生成在另一種結構計算機上運行的目標代碼的過程。編譯器的生成依賴于相應的函數庫,而這些函數庫又得依靠編譯器來編譯。建立交叉編譯環境就是將ARM使用的編譯器(如:arm-linux-gcc)和函數庫(如:glibc)安裝到指定目錄,并使用configure配置好Makefile文件。

2.2 修改內核源代碼

修改內核源代碼主要包括啟動代碼的修改、內核的鏈接及裝入、參數傳遞和內核引導幾個部分。Linux內核分為體系結構相關部分和體系結構無關部分。在Linux啟動的第一階段,內核與體系結構相關部分首先執行,它會完成硬件寄存器設置,內存映射等初始化工作。

然后把控制權轉給內核中與系統體系結構無關的部分。在移植工作中要修改的代碼主要集中在與體系結構相關的部分。ARM芯片的體系結構在arch/arm目錄下。首先根據芯片手冊修改boot/init.S文件中的:片選組基地址寄存器、DRAM存儲配置寄存器、DRAM片選寄存器、中斷屏蔽寄存器等。然后修改內核的鏈接及裝入ELF。最后將系統中可用頁面的數目、文件系統大小等信息以參數形式從啟動代碼傳給內核,完成設置陷阱,初始化中斷,初始化計時器,初始化控制臺等一系列操作而使內核正常啟動。

2.3 內核裁剪和編譯

內核裁剪是根據控制系統的要求將不需要的模塊從內核中裁剪了,Linux內核的裁剪有好幾個版本,可以使用命令make menuconfig對系統進行裁剪。

內核裁剪之后,最后要進行交叉編譯生成內核映象文件zImage。具體命令如下:

make clean //清理編譯環境
make dep //編譯依賴文件
make zImage //編譯內核

3 驅動程序的設計

智能家居控制器要多個設備驅動程序,有的驅動程序可以采用標準的驅動程序,有的要專門設計。芯片SIM100-E是通過第三個串口與S3C2410相連的,所以可以直接使用標準的串口驅動程序。傳感器接口和家電控制接口要設計專用的驅動程序。控制器的處理器通過外部中斷來檢測傳感器,通過GPIO端口來控制家電,雖然它們的工作原理有所不同,但驅動程序設計的方法沒有很大差別,因為在嵌入式Linux系統中設備驅動程序有一個標準的框架,設計驅動程序的大部分工作就是根據硬件結構來“填寫”框架中的函數。主要的函數包括open()、read()、write()、ioctl()、release()、module_init()和module_exit()等等。

下面以傳感器接口驅動程序設計為例,簡介驅動程序的“填寫”過程。

3.1 設備初始化模塊和退出模塊

設備初始化模塊的主要功能是:設置和申請中斷、向內核注冊設備等。設備退出模塊的主要功能是:釋放設備所占用的資源。具體函數如下:

int __init s3c2410_int_init(void)
{┅
set_external_irq(IRQ_EINT9, ┅);//設置外部中斷
request_irq(IRQ_EINT9,demo_int_handler, ┅);//申請外部中斷
ret = register_chrdev(0, DEVICE_NAME, &s3c2410_exio_fops); //申請主設備號
devfs_int_demo= devfs_register(NULL, "int_demo", ┅); //注冊設備文件
┅}
void __exit s3c2410_int_exit(void)
{┅
free_irq(IRQ_EINT9,NULL);//釋放中斷
devfs_unregister(devfs_int_demo); //刪除設備文件
unregister_chrdev(exioMajor, DEVICE_NAME); //釋放主設備號
┅}

3.2 打開模塊和釋放模塊

打開模塊的主要功能是:初始化一些變量。具體實現函數如下:

static int s3c2410_int_open(struct inode *inode, struct file *filp)
{ init_MUTEX(&demodev.lock);//初始化自旋鎖
init_waitqueue_head(&(demodev.wait));初始化隊列
MOD_INC_USE_COUNT;//使用計數加1
┅}
static int s3c2410_int_release(struct inode *inode, struct file *filp)
{ MOD_DEC_USE_COUNT; //使用計數減1
┅}

3.3 讀數據模塊

讀數據模塊的主要功能是:使線程休眼,然后等待中斷來喚醒。具體實現函數如下:

static int s3c2410_int_read(struct file *filp,char *buffer,size_t count,loff_t *ppos)
{┅
copy_to_user(buffer,(char *)&bak,sizeof(bak)); //內核態到用戶態
interruptible_sleep_on(&demodev.wait);//進入休眠
┅}

3.4 中斷處理模塊

中斷處理模塊的主要功能是:喚醒正在休眼的線程。具體實現函數如下:

static void s3c2410_int_handler(int irq, void *dev_id, struct pt_regs *reg)
{wake_up(&demodev.wait);//中斷喚醒
┅}

驅動程序設計完成后,再編寫Makefile文件,通過make命令生成目標文件,最后利用insmod命令向內核加載驅動程序。

4 應用程序的設計

為了提高應用程序的運行速度,以及程序運行的穩定性,所以將應用程序設計成多線程結構,如圖2所示。應用程序由7個線程和一個共享數據結構組成。
  


如圖2 應用程序結構框圖  

共享數據主要用于存放家電開啟和關閉時間,發送短信的電話號和短信內容等信息。共享數據是通過2個設置線程來修改的。家電控制線程主要是根據控制數據、檢測短信線程的內容和操作線程的內容來進行操作。發送短信線程主要是根據控制數據、檢測傳感器線程的內容和操作線程的內容來進行操作。應用程序的具體內容如下。

#include //線程庫頭文件

int main()
{┅
pthread_creat(&th_a,NULL,send_msg,0); //創建發送短信線程
pthread_creat(&th_b,NULL,control_driver,0); //創建家電控制線程

pthread_join(th_b,&retval); //等待家電控制線程結束
pthread_join(th_a,&retval); //等待發送短信線程結束
┅}
/*發送短信線程*/
int send_msg()
{┅
tty_init(); //初始化串口
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)); //發送短信內容
tty_end();

return 0;
}

其它線程的設計方法有很多相似之處。應用程序設計完成之后,再經過交叉編譯就可生成目標文件。

5 結束語

將移植好的系統、驅動程序和應用程序下載到智能家居控制器上。經過測試,系統具有操作方便、可靠性高和抗干擾能力強等優點。本文的創新點是:通過智能家居控制器將家電、傳感器、手機等許多獨立的設備連接成為一個系統,從而方便本地和遠程控制。
本文地址:http://m.qingdxww.cn/thread-17908-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本快播 | 久久综合爱 | 欧美第一色 | 亚洲成人bt | 绿巨人香蕉草莓丝瓜茄子番茄在线 | 国产第5页| 欧美操操操操 | 色花堂中文字幕98堂网址 | 色噜噜狠狠色综合久 | 亚洲国产高清在线观看视频 | 99综合久久| 毛片一级毛片 | 日韩在线手机看片免费看 | 天堂网在线www资源在线 | 六月丁香综合网 | 成人三级视频 | 久久婷婷久久一区二区三区 | www.九九热 | 免费国产成人高清在线观看麻豆 | bban女同系列022在线观看 | 亚洲天堂五月天 | 国产精品欧美久久久久天天影视 | 91精品国产色综合久久不 | 精品伊人久久 | 一区二区三区视频在线观看 | 欧美视频亚洲 | 成在线人视频免费视频 | 成人黄色免费看 | 香蕉视频成人在线观看 | 精品成人在线观看 | 精品国产日韩亚洲一区二区 | 成人手机视频在线观看 | 国产成人自产拍免费视频 | 青青草a | 精品国产免费人成高清 | 国产一二视频 | 国精品日韩欧美一区二区三区 | 日韩欧美国产高清 | 二级特黄绝大片免费视频大片 | 麻豆蜜桃传媒在线观看 | 麻豆精品在线视频 |