www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于ARM智能家居控制器設(shè)計(jì)與實(shí)現(xiàn)

摘  要: 如何將家庭里相對(duì)獨(dú)立的設(shè)備連接成一個(gè)系統(tǒng),從而方便進(jìn)行本地和遠(yuǎn)程控制?本文通過(guò)采用ARM構(gòu)成智能家居控制器來(lái)實(shí)現(xiàn)這個(gè)目標(biāo)。智能家居控制器使用S3C2410、SIM100-E等元件來(lái)組成硬件平臺(tái),再將Linux系統(tǒng)移植到硬件平臺(tái)上,然后設(shè)計(jì)好相應(yīng)的驅(qū)動(dòng)程序和應(yīng)用程序,最后將軟件下載到硬件平臺(tái)來(lái)對(duì)家電進(jìn)行本地和遠(yuǎn)程控制。
關(guān)鍵詞: ARM;GPRS;嵌入式

0 前言

    隨著數(shù)字化家用電器的飛速發(fā)展,如何對(duì)家庭中相對(duì)獨(dú)立的家用電器進(jìn)行智能化管理和操作?這是人們非常關(guān)心的一個(gè)問(wèn)題。智能家居控制器能夠?qū)⒃S多相對(duì)獨(dú)立的家用電器構(gòu)成一個(gè)統(tǒng)一的系統(tǒng),從而方便對(duì)家用電器進(jìn)行本地操作,也可通過(guò)互聯(lián)網(wǎng)或GPRS系統(tǒng)對(duì)家用電器實(shí)現(xiàn)遠(yuǎn)程控制等等。本文主要討論智能家居控制的設(shè)計(jì)和實(shí)現(xiàn)。

1 智能家居控制器的硬件設(shè)計(jì)

    在設(shè)計(jì)智能家居控制器時(shí),考慮到系統(tǒng)的穩(wěn)定性和擴(kuò)展性,因此將控制器硬件設(shè)計(jì)成核心板和控制板2部分。核心板主要用來(lái)構(gòu)成一臺(tái)嵌入式計(jì)算機(jī)系統(tǒng),控制板主要是一些外圍接口。系統(tǒng)硬件如圖1所示。

圖1 智能家居硬件結(jié)構(gòu)圖

    核心板采用三星公司生產(chǎn)的S3C2410微處理器。ROM采用SAMSUNG K9F1208芯片構(gòu)成64M NAND FLASH,將FLASH芯片連接到系統(tǒng)的nGCS0,所以它的起始地址為:0x00000000。RAM采用2片HY57V561620AT-H構(gòu)成64M ,將它連接到系統(tǒng)nGCS6,所以它的起始地址為:0x03000000。為了讓系統(tǒng)從NAND FLASH啟動(dòng),要將S3C2410的OM0和OM1引腳都接地。最后將S3C2410處理器的串口控制信號(hào)、USB主機(jī)控制信號(hào)、LCD控制信號(hào)、觸摸屏信號(hào)、數(shù)據(jù)總線(xiàn)、地址總線(xiàn)、控制總線(xiàn)、外部中斷等信號(hào)全部連接到核心板上的200芯插座上。

    GPRS模塊采用SIMCOM公司生產(chǎn)的SIM100-E芯片。通過(guò)第三個(gè)串口信號(hào)線(xiàn)TXD2和RXD2和處理器相連接。

    LCD直接由CPU來(lái)控制,不過(guò)要增加驅(qū)動(dòng)電路。

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

    傳感器接口的輸出信號(hào)連接到CPU的EINT9外部中斷引腳上,當(dāng)傳感器接收到某個(gè)信號(hào)時(shí),就可以通過(guò)外部中斷引腳向CPU申請(qǐng)服務(wù)。

     家電控制接口的輸入控制信號(hào)連接到CPU的GPIO端口,當(dāng)要對(duì)某個(gè)家電進(jìn)行控制時(shí),只需向指定的端口寫(xiě)入0或1,然后再由家電控制接口發(fā)遙控信號(hào)去控制相應(yīng)的家電。

智能家居控制器操作系統(tǒng)的移植及裁剪

    考慮到成本,以及系統(tǒng)對(duì)實(shí)時(shí)性的要求不高等因素,所以決定選用Linux操作系統(tǒng)。目前發(fā)行的Linux操作系統(tǒng)都能支持ARM機(jī)的體系結(jié)構(gòu),所以只要根據(jù)平臺(tái)的具體結(jié)構(gòu)進(jìn)行移植。移植主要包括建立交叉編譯環(huán)境、修改內(nèi)核源碼、內(nèi)核裁剪和內(nèi)核編譯4等個(gè)環(huán)節(jié)。

2.1 建立交叉編譯環(huán)境

    交叉編譯是指利用運(yùn)行在某臺(tái)計(jì)算機(jī)上的編譯器編譯某個(gè)源程序生成在另一種結(jié)構(gòu)計(jì)算機(jī)上運(yùn)行的目標(biāo)代碼的過(guò)程。編譯器的生成依賴(lài)于相應(yīng)的函數(shù)庫(kù),而這些函數(shù)庫(kù)又得依靠編譯器來(lái)編譯。建立交叉編譯環(huán)境就是將ARM使用的編譯器(如:arm-linux-gcc)和函數(shù)庫(kù)(如:glibc)安裝到指定目錄,并使用configure配置好Makefile文件。

2.2 修改內(nèi)核源代碼

    修改內(nèi)核源代碼主要包括啟動(dòng)代碼的修改、內(nèi)核的鏈接及裝入、參數(shù)傳遞和內(nèi)核引導(dǎo)幾個(gè)部分。Linux內(nèi)核分為體系結(jié)構(gòu)相關(guān)部分和體系結(jié)構(gòu)無(wú)關(guān)部分。在Linux啟動(dòng)的第一階段,內(nèi)核與體系結(jié)構(gòu)相關(guān)部分首先執(zhí)行,它會(huì)完成硬件寄存器設(shè)置,內(nèi)存映射等初始化工作。然后把控制權(quán)轉(zhuǎn)給內(nèi)核中與系統(tǒng)體系結(jié)構(gòu)無(wú)關(guān)的部分。在移植工作中要修改的代碼主要集中在與體系結(jié)構(gòu)相關(guān)的部分。ARM芯片的體系結(jié)構(gòu)在arch/arm目錄下。首先根據(jù)芯片手冊(cè)修改boot/init.S文件中的:片選組基地址寄存器、DRAM存儲(chǔ)配置寄存器、DRAM片選寄存器、中斷屏蔽寄存器等。然后修改內(nèi)核的鏈接及裝入ELF。最后將系統(tǒng)中可用頁(yè)面的數(shù)目、文件系統(tǒng)大小等信息以參數(shù)形式從啟動(dòng)代碼傳給內(nèi)核,完成設(shè)置陷阱,初始化中斷,初始化計(jì)時(shí)器,初始化控制臺(tái)等一系列操作而使內(nèi)核正常啟動(dòng)。

2.3 內(nèi)核裁剪和編譯

    內(nèi)核裁剪是根據(jù)控制系統(tǒng)的要求將不需要的模塊從內(nèi)核中裁剪了,Linux內(nèi)核的裁剪有好幾個(gè)版本,可以使用命令make menuconfig對(duì)系統(tǒng)進(jìn)行裁剪。

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

make clean   //清理編譯環(huán)境

make dep    //編譯依賴(lài)文件

make zImage  //編譯內(nèi)核

3 驅(qū)動(dòng)程序的設(shè)計(jì)

    智能家居控制器要多個(gè)設(shè)備驅(qū)動(dòng)程序,有的驅(qū)動(dòng)程序可以采用標(biāo)準(zhǔn)的驅(qū)動(dòng)程序,有的要專(zhuān)門(mén)設(shè)計(jì)。芯片SIM100-E是通過(guò)第三個(gè)串口與S3C2410相連的,所以可以直接使用標(biāo)準(zhǔn)的串口驅(qū)動(dòng)程序。傳感器接口和家電控制接口要設(shè)計(jì)專(zhuān)用的驅(qū)動(dòng)程序??刂破鞯奶幚砥魍ㄟ^(guò)外部中斷來(lái)檢測(cè)傳感器,通過(guò)GPIO端口來(lái)控制家電,雖然它們的工作原理有所不同,但驅(qū)動(dòng)程序設(shè)計(jì)的方法沒(méi)有很大差別,因?yàn)樵谇度胧絃inux系統(tǒng)中設(shè)備驅(qū)動(dòng)程序有一個(gè)標(biāo)準(zhǔn)的框架,設(shè)計(jì)驅(qū)動(dòng)程序的大部分工作就是根據(jù)硬件結(jié)構(gòu)來(lái)“填寫(xiě)”框架中的函數(shù)。主要的函數(shù)包括open()、read()、write()、ioctl()、release()、module_init()和module_exit()等等。

    下面以傳感器接口驅(qū)動(dòng)程序設(shè)計(jì)為例,簡(jiǎn)介驅(qū)動(dòng)程序的“填寫(xiě)”過(guò)程。

3.1 設(shè)備初始化模塊和退出模塊

    設(shè)備初始化模塊的主要功能是:設(shè)置和申請(qǐng)中斷、向內(nèi)核注冊(cè)設(shè)備等。設(shè)備退出模塊的主要功能是:釋放設(shè)備所占用的資源。具體函數(shù)如下:

int __init s3c2410_int_init(void)

{┅

       set_external_irq(IRQ_EINT9, ┅);//設(shè)置外部中斷

       request_irq(IRQ_EINT9,demo_int_handler, ┅);//申請(qǐng)外部中斷

       ret = register_chrdev(0, DEVICE_NAME, &s3c2410_exio_fops); //申請(qǐng)主設(shè)備號(hào)

       devfs_int_demo= devfs_register(NULL, "int_demo", ┅); //注冊(cè)設(shè)備文件

┅}

void __exit s3c2410_int_exit(void)

{┅

       free_irq(IRQ_EINT9,NULL);//釋放中斷

       devfs_unregister(devfs_int_demo); //刪除設(shè)備文件

       unregister_chrdev(exioMajor, DEVICE_NAME); //釋放主設(shè)備號(hào)

┅}

3.2 打開(kāi)模塊和釋放模塊

    打開(kāi)模塊的主要功能是:初始化一些變量。具體實(shí)現(xiàn)函數(shù)如下:

static int s3c2410_int_open(struct inode *inode, struct file *filp)

{     init_MUTEX(&demodev.lock);//初始化自旋鎖

       init_waitqueue_head(&(demodev.wait));初始化隊(duì)列

       MOD_INC_USE_COUNT;//使用計(jì)數(shù)加1

┅}

static int s3c2410_int_release(struct inode *inode, struct file *filp)

{     MOD_DEC_USE_COUNT; //使用計(jì)數(shù)減1

┅}

3.3 讀數(shù)據(jù)模塊

    讀數(shù)據(jù)模塊的主要功能是:使線(xiàn)程休眼,然后等待中斷來(lái)喚醒。具體實(shí)現(xiàn)函數(shù)如下:

static int s3c2410_int_read(struct file *filp,char *buffer,size_t count,loff_t *ppos)

{┅

       copy_to_user(buffer,(char *)&bak,sizeof(bak)); //內(nèi)核態(tài)到用戶(hù)態(tài)

       interruptible_sleep_on(&demodev.wait);//進(jìn)入休眠

┅}

3.4 中斷處理模塊

    中斷處理模塊的主要功能是:?jiǎn)拘颜谛菅鄣木€(xiàn)程。具體實(shí)現(xiàn)函數(shù)如下:

static void s3c2410_int_handler(int irq, void *dev_id, struct pt_regs *reg)

{wake_up(&demodev.wait);//中斷喚醒

┅}

    驅(qū)動(dòng)程序設(shè)計(jì)完成后,再編寫(xiě)Makefile文件,通過(guò)make命令生成目標(biāo)文件,最后利用insmod命令向內(nèi)核加載驅(qū)動(dòng)程序。

應(yīng)用程序的設(shè)計(jì)

    為了提高應(yīng)用程序的運(yùn)行速度,以及程序運(yùn)行的穩(wěn)定性,所以將應(yīng)用程序設(shè)計(jì)成多線(xiàn)程結(jié)構(gòu),如圖2所示。應(yīng)用程序由7個(gè)線(xiàn)程和一個(gè)共享數(shù)據(jù)結(jié)構(gòu)組成。

如圖2 應(yīng)用程序結(jié)構(gòu)框圖

    共享數(shù)據(jù)主要用于存放家電開(kāi)啟和關(guān)閉時(shí)間,發(fā)送短信的電話(huà)號(hào)和短信內(nèi)容等信息。共享數(shù)據(jù)是通過(guò)2個(gè)設(shè)置線(xiàn)程來(lái)修改的。家電控制線(xiàn)程主要是根據(jù)控制數(shù)據(jù)、檢測(cè)短信線(xiàn)程的內(nèi)容和操作線(xiàn)程的內(nèi)容來(lái)進(jìn)行操作。發(fā)送短信線(xiàn)程主要是根據(jù)控制數(shù)據(jù)、檢測(cè)傳感器線(xiàn)程的內(nèi)容和操作線(xiàn)程的內(nèi)容來(lái)進(jìn)行操作。應(yīng)用程序的具體內(nèi)容如下。

#include<pthread.h>    //線(xiàn)程庫(kù)頭文件

int main()

{┅

  pthread_creat(&th_a,NULL,send_msg,0); //創(chuàng)建發(fā)送短信線(xiàn)程

pthread_creat(&th_b,NULL,control_driver,0); //創(chuàng)建家電控制線(xiàn)程

  pthread_join(th_b,&retval); //等待家電控制線(xiàn)程結(jié)束

pthread_join(th_a,&retval); //等待發(fā)送短信線(xiàn)程結(jié)束

┅}

/*發(fā)送短信線(xiàn)程*/

int send_msg()

{┅

       tty_init();   //初始化串口

       gprs_init();  //初始化GPRS模塊

       tty_writecmd(“at”,strlen(“at”));  //發(fā)送AT命令

       tty_writecmd(“at+cmgf=1”,strlen(“at+cmgf=1”));//發(fā)送修改字符集命令

       tty_write(“at+cmgs=”,strlen(“at+cmgs=”));     //發(fā)送短信命令

       tty_writecmd(msg.send_tel,strlen(msg.send_tel)); //發(fā)送電話(huà)號(hào)碼

tty_writecmd(msg.send_text,strlen(msg.send_text)); //發(fā)送短信內(nèi)容

      tty_end(); 

      return 0;

}

    其它線(xiàn)程的設(shè)計(jì)方法有很多相似之處。應(yīng)用程序設(shè)計(jì)完成之后,再經(jīng)過(guò)交叉編譯就可生成目標(biāo)文件。

5 結(jié)束語(yǔ)

    將移植好的系統(tǒng)、驅(qū)動(dòng)程序和應(yīng)用程序下載到智能家居控制器上。經(jīng)過(guò)測(cè)試,系統(tǒng)具有操作方便、可靠性高和抗干擾能力強(qiáng)等優(yōu)點(diǎn)。本文的創(chuàng)新點(diǎn)是:通過(guò)智能家居控制器將家電、傳感器、手機(jī)等許多獨(dú)立的設(shè)備連接成為一個(gè)系統(tǒng),從而方便本地和遠(yuǎn)程控制。

參考文獻(xiàn):

[1] 朱華生,胡凱利.基于Linux系統(tǒng)的HHARM9電機(jī)驅(qū)動(dòng)程序設(shè)計(jì)[J].南昌工程學(xué)院學(xué)報(bào).2005,4:51-53.

[2] 嚴(yán)厲平.嵌入式智能家庭網(wǎng)關(guān)的研究與設(shè)計(jì)[J].微計(jì)算機(jī)信息.2005,2:14-16.

[3] 朱華生,劉文軍.基于Linux下實(shí)時(shí)數(shù)據(jù)備份的研究[J].南昌水專(zhuān)學(xué)報(bào).2004,4:57-58.

[4] 朱華生,韓宇貞.計(jì)算機(jī)故障分析儀的設(shè)計(jì)[J].南昌水專(zhuān)學(xué)報(bào).2003,2:34-36

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

要問(wèn)機(jī)器人公司哪家強(qiáng),波士頓動(dòng)力絕對(duì)是其中的佼佼者。近來(lái)年該公司在機(jī)器人研發(fā)方面獲得的一些成果令人印象深刻,比如其開(kāi)發(fā)的機(jī)器人會(huì)后空翻,自主爬樓梯等。這不,波士頓動(dòng)力又發(fā)布了其機(jī)器人組團(tuán)跳男團(tuán)舞的新視頻,表演的機(jī)器人包括...

關(guān)鍵字: 機(jī)器人 BSP 工業(yè)機(jī)器人 現(xiàn)代汽車(chē)

南京2022年10月17日 /美通社/ -- 日前《2022第三屆中國(guó)高端家電品牌G50峰會(huì)》于浙江寧波落幕,來(lái)自?xún)砂儆嗝袠I(yè)大咖、專(zhuān)家學(xué)者共同探討了在形勢(shì)依然嚴(yán)峻的當(dāng)下,如何以科技創(chuàng)新、高端化轉(zhuǎn)型等手段,幫助...

關(guān)鍵字: LINK AI BSP 智能家電

SAIHUB CAB 025M成功獲得安全試驗(yàn)所UL美國(guó)與加拿大認(rèn)證證書(shū) 新加坡2022年10月17日 /美通社/ -- SAI.TECH Global Corporation("SAI.TECH"...

關(guān)鍵字: AI BSP PS 清潔能源

鄭州2022年10月17日 /美通社/ -- 近日,《福布斯》發(fā)布了"2022年全球最佳雇主榜單"(The World's Best Employers 2022),中國(guó)平安再度上榜并排名全...

關(guān)鍵字: 福布斯 ST TI BSP

通過(guò)第二項(xiàng)3nm設(shè)計(jì)選用擴(kuò)展技術(shù)領(lǐng)先地位 第三季度強(qiáng)勁的貿(mào)易和設(shè)計(jì)選用反映出我們結(jié)合了IP和定制硅的混合業(yè)務(wù)模式 自2022年9月1日起,OpenFive首次并入集團(tuán) 盡管宏觀環(huán)境困難,但管理層仍對(duì)業(yè)務(wù)...

關(guān)鍵字: BSP ALPHA PEN Silicon

物聯(lián)網(wǎng)正在擴(kuò)大規(guī)模并加速發(fā)展,進(jìn)而驅(qū)動(dòng)著全新的經(jīng)濟(jì)。而Arm生態(tài)系統(tǒng)正是這一巨大機(jī)遇背后的推動(dòng)力。

關(guān)鍵字: ARM 物聯(lián)網(wǎng)

ARM公司是一家知識(shí)產(chǎn)權(quán)(IP)供應(yīng)商,它與一般的半導(dǎo)體公司最大的不同就是不制造芯片且不向終端用戶(hù)出售芯片,而是通過(guò)轉(zhuǎn)讓設(shè)計(jì)方案,由合作伙伴生產(chǎn)出各具特色的芯片。

關(guān)鍵字: ARM

歐洲藥品管理局人用藥品管理委員會(huì) (CHMP) 的積極建議是基于 EFFISAYIL® 1 研究結(jié)果,該研究是針對(duì)泛發(fā)性膿皰型銀屑病 (GPP) 發(fā)作患者的最大的臨床研究[1] 與斑塊狀銀屑病不同,GP...

關(guān)鍵字: HM BSP GP FOR

流體動(dòng)壓滑動(dòng)軸承為風(fēng)機(jī)發(fā)展書(shū)寫(xiě)嶄新篇章 軸承滑動(dòng)層增材制造與精加工為工業(yè)級(jí)大規(guī)模生產(chǎn)鋪平道路 軸承設(shè)計(jì)從綜合性系統(tǒng)理念出發(fā) 德國(guó)施韋因富特和漢堡2022年10月17日 /美通社/ -- 舍弗勒推出了采...

關(guān)鍵字: 齒輪箱 滑動(dòng)軸承 風(fēng)力渦輪機(jī) BSP

上海2022年10月17日 /美通社/ -- Brother內(nèi)置墨倉(cāng)彩色噴墨一體機(jī)DCP-C421W新上市。此次Brother創(chuàng)新引入"按需打印,按頁(yè)付費(fèi)"...

關(guān)鍵字: DC 打印機(jī) BSP DESIGN

嵌入式軟件

15715 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉