uCOS-II嵌入式系统的短信息电话机

上传人:飞*** 文档编号:43500924 上传时间:2018-06-06 格式:DOC 页数:5 大小:36.50KB
返回 下载 相关 举报
uCOS-II嵌入式系统的短信息电话机_第1页
第1页 / 共5页
uCOS-II嵌入式系统的短信息电话机_第2页
第2页 / 共5页
uCOS-II嵌入式系统的短信息电话机_第3页
第3页 / 共5页
uCOS-II嵌入式系统的短信息电话机_第4页
第4页 / 共5页
uCOS-II嵌入式系统的短信息电话机_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《uCOS-II嵌入式系统的短信息电话机》由会员分享,可在线阅读,更多相关《uCOS-II嵌入式系统的短信息电话机(5页珍藏版)》请在金锄头文库上搜索。

1、使用使用 uCOS-II 嵌入式系统的短信息电话机嵌入式系统的短信息电话机1 背景背景后 PC 时代的到来,使人们开始越来越多地接触到一个新的概念嵌入式产品。手机、PDA(如商务通)等均属于手持式嵌入式产品,VCD 机、机顶盒等也属于嵌入式产品,而车载 GPS 系统、数控机床、网络冰箱等同样都属于嵌入式产品。信息电器具有信息服务功能,如网络浏览、视频点播、文字处理、电子邮件、个人数字助理等。后 PC 时代,家用电器将向数字化和网络化发展,计算机都将嵌入到电视机、冰箱、微波炉、电话等中,并通过家庭控制中心与 Internet 连接,转变为智能网络家电;还可以实现远程医疗、远程教育等。据估计未来十

2、年间,信息家电(网络冰箱、机顶盒、家庭网关、数字机顶盒等)总量可达到 11.5 亿台,总市场需求将达到 9001500 亿元。Short Messages Phone(短信息电话机)是一种操作简便、成本低廉的固定电话信息终端产品。它集成了网络和智能电话的优点,是一种基于信息网络的,具有交互功能的信息终端产品,可以通过固定电话网络与信息中心进行数据双向传送。2 系统功能及其实现方案系统功能及其实现方案2.1 功能特点短信息电话机除了实现普通电话机的通用功能外,还增加了短消息收/发、信息浏览与查阅、信息点播、信息订阅、电话簿、来电号码显示与存储、通话记录、来电转移、呼叫等待、呼叫限制、对屏幕的灰度

3、进行设置、对回执进行设置以及时钟和日历功能、闹钟功能、特色铃声功能、记事本功能等。短信息电话机还可以和信息中心在线交互,查看信息中心提供的信息(例如天气预报、电视预告、电影预告、股价查询、话费查询、区号邮编查询、新闻栏目、彩票信息等等),还可以订阅一些自己喜欢的信息。在线浏览的信息取决于信息中心提供的信息。短信息电话机就像是一个固定的手机。手机的功能几乎它都具备。2.2 硬件方案(1)MCU 的选择MCU 是整个方案的核心,由它来处理 CPE(客户端设备)与 IIS(集成信息系统),控制整个电话机的各个功能部件。由于人机界面对速度的要求不是很高,数据通信速度也相对较低,一般的 8 位 MCU就

4、能够满足方案的要求。我们选择 EPSON 的 EOC88 系列的 E0C88104 芯片。(2)数据信号的解/编码1.FSK 信号的解码。FSK(频移键控)的解码选用台湾华邦公司的 W91030。它是用同步串口与MCU 连接的,不仅能提供 FSK 的解码,而且还能提供 CAS 信号的检测(CAS 信号是 IIS 与CPE 连接时下传的一个很重要的握手信号)和振铃检测,是一款很实用的芯片,但它的成本较高。如果用分离器件,也能做到 FSK 解码,但这样做没有经过验证,风险较大。 2.DTMF 信号的解码。选用的是 9170,这一款芯片是很通用的。 3.DTMF 信号的编码。选用的是台湾华邦公司的

5、W91082,同样是以同步串口与 MCU 相连接。 4.FSK 的编码。FSK 信号的编码不是必需的,考虑到 FSK 传送的效率要比 DTMF 高 2028 倍,当然最好选用 FSK 上传方式。由于相应的 FSK 的编码器件价位很高,本方案采用了低成本的软件方式作为后备模块。 (3)语音电路目前选用的是 Philips 公司的 TEA1098。该器件集成了普通话音放大、消侧音及免提功能,实用方便,但价位有点高。考虑到我们初次接触电话电路,而且这部分也不是关键技术,为了缩短研发周期,选择这款芯片是比较合适的。2.3 软件方案本系统选用 uCOS-II 操作系统,将其移植到所选的 MCU 上。在

6、main 中建立一个起始任务StartTask。int main (void)OSInit();OSTaskCreate(void*)StartTask,(void*)0X00,(OS_STK ) OSStart();return 0;起始任务中,首先建立一系列的信号量和邮箱:Sem_Int_Ring = OSSemCreate(0) ;唤醒振铃任务Sem_Any_SMTask = OSSemCreate(0) ;唤醒短消息任务Sem_Int_Keyboard = OSSemCreate(0) ;唤醒键盘任务Sem_Int_ClockTask = OSSemCreate(0) ;唤醒时钟中断M

7、box_Any_UI= OSMboxCreate(void *)0);唤醒 UI 任务Mbox_Int_Hook= OSMboxCreate(void *)0);唤醒摘挂机任务然后,用 OSTaskCreate()函数建立 6 个任务。任务名分别为:HandsetTask(摘/挂机任务)、RingTask(响铃任务)、KeyTask(键盘任务)、SmTask(短消息任务)、UITask(用户界面(UI)任务)、ClockTask(时钟任务)。最后,在起始任务中将它本身删除掉。1.摘/挂机任务当拿起听筒或放下听筒时,就产生中断。在中断中,调用OSMboxPost(Mbox_Int_Hook,Ms

8、g_Int_Hook)来唤醒摘/挂机任务,同时清除中断标志。Msg_Int_Hook00x00 为摘机,Msg_Int_Hook00x01 为挂机。摘/挂机任务不断调用 OSMboxPend(Mbox _Int_Hook,0,&err)来获得信箱。获得信箱后,根据 Msg_Int_Hook0中的值,就知道是摘机还是挂机,然后调用OSMboxPost(Mbox_Any_UI,Msg_Any_UI)来唤醒 UI 任务。Msg_Any_UI 0任务号1,Msg_Any_UI 10x00 为摘机,Msg_Any_UI 10x01 为挂机。在挂机的时候,如果先前是在响铃的时候摘机的,那么 UI 任务把它

9、当做已接来电处理;如果不是在响铃的时候摘机的,那么在挂机的时候把它当做已拨电话处理。 2.振铃任务当铃声来到时,就产生中断。在这个中断中,调用 OSSemPost(Sem_Int_Ring)来唤醒振铃任务。响铃任务调用 OSSemPend(Sem_Int_Ring,0,&err)来获得信号量。获得信号量后,就把下传的号码接收下来;根据号码就可以知道是短信息,还是普通电话。当是短信息时,就调用 OSSemPost(Sem_Any _SMTask)来唤醒短消息任务;如果是电话,就响铃,同时调用 OSMboxPost(Mbox_Any_UI,Msg_Any_UI)来唤醒 UI任务。这时 Msg_An

10、y_UI0任务号 2,从 Msg_Any_UI1开始存的是来电时间和电话号码,然后调用 OSSemPend(Sem_Int_Ring,RING_RECV_TIMEOUT,&err),来延时响铃一段时间。如果在这段时间内没有接电话,那么必然会超时,于是就清除铃声中断,同时调用OSMboxPost(Mbox_Any_UI,Msg_Any_UI)来唤醒 UI 任务,这时 Msg_Any_UI0任务号2,Msg_Any_UI10xff 表示铃声结束。UI 任务把它当作未接来电处理。如果在这段时间内接电话,就必然唤醒摘/挂机任务。如果从响铃到对摘/挂机任务处理完毕所需要的总时间还没有到 RING_REC

11、V_TIMEOUT,那么,当时间到了,UI 任务也会收到铃声结束的消息;但此时,UI 任务不对它做任何处理。响铃任务如何区别是正常的电话还是信息中心的来电信息呢?其实很简单。信息中心也是一个终端,是由一个特定的号码来确定的。就像用不同的电话号码来区别不同的用户一样。这样响铃任务就可以根据电话线上下传的号码,来确定是哪种情况了。 3.键盘任务有按键按下时,产生一中断,在中断服务子程序中调用 OSSemPost(Sem_Int_Keyboard)来唤醒键盘任务,同时清除中断标志。键盘任务调用 OSSemPend(Sem_Int_Keyboard,0,&err)来获得信号量。获得信号量后,键盘任务将

12、调用 OSMboxPost(Mbox_Any_UI,Msg_Any_UI)唤醒 UI 任务。Msg_Any_UI0为任务号 3, Msg_Any_UI1为键值。 4.短消息任务该任务调用 OSSemPend(Sem_Any_SMTask,0,&err)获得信号量。当获得信号量后,通过标志位判别是准备上传数据还是下传数据。 下传数据时,将下传的数据放在 recv_buf中,然后调用OSMboxPost(Mbox_Any_UI,Msg_Any_UI)唤醒 UI 任务。Msg_Any_UI 0任务号 4,从Msg_Any_UI 1开始存的是从 recv_buf中筛选过的数据。这是在连上后从信息中心下

13、载信息的情况,其中 Msg_Any_UI 1存的是信息的种类号,种类号都是大于 0x80H 小于 0xFFH 的;没有连上信息中心或者是连上之后完成任务。这时 recv_buf1存的就是 0xff;如果刚刚连上,就在 recv_buf1存 0x01。 如果用户需要发送短消息任务,先将信息存在 Msg_send_buf中,然后 UI 任务调用OSSemPost(Sem_Any_SMTask),将该任务激活。该任务提取存在 Msg_send_buf中的信息后,包装后保存在 send_buf,然后将其发出去。 5.用户界面任务UI 任务一直在等待消息。当它被激活时,根据存在 Msg_Any_UI25

14、5中的不同数据进行不同的处理。详述见“3.用户界面任务详述”。 6.时钟任务单片机每 10ms 产生一个中断,在这个中断服务子程序中,对 clock_count 减 1。当减为0 时,就调用 OSSemPost(Sem_Int_ClockTask)唤醒时钟任务;同时,clock_count 重新回到100。这样每 1s,就会调用一次 OSSemPost(Sem_Int_ClockTask)。时钟任务调用OSSemPend(Sem_Int_ClockTask,0,&err)获得信号量。当获得信号量时,就更新时间。如果在23:59:59 的时候更新时间,那就要同时更新日期和星期。如果此时 UI 任

15、务处于待机状态,时钟任务就调用 OSMboxPost(Mbox_Any_UI,Msg_Any_UI)来唤醒 UI 任务。Msg_Any_UI0为任务号 0x06。时钟任务只是负责更新时间,显示时间是由 UI 任务在待机的时候来完成的。 3 用户界面任务详述用户界面任务详述在所有这些任务中,用户界面任务做的工作相对比较烦琐。首先,根据放在 Msg_Any_UI255中的第一个字节,判断是什么任务激活了本任务。1.如果是摘/挂机任务激活的,再判断第二个字节的值,根据值的不同知道是挂机还是摘机。如果是挂机,就在液晶上显示待机画面。如果是摘机,就在液晶上显示打电话图标和有关的字样,并等待键盘任务送来的

16、数字键,将其显示出来。(只有主动向外打电话才显示数字键,在接电话按数字键转接时不显示数字键。) 2.如果是振铃任务激活的,就将 Msg_Any_UI255中接下来的来电号码、时间和来电图标显示在液晶上。 3.如果是键盘任务激活的,就根据 3 号任务放在 Msg_Any_UI255中的键值和当前的工作模式做不同的处理。如果是在摘机模式下,就只是响应数字键和#*键,并每按一个键就通过 5 号任务号码发出去。如果是在挂机模式下,那么,就可以响应数字键和有关操作菜单的键(包括进入各个子菜单的快捷键、上下键、左右键、返回上级菜单键、快速返回待机画面的键、确定键、删除键、拼音输入法/字母输入法/数字输入法/短语输入法切换键)。各个菜单是不同的状态,通过键值和原来的状态可以知道现在该进入什么状态。然后根据新得到的状态,进行相应的液晶刷新和完成相应的功能。比如添加、删除、查找电话簿;添加、删除、查找通话记录;编辑短消息并发送出去,删除草稿箱里的短消息;写

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号