嵌入式 实验5 RTC实验

合集下载

嵌入式操作系统实验报告

嵌入式操作系统实验报告

《嵌入式操作系统》实验报告班级计算机学号姓名指导教师庄旭菲内蒙古工业大学信息工程学院计算机系2018年6月实验一 Linux内核移植与编译实验1. 实验目的了解 Linux 内核相关知识与内核结构了解 Linux 内核在 ARM 设备上移植的基本步骤和方法掌握 Linux 内核裁剪与定制的基本方法2. 实验内容分析 Linux 内核的基本结构,了解 Linux 内核在 ARM 设备上移植的一些基本步骤及常识。

学习 Linux 内核裁剪定制的基本配置方法,利用 UP-Magic210 型设备配套 Linux 内核进行自定义功能(如helloworld 显示)的添加,并重新编译内核源码,生成内核压缩文件 zImage,下载到 UP-Magic210 型设备中测试。

3. 实验步骤实验目录:/UP-Magic210/SRC/kernel/编译内核:在宿主机端为UP-Magic210 设备的Linux 内核编写简单的测试驱动(内核)程序并修改内核目录中相关文件,添加对测试驱动程序的支持。

(1)、使用 vim 编辑器手动编写实验代码内如如下:#include <linux/>#include <linux/>MODULE_LICENSE("Dual BSD/GPL");(3)、进入实验内核源码目录修改 driver/char/目录下的 Makefile 文件,按照内核中Makefile 语法添加 helloworld程序的编译支持[root@localhost vi drivers/char/Makefile在 Makefile 中(大约在 91 行)添加如下一行obj-$(CONFIG_TOSHIBA) +=obj-$(CONFIG_I8K) +=obj-$(CONFIG_DS1620) +=obj-$(CONFIG_HW_RANDOM) += hw_random/obj-$(CONFIG_HELLO_MODULE) +=obj-$(CONFIG_PPDEV) +=(4)、运行 make menuconfig 配置内核对 helloworld 程序的支持:[root@localhost make distclean[root@localhost make menuconfig先加载内核配置单,如图:然后进入到 Device Drivers --->菜单中如图:进入到 Character devices--->如图:进入该菜单会发现[ ] Hello World Test 选项,按下空格将其静态编译进内核退出保存内核配置(5)、重新编译内核在内核源码的顶层目录下编译内核[root@localhost makescripts/kconfig/conf -s arch/arm/KconfigCHK include/linux/CHK include/generated/make[1]:“include/generated/”是最新的。

嵌入式实验:实时时钟实验

嵌入式实验:实时时钟实验
{
Irq_Request(IRQ_RTC, rtc_int_isr);
rRTCCON = 0x01;
rALMYEAR = p_date->year;
rALMMON = p_date->mon;
rALMDATE = p_date->day;
rALMHOUR = p_date->hour;
rALMMIN = p_date->min;
// Argument : p_date,待设置的日期
*****************************************************************************/
void rtc_set_date(st_date* p_date)
{
rRTCCON = 0x01;
Irq_Enable(IRQ_TICK);
}
/*****************************************************************************
// Function name: rtc_alarm_set
// Description:设置S3C2410的告警时间以及方式
rRTCCON = 0x00;
}
/*****************************************************************************
// Function name: rtc_get_date
// Description:获取实时时钟当前时间、日期
/*表示日期、时间的数据结构*/
typedef struct ST_DATE

嵌入式实验报告5

嵌入式实验报告5

CVT6410按键中断实验一、实验目的1. 熟悉RVDS2.2开发环境。

2. 掌握S3C6410内部相关寄存器的操作方法,最终实现对外部设备的控制。

3. 熟悉在ARM裸机环境下的C语言编程。

4. 熟悉S3C6410按键中断的原理以及编程。

二、实验内容建立RVDS开发环境。

利用按键中断实现对开发板上发光二极管LED的跑马灯控制。

三、实验设备1. 硬件:CVT6410教学实验箱、PC机;2. 软件:PC机操作系统Windows 98(2000、XP) +RVDS开发环境。

3. JLINK仿真器。

四、基础知识中断的基本概念:CPU与外设之间传输数据的控制方式通常有三种:查询方式、中断方式和DMA方式。

查询方式的优点是硬件开销小,使用起来比较简单。

但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,CPU就只能循环等待,不能执行其它程序,这样就浪费了CPU的大量时间,降低了CPU的利用率。

为了解决这个矛盾,通常采用中断传送方式:即当CPU进行主程序操作时,外设的数据已存入输入端口的数据寄存器;或端口的数据输出寄存器已空,由外设通过接口电路向CPU发出中断请求信号,CPU在满足一定的条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后CPU再返回并继续执行原来被中断的主程序。

这样CPU就避免了把大量时间耗费在等待、查询状态信号的操作上,使其工作效率得以大大地提高。

能够向CPU 发出中断请求的设备或事件称为中断源。

系统引入中断机制后,CPU 与外设(甚至多个外设)处于“并行”工作状态,便于实现信息的实时处理和系统的故障处理。

中断方式的原理示意图如下所示。

图5-7 中断处理示意图1)中断响应中断源向CPU发出中断请求,若优先级别最高,CPU在满足一定的条件下,可以中断当前程序的运行,保护好被中断的主程序的断点及现场信息。

然后,根据中断源提供的信息,找到中断服务子程序的入口地址,转去执行新的程序段,这就是中断响应。

嵌入式实训课实验报告

嵌入式实训课实验报告

一、实验背景嵌入式系统在现代工业、消费电子、智能家居等领域扮演着越来越重要的角色。

为了让学生深入了解嵌入式系统的设计原理和开发过程,提高学生的实践能力和创新精神,我们开设了嵌入式实训课程。

本次实验报告将针对实训课程中的部分实验进行总结和分析。

二、实验目的1. 掌握嵌入式系统的基本原理和开发流程。

2. 熟悉嵌入式开发工具和环境。

3. 熟练使用C语言进行嵌入式编程。

4. 学会调试和优化嵌入式程序。

三、实验内容本次实训课程共安排了五个实验,以下是每个实验的具体内容和实验步骤:实验一:使用NeoPixel库控制RGB LED灯带1. 实验目的:学习使用NeoPixel库控制RGB LED灯带,实现循环显示不同颜色。

2. 实验步骤:(1)搭建实验平台,连接NeoPixel LED灯带。

(2)编写程序,初始化NeoPixel库,设置LED灯带模式。

(3)通过循环,控制LED灯带显示不同的颜色。

实验二:使用tm1637库控制数码管显示器1. 实验目的:学习使用tm1637库控制数码管显示器,显示数字、十六进制数、温度值以及字符串,并实现字符串滚动显示和倒计时功能。

2. 实验步骤:(1)搭建实验平台,连接tm1637数码管显示器。

(2)编写程序,初始化tm1637库,设置显示模式。

(3)编写函数,实现数字、十六进制数、温度值的显示。

(4)编写函数,实现字符串滚动显示和倒计时功能。

实验三:使用ds18x20库和onewire库读取DS18B20温度传感器的数据1. 实验目的:学习使用ds18x20库和onewire库读取DS18B20温度传感器的数据,并输出温度值。

2. 实验步骤:(1)搭建实验平台,连接DS18B20温度传感器。

(2)编写程序,初始化ds18x20库和onewire库。

(3)编写函数,读取温度传感器的数据,并输出温度值。

实验四:使用ESP32开发板连接手机热点,并实现LED1作为连接指示灯1. 实验目的:学习使用ESP32开发板连接手机热点,并通过LED1指示灯显示连接状态。

嵌入式技术及应用实验报告

嵌入式技术及应用实验报告

嵌入式技术及应用实验报告嵌入式技术及应用实验报告一、实验目的本实验旨在通过学习嵌入式技术及应用,掌握嵌入式系统的基本原理和应用方法,培养学生的嵌入式系统设计和开发能力。

二、实验内容1. 嵌入式系统的概念和特点2. 嵌入式系统的硬件平台和软件开发环境3. 嵌入式系统的应用案例分析4. 嵌入式系统的设计和开发实践三、实验原理1. 嵌入式系统的概念和特点嵌入式系统是一种专门设计用于特定应用领域的计算机系统,它通常由硬件和软件两部分组成。

嵌入式系统的特点包括:实时性要求高、资源受限、功耗低、体积小、成本低等。

2. 嵌入式系统的硬件平台和软件开发环境嵌入式系统的硬件平台通常由处理器、存储器、输入输出设备等组成。

常用的处理器有ARM、MIPS等,存储器包括RAM、ROM、Flash等,输入输出设备有键盘、显示器、传感器等。

嵌入式系统的软件开发环境包括编译器、调试器、仿真器等工具。

3. 嵌入式系统的应用案例分析嵌入式系统广泛应用于各个领域,如智能手机、汽车电子、医疗设备、工业控制等。

以智能手机为例,它是一种集成了通信、计算、娱乐等功能的嵌入式系统,通过操作系统和应用软件实现各种功能。

4. 嵌入式系统的设计和开发实践嵌入式系统的设计和开发包括硬件设计和软件开发两个方面。

硬件设计主要包括电路设计、PCB设计等,软件开发主要包括驱动程序开发、应用程序开发等。

在设计和开发过程中,需要考虑系统的性能、可靠性、安全性等因素。

四、实验步骤1. 学习嵌入式系统的概念和特点,了解嵌入式系统的基本原理。

2. 学习嵌入式系统的硬件平台和软件开发环境,掌握常用的处理器、存储器和输入输出设备。

3. 分析嵌入式系统的应用案例,了解不同领域的嵌入式系统的设计和开发方法。

4. 进行嵌入式系统的设计和开发实践,包括硬件设计和软件开发两个方面。

5. 调试和测试嵌入式系统,验证系统的功能和性能。

6. 总结实验结果,撰写实验报告。

五、实验结果与分析通过本次实验,我对嵌入式系统的概念和特点有了更深入的了解。

嵌入式实验报告

嵌入式实验报告

目录嵌入式系统实践实验报告1(使用GCC编译C语言程序) (1)嵌入式系统实践实验报告2(Linux 中通过minicom串口下载程序) (14)嵌入式系统实践实验报告1五、实验结果与分析(含程序、数据记录及分析和实验总结等):图5-1 实验结果截图1图5-2 实验结果截图2图5-3 实验结果截图3 图5-4 实验结果截图4图5-5 实验结果截图5 图5-6 实验结果截图6图5-7 实验结果截图7 图5-8 实验结果截图8图5-9 实验结果截图9图5-10 实验结果截图10本次实验按照实验步骤进行,完全符合实验要求,达到了实验预期。

嵌入式系统实践实验报告2二、实验环境:硬件:Mini6410嵌入式实验平台。

软件:PC机操作系统CentOS+Minicom+Arm-Linux 交叉编译环境。

图2-1 嵌入式开发板顶视图四、实验步骤:1.建立工作目录图4-1此时我们新建的hello工作目录,在home目录下,已出现,说明,我们此次操作成功(这里我们要注意,记清楚自己在创建目录时,所在的位置),如下图所示:图4-2编写程序源代码在Linux 下的文本编辑器有许多,常用的是vi 和Xwindow界面下的gedit 等,我们在开发过程中推荐使用vi。

hello.c 源代码较简单,如下:/*****hello.c*****/#include <stdio.h>int main(){printf("Hello,World!\n");return0;}我们可以是用下面的命令来编写hello.c 的源代码,进入hello 目录使用vi 命令来编辑代码(如果不会使用vi命令来编辑,我们也可以使用gedit命令来编辑hello.c文件,命令为:gedithello.c)vi命令中常用命令有: esc i :wq :q!图4-3按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按Esc 键进入命令状态,再用命令“:wq”保存并退出。

《嵌入式系统原理与应用》实验报告05-定时器实验

《嵌入式系统原理与应用》实验报告05-定时器实验

《嵌入式系统原理与应用》实验报告实验序号:5 实验项目名称:定时器实验11计算机学号XXX 姓名XX 专业、班实验地点实验楼1#416 指导教师XX 实验时间2013-5-10一、实验目的1. 掌握LPC2200 专用工程模板的使用;2. 熟悉LPC2000 系列ARM7 微控制器的VIC的使用;3. 熟悉LPC2000 系列ARM7 微控制器的定时器的控制。

二、实验设备(环境)及要求硬件:PC机;软件:PC机操作系统windows XP,ADS1.2集成开发环境,Proteus软件。

三、实验内容与步骤实验内容:设置P0.2 脚为GPIO 功能,外接一个LED灯。

配置并初始化ARM的定时器0,并使能定时器中断,中断服务程序在2秒钟将LED灯控制输出信号取反,然后清除中断标志并退出中断。

四、实验结果与数据处理1.实验效果截图2.源程序#include "config.h"void __irq Timer0_ISR(void) {if((IO0SET&0x00000004)==0) IO0SET=0x00000004;elseIO0CLR=0x00000004;T0IR=0x01;VICVectAddr=0;}int main (void){PINSEL0&=0xFFFFFFCF;IO0DIR |=0x00000004;T0TC=0;T0PR=0;T0MCR=0x03;T0MR0=Fpclk/2.5;T0TCR=0x01;VICIntSelect=VICIntSelect&(~(1<<4)); VICVectCntl0=0x20|4;VICVectAddr0=(uint32)Timer0_ISR; VICIntEnable=(1<<4);}3.流程图开始设置Timer0_ISR函数定时器0定时中五、分析与讨论又忘了打开中断开关。

还有就是取反操作中IO0SET不能为IO0PIN不然会一直亮,这个比较不能理解,又是虚拟环境问题。

嵌入式系统实验指导书(6个实验)

嵌入式系统实验指导书(6个实验)

嵌入式系统实验指导书襄樊学院物理与电子信息学院实验要求1.进入实验室前完成的部分1)认真阅读实验指导书,弄懂实验原理和实验内容。

2)编写实验所要用到的程序,将其放在U盘上。

3)写出预习报告。

2. 进入实验室后完成的部分1)建立工程,加入已准备好的程序文件。

2)对程序进行调试,修改错误,获得要求的结果。

3)保存调试后的程序。

3.实验结束后的部分对实验结果进行分析、总结,写出实验报告。

实验报告内容及格式1.实验目的2.实验设备3.实验原理及环境4.实验内容只做文字叙述,程序部分放在程序清单中。

流程图也可不画。

5.程序清单本实验使用的完整程序。

如果使用了本实验或前面实验中完全相同的子程序,可不列写,只做注明即可。

6.实验步骤7.实验总结主要包括对实验结果、调试过程、错误及产生的原因的分析,以及本次实验的重要收获等。

此项为实验成绩评定的重要依据。

实验1 Keil C51的使用(汇编语言)实验目的:初步掌握Keil C51(汇编语言)和ZY15MCU12BD型综合单片机实验箱的操作和使用,能够输入和运行简单的程序。

实验设备:ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装Keil C51的计算机一台。

实验原理及环境:在计算机上已安装Keil C51软件。

这个软件既可以与硬件(ZY15MCU12BD型综合单片机实验箱)连接,在硬件(单片机)上运行程序;也可以不与硬件连接,仅在计算机上以虚拟仿真的方法运行程序。

如果程序有对硬件的驱动,就需要与硬件连接;如果没有硬件动作,仅有软件操作,就可以使用虚拟仿真。

实验内容:1.掌握软件的开发过程:1)建立一个工程项目选择芯片确定选项。

2)加入C 源文件或汇编源文件。

3)用项目管理器生成各种应用文件。

4)检查并修改源文件中的错误。

5)编译连接通过后进行软件模拟仿真。

6)编译连接通过后进行硬件仿真。

2.按以上步骤实现在P1.0输出一个频率为1Hz的方波。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验5-1 实时时钟设计实验1、实验目的了解S3C2410A 的实时时钟硬件控制原理及设计方法。

掌握S3C2410A 的实时时钟的使用方法2、实验内容编程实现实时时钟功能,每秒显示实时时钟实现实时时钟Alarm,控制蜂鸣器3、实验设备GEC2410 开发板ADS1.2 集成开发环境,ARM 仿真器、串口连接线4、实验原理实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号和参数设置存储电路。

RTC 具有计时准确、耗电低和体积小的特点,特别是在各种嵌入式系统中用于记录事件发生的时间和相关信息,如通信工程、电力自动化、工业控制等自动化程度高的领域无人职守环境。

随着集成电路技术的不断发展,RTC 器件的新品也不断推出,这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D 数据采集通道等。

4.1 S3C2410A 实时时钟模块介绍S3C2410A 实时时钟单元模块在系统电源掉电的时候可以通过备份电源来完成供电。

RTC 提供8bit 时间数据。

其中包括秒、分、时、日、星期、月、年等时间信息。

RTC 要有外部晶振提供32.768kHZ 的外部时钟。

RTC 也可以提供闹钟定时的功能。

1.特点:BCD 数字,:秒、分、时、日、星期、月、年.定时功能。

解除了千年虫的问题。

独立的电源引脚支持毫秒时钟2.读/写寄存器访问RTC 模块的寄存器,首先要设RTCCON 的bit0 为1,CPU 通过读取RTC 模块中寄存器BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDMON 和BCDYEAR 的值,得到当前的相应时间值,然而,由于多个寄存器依次读出,所以有可能产生错误。

例如:用户依次读取年(18)、月(12)、日(31)、时(23)、分(59)、秒(59)。

当秒数为1 到59时没有任何问题,但是当秒数为0 时,但前时间和日期就变成了19 年1 月1 日0 时0 分。

这种情况下(秒数为0),用户应该重新读取年份到分钟的值。

3.闹钟功能RTC 在制定的时间产生报警信号,包括CPU 工作在正常模式和休眠模式(power off)下,在正常工作模式下,报警中断信号(ALMINT)被激活。

在休眠模式,报警中断信号和唤醒信号(PMWKUP)同时被激活。

RTC 报警寄存器(RTCALM)决定报警功能的使能/ 屏蔽和完成报警时间检测。

4.时间片中断RTC 时间片中断用于中断请求。

寄存器TICNT 有一个中断使能位和中断计数。

中断计数自动递减,当达到0 时,则产生中断,中断周期按照下列公式计算:Period=(n+1)/128 second其中,n 为RTC 时钟中断计数,课取值1~1274.2 实时时钟的寄存器实时时钟的特殊寄存器主要有RTC控制寄存器(RTCCON)、TICK计数寄存器(TICNT)、RTC 定时寄存器(RTCALM)还有6 个定时时间寄存器和7 个BCD 时间寄存器。

主要时用来设置时间常数和读取当前的时间。

在具体应用的过程中主要时注意三个控制寄存器的应用:RTCCON――实时时钟控制寄存器这个寄存器中比较关键的是RTCEN 位,这一位用来使能RTC 模块时间寄存器的读写,在对RTC 的寄存器操作之前一定要把这一位置1,在系统电源关闭的时候这一位要置0,用来防止对寄存器的误操作。

TICNT ――Tick 时钟计数寄存器这个寄存器主要时来控制产生实时时钟中断的频率,可以设置的频率是1 到128。

寄存器中还有一位是中断使能位。

BCDSEC――BCD 秒数据寄存器BCDMIN――BCD 分数据寄存器BCDGOUR――BCD 小时数据寄存器BCDDATE――BCD 日数据寄存器BCDDAY――BCD 星期数据寄存器BCDMON――BCD 月数据寄存器BCDYEAR――BCD 年数据寄存器RTCALM ――RTC 定时控制寄存器这个寄存器用来使能定时功能。

在这个寄存器中可以对年、月、日、分、秒等时间信息分别定时控制,可以最大限度满足用户的需求。

ALMSEC――闹钟秒数据寄存器ALMMIN――闹钟分钟数据寄存器ALMHOUR――闹钟小时数据寄存器ALMDATE――闹钟日数据寄存器ALMMON――闹钟月份寄存器ALMYEAR――闹钟年份数据寄存器5、程序实现5.1 设置闹钟时间void setRTCalm(U8 almyear,U8 almmon,U8 almdate,U8 almhour,U8 almmin,U8 almsec)//年、月、日、时、分、秒{ rRTCCON=0x0001;rALMYEAR = almyear;rALMMON = almmon;rALMDATE = almdate;rALMHOUR = almhour;rALMMIN = almmin;rALMSEC = almsec;rRTCCON = 0; //disable RTC write}5.2 设置时钟时间void setRTCtime(U8 wRTCyear,U8 wRTCmon,U8 wRTCdate,U8 wRTCday,U8 wRTChour,U8 wRTCmin,U8 wRTCsec)//年、月、日、星期、时、分、秒{rRTCCON=0x01;rBCDYEAR = wRTCyear;rBCDMON = wRTCmon;rBCDDATE = wRTCdate;rBCDDAY = wRTCday;rBCDHOUR = wRTChour;rBCDMIN = wRTCmon;rBCDSEC = wRTCsec;rRTCCON = 0x00; //disable RTC write}5.3 时钟和闹钟的开关操作//开实时时钟void OpenRtc(void){pISR_TICK=(unsigned)Tick_Isr;rTICNT=0xFF;//Tick time interrupt enable;Tick time count value=127EnableIrq(BIT_TICK);//open RTC TICK INTERRUPT}//关实时时钟void CloseRtc(void){rTICNT &= ~(1<<7);DisableIrq(BIT_TICK);}//开闹钟函数void OpenAlarm(){pISR_RTC = (unsigned)IsrAlarm;ClearPending(BIT_RTC);rRTCALM = (0x7f); //enable alarmEnableIrq(BIT_RTC);}//关闹钟函数void CloseAlarm(void){rRTCALM = 0; //disable alarmDisableIrq(BIT_RTC);}5.4 利用实时时钟中断,显示当前时间void __irq Tick_Isr(void){Get_Rtc();Uart_Printf("RTC TIME : %4x-%02x-%02x - %s –%02x:%02x:%02x\n",year,month,date,week[weekday],hour,min,sec); ClearPending(BIT_TICK);}void Get_Rtc(void){rRTCCON = 0x01; //RTC 读写使能,选择BCD 时钟、计数器,无复位,1/32768 if (rBCDYEAR == 0x99)year = 0x1999;elseyear = 0x2000 + rBCDYEAR;month=rBCDMON;date=rBCDDATE;weekday=rBCDDAY;hour=rBCDHOUR;min=rBCDMIN;sec=rBCDSEC;rRTCCON = 0x0; //RTC 读写禁止,选择BCD 时钟、计数器,无复位,1/32768 }5.5 实时时钟闹钟中断void __irq IsrAlarm(void){ClearPending(BIT_RTC);Uart_Printf("s3c244A RTCALM oucer \n");enable_beep = 0;CloseAlarm();}5.6 主程序void xmain(void){ChangeClockDivider(3,1);ChangeMPllValue(0xa1,0x3,0x1); //Uart_Init(0, 115200);Uart_Select(0);Uart_Printf("the main is running\n");setRTCalm(06,04,15,1,5,1);//年、月、日、时、分、秒setRTCtime(06,04,15,2,1,4,29);//年、月、日、星期、时、分、秒OpenAlarm();OpenRtc();while(1);}6、实验步骤1. 连接好实验环境.2. 将串口线一端接到PC 机,另一端接到GEC2410 的UART0 接口(即P1 口);打开串口超级终端dnw.exe,设置串口Baud Rate 为115200,选择COM1。

3. 重起GEC2410,开发板会执行flash 中的BIOS 程序,选择GEC2410_RTC 目录下的可执行映象文件GEC2410_RTC.bin 将该文件下载到SDRAM。

4. 下载结束后,会提示是否要立即运行,这时输入“Y”,执行GEC2410_RTC.bin。

5. 在dnw 中观察实验结果。

7、实验要求(1)利用ticktime中断,控制LED灯每1s变化一次,并显示当前时间。

#include "2410lib.h"#include "2410addr.h"#include "def.h"#define GPFCON *(volatile unsigned int *)0x56000050#define GPFDAT *(volatile unsigned int *)0x56000054#define GPFUP *(volatile unsigned int *)0x56000058int i;int year;int month,date,weekday,hour,min,sec;void __irq RTC_ISR(void);/******************************************************************** Function name: Rtc_InitParameter : voidDescription : 实时时钟初始化程序Return : voidArgument : 设置当前时钟Autor & date :********************************************************************* /void Rtc_Init(void) //年、月、日、星期、时、分、秒{rRTCCON=1;rBCDYEAR=0x18;rBCDMON=0x05;rBCDDATE=0x30;rBCDDAY=0x03;rBCDHOUR=0x15;rBCDMIN=0x20;rBCDSEC=0x00;rRTCCON=0;}/******************************************************************** Function name: Display_RtcParameter : voidDescription : 实时时钟显示程序Return : voidArgument : 读出当前的时间,然后显示Autor & date :********************************************************************* /void Get_Rtc(void){rRTCCON=1;year = 0x2000 + rBCDYEAR;month=rBCDMON;date=rBCDDATE;weekday=rBCDDAY;hour=rBCDHOUR;min=rBCDMIN;sec=rBCDSEC;rRTCCON=0;}/******************************************************************** *******Function name: MainParameter : voidDescription : 初始化系统,串口,并调用RTC实验函数Return : voidArgument :Autor & date :********************************************************************* *******/void xmain(void){ChangeClockDivider(1,1);ChangeMPllValue(0xa1,0x3,0x1);Port_Init();Uart_Select(0);Uart_Init(0,115200);Uart_Printf("s3c2410x RTC Test\n");Rtc_Init(); //实时时钟初始化ClearPending(BIT_TICK); //Tick中断初始化EnableIrq(BIT_TICK);pISR_TICK=(unsigned)RTC_ISR;rTICNT=0xff;while(1);}/******************************************************************** *****/void __irq RTC_ISR(void){char *week[8] = { "","SUN","MON", "TUES", "WED", "THURS","FRI", "SAT" } ;ClearPending(BIT_TICK);i++;Get_Rtc(); //读时间并显示Uart_Printf("RTC TIME : %04x-%02x-%02x - %s- %02x:%02x:%02x\n",year,month,date,week[weekday],hour,min,sec);rGPFDAT=0xff;if(i==1) //控制LED灯状态变化rGPFDAT=0x00;Delay(5000);rGPFDAT=0xff;Delay(5000);rGPFDAT=0x00;}(2)利用报警中断,使启动2分钟后报警(蜂鸣器响)#include "2410lib.h"#include "2410addr.h"#include "def.h"char *week[8] = { "","SUN","MON", "TUES", "WED", "THURS","FRI", "SAT" } ; int year,month,date,weekday,hour,min,sec;int enable_beep = 1;extern void Buzzer_PWM_Run(void);void __irq Alarm_Isr(void);void __irq Tick_Isr(void);void Buzzer_Stop( void ){rGPBCON |= 1;rGPBCON = rGPBCON & ~3|1; //set GPB0 as outputrGPBDAT &= ~1;//output 0}void setRTCalm(U8 almyear,U8 almmon,U8 almdate,U8 almhour,U8 almmin,U8 almsec)//设置ALARM 时间{rRTCCON = 0x0001;rALMYEAR = almyear;rALMMON = almmon;rALMDATE = almdate;rALMHOUR = almhour;rALMMIN = almmin;rALMSEC = almsec;rRTCCON = 0x0000;}void setRTCtime(U8 wRTCyear,U8 wRTCmon,U8 wRTCdate,U8 wRTCday,U8 wRTChour,U8 wRTCmin,U8 wRTCsec)//置时钟时间{rRTCCON = 0x0001;rBCDYEAR = wRTCyear;rBCDMON = wRTCmon;rBCDDATE = wRTCdate;rBCDDAY = wRTCday;rBCDHOUR = wRTChour;rBCDMIN = wRTCmin;rBCDSEC = wRTCsec;rRTCCON = 0x0000;}void OpenRtcTick(void)//open rtc tick, 1s{pISR_TICK = (unsigned)Tick_Isr;rTICNT = 0xff;EnableIrq(BIT_TICK);}void CloseRtcTick(void)//close rtc tick{rTICNT &= ~(1<<7);DisableIrq(BIT_TICK);}void OpenAlarm()//open rtc alarm{pISR_RTC = (unsigned)Alarm_Isr;ClearPending(BIT_RTC);rRTCALM = (0x7f);EnableIrq(BIT_RTC);}void CloseAlarm(void)//close rtc alarm{rRTCALM = 0;DisableIrq(BIT_RTC);}void Get_Rtc(void)// get rtc{rRTCCON = 0x01;if (rBCDYEAR == 0x99)year = 0x1999;elseyear = 0x2000 + rBCDYEAR;month=rBCDMON;date=rBCDDATE;weekday=rBCDDAY;hour=rBCDHOUR;min=rBCDMIN;sec=rBCDSEC;rRTCCON = 0x0;}/****************************************************/ void xmain(void){ChangeClockDivider(1,1);ChangeMPllValue(0xa1,0x3,0x1);Port_Init();Uart_Select(0);Uart_Init(0,115200);Uart_Printf("the main is running\n");setRTCalm(0x18,0x06,0x04,0x15,0x19,0x20); //设置闹钟时间setRTCtime(0x18,0x06,0x04,0x02,0x15,0x17,0x20); //设置系统时间OpenAlarm(); //开启闹钟中断OpenRtcTick(); //开启节拍中断while(1);}void __irq Alarm_Isr(void){ClearPending(BIT_RTC);Uart_Printf("s3c244A RTCALM oucer \n");Buzzer_PWM_Run(); //闹钟响Delay(8000);Buzzer_Stop(); //闹钟不响}void __irq Tick_Isr(void){ClearPending(BIT_TICK);Get_Rtc(); //读时间并显示Uart_Printf("%04x-%02x-%02x %s %02x-%02x-%02x\n",year,month,date,week[weekday],hour,min,sec);}(3)利用菜单实现设时间、读时间、启动闹钟、启动节拍等控制。

相关文档
最新文档