L9-D20RTC实验

目录

20.1RTC简介

20.2Exynos4412下的RTC控制器

20.3RTC寄存器详解

20.4RTC编程

作业


20.1RTC简介

RTC(Real Time Clock)即实时时钟,它是一个可以为系统提供精确的时间基准的元器件,RTC一般采用精度较高的晶振作为时钟源,有些RTC为了在主电源掉电时还可以工作,需要外加电池供电。

L9-D20RTC实验_第1张图片

 

20.2Exynos4412下的RTC控制器

L9-D20RTC实验_第2张图片

 BCD码,四位二进制表示一位十进制数

例如:

十进制数:12,二进制位:1100, BCD码:0001 0010

L9-D20RTC实验_第3张图片

 

20.3RTC寄存器详解

L9-D20RTC实验_第4张图片

BCDSEC-BCDYEAR重点掌握,存储实际时间

ALMSEC-ALMYEAR设置预期时间

L9-D20RTC实验_第5张图片

 年:百十个位

L9-D20RTC实验_第6张图片

月:十个位

L9-D20RTC实验_第7张图片

 日:十个位

L9-D20RTC实验_第8张图片

 星期

星期与日地址手册写反了,星期+0x007C,日+0x0080,地址手册写反了

 L9-D20RTC实验_第9张图片

 L9-D20RTC实验_第10张图片

 L9-D20RTC实验_第11张图片

 L9-D20RTC实验_第12张图片

 用于设置中断挂起标志位

L9-D20RTC实验_第13张图片

 改时间用

20.4RTC编程

#include "exynos_4412.h"

int main()
{
	unsigned int OldSec = 0, NewSec = 0;

	/*使能RTC控制,RTCCON第0位置1*/
	RTCCON = RTCCON | 1;
	/*校准时间信息,不直接用二进制,C语言只支持10.8.16进制*/
	RTC.BCDYEAR = 0x023;
	RTC.BCDMON  = 0x12;
	RTC.BCDDAY  = 0x7;
	RTC.BCDWEEK = 0x31;
	RTC.BCDHOUR = 0x23;
	RTC.BCDMIN  = 0x59;
	RTC.BCDSEC  = 0x50;
	/*禁止RTC控制,关闭时间修改锁*/
	RTCCON = RTCCON &  (~(1));

	while(1)
	{
		NewSec = RTC.BCDSEC;
		if(OldSec != NewSec)
		{
			printf("20%x-%x-%x %x %x:%x:%x\n",RTC.BCDYEAR, RTC.BCDMON, RTC.BCDWEEK, RTC.BCDDAY, RTC.BCDHOUR, RTC.BCDMIN, RTC.BCDSEC);	
			OldSec = NewSec;
		}
	}
	return 0;
}

 

作业

编程实现通过LED状态显示当前电压范围,并打印产生低压警报时的时间
注:
电压在1501mv~1800mv时,LED2、LED3、LED4、LED5点亮
电压在1001mv~1500mv时,LED2、LED3、LED4点亮
电压在501mv~1000mv时,LED2、LED3点亮
电压在0mv~500mv时,LED2闪烁,且每隔一秒钟向终端打印一次当前的电压值及当前的时间

#include "exynos_4412.h"

#define LED2_ON    GPX2.DAT |= (1 << 7)
#define LED3_ON    GPX1.DAT |= 1
#define LED4_ON	   GPF3.DAT |= (1 << 4) 
#define LED5_ON	   GPF3.DAT |= (1 << 5) 
#define LED2_OFF   GPX2.DAT &= (~(1 << 7))
#define LED3_OFF   GPX1.DAT &= (~1)
#define LED4_OFF   GPF3.DAT &= (~(1 << 4))
#define LED5_OFF   GPF3.DAT &= (~(1 << 5))

void Delay(int time){
    while (time--);
}
int main()
{
	unsigned int AdcValue;

	/*设置ADC精度为12bit,第16位置1*/
	ADCCON = ADCCON | (1 << 16);
	/*使能ADC分频器,第14位置1*/
	ADCCON = ADCCON | (1 << 14);
	/*设置ADC分频值 ADC时钟频率=PLCK/(19+1)=5MHZ ADC转换频率=5MHZ/5=1MHZ*/
    /*刚上电时,默认是0xFF,先清零第6-13位,再放入19*/
	ADCCON = ADCCON & (~(0xFF << 6)) | (19 << 6);
	/*关闭待机模式,使能正常模式,第2位置0*/
	ADCCON = ADCCON & (~(1 << 2));
	/*关闭通过读使能AD转换*/
    /*第0位转换时设置*/
	ADCCON = ADCCON & (~(1 << 1));
	/*选择转换通道,3通道*/
	ADCMUX = 3;

    GPX2.CON = GPX2.CON & (~(0xF << 28)) | (0x1 << 28);//7[31:28]
    GPX1.CON = GPX1.CON & (~(0xF)) | (0x1);//1[3:0]
    GPF3.CON = GPF3.CON & (~(0xFF << 16)) | (0x11 << 16);//4[19:16]5[23:20]

    unsigned int OldSec = 0, NewSec = 0;

	/*使能RTC控制,RTCCON第0位置1*/
	RTCCON = RTCCON | 1;
	/*校准时间信息,不直接用二进制,C语言只支持10.8.16进制*/
	RTC.BCDYEAR = 0x023;
	RTC.BCDMON  = 0x12;
	RTC.BCDDAY  = 0x7;
	RTC.BCDWEEK = 0x31;
	RTC.BCDHOUR = 0x23;
	RTC.BCDMIN  = 0x59;
	RTC.BCDSEC  = 0x50;
	/*禁止RTC控制,关闭时间修改锁*/
	RTCCON = RTCCON &  (~(1));

	while(1)
	{
		/*开始转换,设置第0位为1*/
		ADCCON = ADCCON | 1;
		/*等待转换完成,看15位是1还是0*/
		while(!(ADCCON & (1 << 15)));
		/*读取转换结果,低12位*/
		AdcValue = ADCDAT & 0xFFF;
		/*将结果转换成实际的电压值mv,0.44=1800/4096*/
		AdcValue = AdcValue * 0.44;
		/*打印转换结果*/
		printf("AdcValue = %dmv\n",AdcValue);

        NewSec = RTC.BCDSEC;

        if((AdcValue>0)&(AdcValue<=500))
        {
            if(OldSec != NewSec)
		    {
			printf("20%x-%x-%x %x %x:%x:%x\n",RTC.BCDYEAR, RTC.BCDMON, RTC.BCDWEEK,     RTC.BCDDAY, RTC.BCDHOUR, RTC.BCDMIN, RTC.BCDSEC);	
			OldSec = NewSec;
		    }

            /*LED2闪烁*/
            LED3_OFF;
			LED4_OFF;
			LED5_OFF;
            LED2_ON;
			Delay(1000000);
			LED2_OFF;
			Delay(1000000);
       
        }
        else if((AdcValue>500)&(AdcValue<=1000))
        {
            /*LED2 ,LED3点亮*/
            LED3_OFF;
			LED4_OFF;
			LED5_OFF;
			LED2_ON;
			LED3_ON;
        }
        else if((AdcValue>1000)&(AdcValue<=1500))
        {           
            /*LED2、LED3、LED4点亮*/
            LED5_OFF;
			LED2_ON;
			LED3_ON;
			LED4_ON;
        }
        else((AdcValue>1500)&(AdcValue<=1800))
        {
            /*LED2、LED3、LED4、LED5点亮*/
            LED2_ON;
			LED3_ON;
			LED4_ON;
			LED5_ON;
        }
     
	}
	return 0;
}

 

你可能感兴趣的:(华清远见,单片机,嵌入式硬件)