




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式实训24维信科技一、实训目的学习系统时间相关API函数和使用信号量解决uCOS-II任务之间的互斥问题,把系统时间显示在一个文本框中,并可以通过键盘设置修改。二、实训内容(维信科技,太原最好的IT培训)本次实验在用户的Main_Task任务中创建一个新任务,来实现系统时钟的显示和更新。同时,通过在Main_Task任务中响应键盘消息,可以对系统的时钟进行更改。使用uCOS-II多任务系统中的信号量保证多个任务对系统的同一个控件访问而不产生冲突。三、预备知识1、用ARMSDT2.5或ADS1.2集成开发环境,编写和调试程序的基本过程。2、基于uCOS-II操作系统应用程序的框架结构。3、会
2、使用消息循环响应键盘消息。4、会使用文本框控件。四、设备及工具(包括软件调试工具)硬件:ARM嵌入式开发平台、用于ARM7TDMI的JTAG仿真器、PC机Pentium100以上。软件:PC机操作系统win98、Win2000或WinXP、ARMSDT2.51或ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序、UltraEdit。五、原理及说明当系统掉电后RTC(RealTimeClock)电路可以依靠后备电池工作。RTC电路能够以BCD码的形式向CPU提供时间信息,这些信息包括年、月、日、星期和时、分、秒。RTC的运行依赖于一个外部32.768KHz晶振,并具有闹钟功能。该RTC电
3、路还具有闰年发生器、闹钟中断或掉电唤醒、解决Y2K问题、独立电源引脚、秒钟舍入复位功能、用于RTOS核的毫秒级时钟节拍中断等特性。1、RTC电路单元说明RTC电路的框图如图4-9所示。1)闰年发生器该模块可以根据BCDDAY、BCDMON、BCDYEAR等寄存器的数据决定每个月的最后一天是28、29、30还是31,在决定最后日期时考虑了闰年。因为8位计数器只能保存两位BCD码,所以无法判断00年是闰年与否。例如无法区分1900年和2000年。为此,44B0的RTC单元用硬件来支持闰年2000年,注意这里1900不是闰年而2000年是闰年。因而00年代表2000年而非1900年。图4-9RTC电
4、路图框图需要注意,RTC的合法时间范围是100年,比如19012000或20002099,也可以是1949-2048等。否则程序中无法判断某一年是哪个世纪的,由于00年应该认为是2000年,这个范围在实际应用中已经足够了。2)读写寄存器RTCCON寄存器的Bit0位必须置1后才能读写RTC单元的寄存器。为了显示秒、分、时、星期、日期、月和年,CPU应该分别读取BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDDATE、BCDMON、BCDYEAR等寄存器的内容。然而,由于读多个寄存器,一秒的偏差是可能存在的。例如,用户从BCDYEAR到BCDMIN读取寄存器(维信科技,太原最好的
5、IT培训),结果正好为59年12月31日23时59分;当用户读取BCDSEC寄存器并且结果在1到59秒时,这没有问题,但是当结果为0秒时,由于上述的一秒偏差,年、月、日、时和分可能已经变为60年1月1日0时0分了。在这种情况下,如果BCDSEC为0的话,用户应该从BCDYEAY到BCDMIN重新读取。3)闹钟功能RTC可以在掉电模式或正常工作模式中在指定时刻产生闹钟信号;在正常工作模式下闹钟中断ALMINT被激活,而在掉电模式下,电源管理唤醒PMWKUP信号与ALMINT同时被激活。RTC闹钟寄存器RTCALM决定闹钟的使能和时刻设置。4)时钟节拍中断RTC的时钟节拍用于中断请求,TICNT寄
6、存器包含中断使能位和用于中断的计数值,当计数值减少到0则产生时钟节拍中断。那么中断周期就是:Period=(n+1)/128second其中n:Ticktimecountvalue(1-127)RTC的时钟节拍可以用于RTOS(实时操作系统)内核的时钟节拍。如果时钟节拍由RTC产生,RTOS的时间相关功能将一直与实时钟同步。5)舍入复位功能舍入复位功能由RTC的舍入复位寄存器RTCRST完成,秒进位发生器的舍入边界(30、40或50秒)是可选的,在舍入复位时秒值被舍入为00例如当前时间是23:37:47,(维信科技,太原最好的IT培训)并且舍入边界选择为40秒,那么舍入复位将当前时间改为23:
7、38:00。2、RTC相关寄存器实时时钟控制寄存器(RTCCON)的设置和位描述如下表4-21和表4-22所示:表4-21实时时钟控制寄存器(RTCCON)的设置寄存器地址R/W描述复位值RTCCON0x01D70040(L)0x01D70043(B)R/W(bybyte)RTC空制寄存器0x0表4-22实时时钟控制寄存器(RTCCON)的位描述RTCCON位描述初始化状态CLKRST3RTC寸钟计数复位0=无复位,1=复位0CNTSEL2BC计数选择0=合并BC计数器1=保留(分离BCD+数器)0CLKSEL1BCD寸钟选择0=晶振XTAL1/215分频时钟1=保留(XTALL寸钟只为检测)
8、0RTCEN0RTCt/写使能0=禁止,1=使能如果RTCM/写特征使能,静态电流将大量消耗。为了减少STOP电流,在不访问RTC寸该位应该为0。即使该位为0,RTC寸钟仍然运行。0RTC闹钟控制寄存器(RTCALM)的设置和位描述如下表4-23和表4-24所示:表4-23RTC闹钟控制寄存器(RTCALM)的设置寄存器地址R/W描述复位值RTCALM0x01D70050(L)0x01D70053(B)R/W(bybyte)RTM钟控制寄存器0x00表4-24RTC闹钟控制寄存器(RTCALM)的位描述RTCALM位描述初始化状态Reserved70ALMEN6闹钟全局使能0=禁止,1=使能0
9、YEAREN5年闹钟使能0=禁止,1=使能0MONREN4月闹钟使能0=禁止,1=使能0DAYEN3天闹钟使能0=禁止,1=使能0HOUREN2小时闹钟使能0=禁止,1=使能0MINEN1分钟闹钟使能0=禁止,1=使能0SECEN0秒闹钟使能0=禁止,1=使能0闹钟第二数据寄存器(ALMSEC)的设置和位描述如表4-25和表4-26所示:表4-25闹钟第二数据寄存器(ALMSEC)的设置寄存器地址R/W描述复位值ALMSEC0x01D70054(L)0x01D70057(B)R/W(bybyte)闹钟第二数据寄存器0x00表4-26闹钟第二数据寄存器(ALMSEC)的位描述ALMSEC位描述初
10、始化状态Reserved70SECDATA6:4闹钟秒的BCD直,从0-5。0003:00到90000闹钟分钟数据寄存器(ALMMIN)的设置和位描述如下表4-27和表4-28所示:表4-27闹钟分钟数据寄存器(ALMMIN)的设置寄存器地址R/W描述复位值ALMMIN0x01D70058(L)0x01D7005B(B)R/W(bybyte)闹钟分钟数据寄存器0x00表4-28闹钟分钟数据寄存器(ALMMIN)的位描述ALMMIN位描述初始化状态Reserved70MINDATA6:4闹钟分钟的BCD直,从0到5。0003:00到90000闹钟小时数据寄存器(ALMHOUR)的设置和位描述如下
11、表4-29和表4-30所示:表4-29闹钟小时数据寄存器(ALMHOUR)的设置寄存器地址R/W描述复位值ALMHOUR0x01D7005c(L)0x01D7005F(B)R/W(bybyte)闹钟时间数据寄存器0x00表4-30闹钟小时数据寄存器(ALMHOUR)的位描述ALMHOUR位描述初始化状态Reserved7:60HOURDATA5:4闹钟时间的BCD1,从0到2。003:00到90000闹钟天数据寄存器(ALMDAY)的设置和位描述如下表4-31和表4-32所示:表4-31闹钟天数据寄存器(ALMDAY)的设置寄存器地址R/W描述复位值ALMDAY0x01D70060(L)0x0
12、1D70063(B)R/W(bybyte)闹钟天数据寄存器0x01表4-32闹钟天数据寄存器(ALMDAY)的位描述ALMDAY位描述初始化状态Reserved7:60DAYDATA5:4闹钟天的BCDt,从0至U28,29,30,310到3003:00到90001闹钟月数据寄存器(ALMMON)的设置和位描述如下表4-33和表4-34所示:表4-33闹钟月数据寄存器(ALMMON)的设置寄存器地址R/W描述复位值ALMMON0x01D70064(L)0x01D70067(B)R/W(bybyte)闹钟月数据寄存器0x01表4-34闹钟月数据寄存器(ALMMON)的位设置ALMMON位描述初始
13、化状态Reserved7:50MONDATA4闹钟月的BCD直,从0到1。03:00到90001闹钟年数据寄存器(ALMYEAR)的设置和位描述如下表4-35和表4-36所示:表4-35闹钟年数据寄存器(ALMYEAR)的设置寄存器地址R/W描述复位值ALMYEAR0x01D70068(L)0x01D7006B(B)R/W(bybyte)闹钟年数据寄存器0x00表4-36闹钟年数据寄存器(ALMYEAR)的设置的位描述ALMYEAR位描述初始化状态YEARDATA7:0年的BCD1,从00-990x00RTC复位寄存器(RTCRST)的设置和位描述如下表4-37和表4-38所示:表4-37RT
14、C复位寄存器(RTCRST)的设置寄存器地址R/W描述复位值RTCRST0x01D7006c(L)0x01D7006F(B)R/W(bybyte)RTC舍入复位寄存器0x0.表4-38RTC复位寄存器(RTCRST)的位描述RTCRST位描述初始化状态SRSTEN3舍入秒复位使能0=禁止,1=使能0SECCR2:0秒进位产生的舍入边界011=超出3例100=超出4例101=超出5例00BCD秒寄存器(BCDSEC)的设置和位描述如下表4-39和4-40所示:表4-39BCD秒寄存器(BCDSEC)的设置寄存器地址R/W描述复位值BCDSEC0x01D70070(L)0x01D70073(B)R
15、/W(bybyte)BC电寄存器Undef.表4-40BCD秒寄存器(BCDSEC)的位描述BCDSEC位描述初始化状态Reserved7一SECDATA6:4秒的BCDT从0到5一3:00到9一BCD分钟寄存器(BCDMIN)的设置和位描述如下表4-41和表4-42所示:表4-41BCD分钟寄存器(BCDMIN)的设置寄存器地址R/W描述复位值BCDMIN0x01D70074(L)0x01D70077(B)R/W(bybyte)BC分钟寄存器Undef.表4-42BCD分钟寄存器(BCDMIN)的位设置BCDMIN位描述初始化状态Reserved7一MINDATA6:4分钟的BCD1从0到5
16、一3:00到9一BCD小时寄存器(BCDHOUR)的设置和位描述如下表4-43和表4-44所示:表4-43BCD小时寄存器(BCDHOUR)的设置寄存器地址R/W描述复位值BCDHOUR0x01D70078(L)0x01D7007B(B)R/W(bybyte)BCDb时寄存器Undef.表4-44BCD小时寄存器(BCDHOUR)的位描述BCDHOUR位描述初始化状态Reserved7:6一HOURDATA5:4小时的BCD!从0到2一3:00到9一BCD天数寄存器(BCDDAY)的设置和位描述如下表4-45和表4-46所示:表4-45BCD天数寄存器(BCDDAY)的设置寄存器地址R/W描述
17、复位值BCDDAY0x01D7007c(L)0x01D7007F(B)R/W(bybyte)BC大数寄存器Undef表4-46BCD天数寄存器(BCDDAY)的位描述BCDDAY位描述初始化状态Reserved7:6一DAYDATA5:4天数的BCD1从0到3一3:00到9一BCD日期寄存器(BCDDATE)的设置和位描述如下表4-47和表4-48所示:表4-47BCD日期寄存器(BCDDATE)的设置寄存器地址R/W描述复位值BCDDATE0x01D70080(L)0x01D70083(B)R/W(bybyte)BC田期寄存器Undef.BCDDATE位描述初始化状态Reserved7:3一
18、DATEDATA2:0日期的BCD1从1到7一BCD月寄存器(BCDMON)的设置和位描述如下表4-49和表4-50所示:表4-49BCD月寄存器(BCDMON)的设置寄存器地址R/W描述复位值BCDMON0x01D70084(L)0x01D70087(B)R/W(bybyte)BCDi寄存器Undef.表4-50BCD月寄存器(BCDMON)的位描述BCDMON位描述初始化状态Reserved7:5一MONDATA4月的BCD1从0到1一3:00到9一BCD年寄存器(BCDYEAR)的设置和位描述如表4-51和4-52所示:表4-51BCD年寄存器(BCDYEAR)的设置寄存器地址R/W描述
19、复位值BCDYEAR0x01D70088(L)0x01D7008B(B)R/W(bybyte)BC群寄存器Undef.表4-52BCD年寄存器(BCDYEAR)的位描述BCDYEAR位描述初始化状态YEARDATA7:0年的BCD1从00到99一3)系统时间相关的API函数和系统时间相关的API函数请参考附录,在RTC.H中定义。程序中定义了如下结构:typedefstructU32year;U32month;U32day;U32date;U32hour;U32minute;U32second;structTime,*PstructTimetypedefstructU32year;U32mon
20、th;U32day;structDate,*PstructDatetypedefstructU32hour;U32minute;U32second;structClock,*PstructClockInitRtc()函数用来初始化RTC,Get_Rtc()和Set_Rtc()函数分别用来获取、设置当前完整的时间信息。还有Set_Rtc_Clock()和Set_Rtc_Date()S数可以分别设置时间、日期(维信科技,太原最好的IT培训)。在程序中可以用Rtc_IsTimeChange(掰数来判断某一个时间单位是否改变,据此决定是否读取时间。在图形模式下可以用Rtc_Format()函数来获得包
21、含时间信息的指定格式的Unicode编码字符串。六、实训步骤1、新建工程,将“Exp19多任务和系统时钟”中的源文件加入到该工程。2、打开Main.c文件,编辑Main_Task任务中的代码,创建一个时间显示文本框。在Main_Task任务中再创建一个新任务Rtc_Disp_Task,此任务负责更新显示系统时间。定义一个信号量Rtc_Updata_Sem,保证系统中多个任务访问或更新时问文本框时不发生冲突3、在Main_Task任务中启动消息循环,使用户可以通过键盘在文本框中编辑系统时间。Main_Task任务具体的程序流程图如图4-10所示:提示:1)需要编写CreateText()8数完成
22、时间显示文本框的创建,并在Main_Task中调用该函数。编辑CreateText()函数内容:定义键码表TimeKeyTable口,用CreateTextCtrl()函数创建文本框,然后用SetWndCtrlFocus()函数将焦点转移到该文本框,并用DrawTextCtrl()函数重画。注意,CreateTextCtrl()函数可以根据用户指定的键码表来完成键盘任务发出的键码到要显示字符的转换,由于本实验需要显示“:”,并指定键盘的“.”键用来输入“:”,所以需要另行定义键码表,并将TimeKeyTable作为参数传给CreateTextCtrl()(维信科技,太原最好的IT培训)。如果使
23、用默认键码表,对应参数赋0即可。2)信号量是uCOS-II任务之间的通信和同步机制之一,由信号量的计数值、等待该信号量的任务构成的等待任务表两部分构成。首先要调用OSSemCreate(旃数建立信号量,对信号量的初始计数值赋值。因为这里信号量是用于对共享资源的访问,其初值应该设为1。使用OSSemPend(两数等待信号量,如果信号量当前是可用的(信号量计数值大于0),该函数将信号量的计数值减1,并返回“无错”的错误代码。如果信号量的计数值为0,则调用OSSemPend(两数的任务要进入休眠状态,等待其他任务释放该信号量。OSSemPend(两数允许用户定义一个最长等待时间作为它的参数,这样可以避免该任务无休止的等待。如果该参数非0,则该任务一直等到信号量有效或超时;否则将一直等待下去。使用OSSemPost(由数发送一个信号量,它会检查是否有任务在等待该信号量。如果该信号量的等待任务列表非空,就将最高优先级的任务从等待任务列表中删除并使它进入就绪状态;然后调用任务调度函数检查该任务是否是系统中最高优先级的就绪任务,(维信科技,太原最好的IT培训)如果是则进行任务切换,否则调用OSSemPost()勺任务继续执行。如果没有任务在等待该
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2022年楚雄彝族自治州小学二年级语文第六单元考试试卷
- 2025年度租赁车辆合同终止及租赁行业发展趋势预测协议
- 2025短租租赁合同:商务空间租赁协议书
- 监利鸿源初中数学试卷
- 二零二五年度户外公益活动场地租赁协议
- 2025版鸭鸭苗养殖保险代理合同
- 二零二五年高管团队社会责任与公益事业合同
- 二零二五年度新型住宅房产买卖定金合同书
- 二零二五版机床设备采购及配套零部件供应合同
- 二零二五年度交通枢纽建设工程施工合同gf
- 《外存储设备》课件
- 城市排水设施安全检查与维护规定
- DB32T 2060-2024 单位能耗限额
- 装配式建筑(含吊装)专项施工方案
- 院前及创伤气道管理
- 采购行业五年规划
- 基孔肯雅热的临床特征
- 2024年云南省普洱市公开招聘警务辅助人员(辅警)笔试摸底备战测试(1)卷含答案
- 医院服务意识与沟通培训
- 2024年执业药师继续教育专业答案
- 委托经营管理合同协议书
评论
0/150
提交评论