⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dm642mainr.c

📁 奇想达QXD-DM642开发板提供的读写rtc实时时钟源码。
💻 C
字号:
/******************************************************/
/*  深圳市奇想达科技有限公司QXD-DM642开发板源程序     */
/*  网址:http://www.szqxd.com						  */
/******************************************************/


#include <csl.h>
#include <std.h>
#include <csl_emifa.h>
#include <csl_i2c.h>
#include <csl_gpio.h>
#include <csl_irq.h>
#include <csl_chip.h>
#include <stdio.h>

#include "TestLight.h"
#include "QXDdm642.h"
#include "QXDdm642_eeprom.h"
#include "QXDdm642_rtc.h"


/*QXDDM642的emifa的设置结构*/
EMIFA_Config QXDdm642ConfigA ={
	   0x00052078,/*gblctl EMIFA(B)global control register value */
	   			  /*将CLK6、4、1使能;将MRMODE置1;使能EK2EN,EK2RATE*/
	   0xffffffd3,/*cectl0 CE0 space control register value*/
	   			  /*将CE0空间设为SDRAM*/
	   0x73a28e01,/*cectl1 CE1 space control register value*/
	   			  /*Read hold: 1 clock;
	   			    MTYPE : 0000,选择8位的异步接口
	   			    Read strobe :001110;14个clock宽度
	   			    TA:2 clock; Read setup 2 clock;
	   			    Write hold :2 clock; Write strobe: 14 clock
	   			    Write setup :7 clock
	   			    --					 ---------------
	   			  	  \		 14c		/1c
	   			 	   \----------------/ */
	   0x22a28a22, /*cectl2 CE2 space control register value*/
       0x22a28a42, /*cectl3 CE3 space control register value*/
	   0x57115000, /*sdctl SDRAM control register value*/
	   0x0000081b, /*sdtim SDRAM timing register value*/
	   0x001faf4d, /*sdext SDRAM extension register value*/
	   0x00000002, /*cesec0 CE0 space secondary control register value*/
	   0x00000002, /*cesec1 CE1 space secondary control register value*/
	   0x00000002, /*cesec2 CE2 space secondary control register value*/
	   0x00000073 /*cesec3 CE3 space secondary control register value*/	
};

/*QXDDM642的IIC的设置结构*/
I2C_Config QXDDM642IIC_Config = {
    0,  /* master mode,  i2coar;采用主模式   */
    0,  /* no interrupt, i2cimr;只写,不读,采用无中断方式*/
    (20-5), /* scl low time, i2cclkl;  */
    (20-5), /* scl high time,i2cclkh;  */
    1,  /* configure later, i2ccnt;*/
    0,  /* configure later, i2csar;*/
    0x4ea0, /* master tx mode,     */
            /* i2c runs free,      */
            /* 8-bit data + NACK   */
            /* no repeat mode      */
    (75-1), /* 4MHz clock, i2cpsc  */
};

CHIP_Config QXDDM642percfg = {
	CHIP_VP2+\
	CHIP_VP1+\
	CHIP_VP0+\
	CHIP_I2C+\
	CHIP_MCASP0
};


QXDDM642_RTC_Config rtcCfg = {
	0x2004,
	0x0010,
	0x0027,
	(0x0010 + RTC_X1226_24),/*采用24小时的模式*/
	0x0057,
	0x0021,
	0x0003
};

I2C_Handle hQXDdm642i2c;
extern far void vectors();
Uint32 rtcregvalue = 0;
Uint16 buffer[0x100];
void rtc_delay(Uint32 delay)
{
	Uint32 i = 0;
	for(i = 0; i<delay;i++)
	{
		QXDDM642_waitusec(10000);
	}	
}
/*此程序可将四个采集口的数据经过Video Port0送出*/
void main()
{
/*-------------------------------------------------------*/
/* perform all initializations                           */
/*-------------------------------------------------------*/
	/*Initialise CSL,初始化CSL库*/
	CSL_init();
	CHIP_config(&QXDDM642percfg);
/*----------------------------------------------------------*/
	/*EMIFA的初始化,将CE0设为SDRAM空间,CE1设为异步空间
	 注,DM642支持的是EMIFA,而非EMIF*/
	EMIFA_config(&QXDdm642ConfigA);
/*----------------------------------------------------------*/
	/*中断向量表的初始化*/
	//Point to the IRQ vector table
    IRQ_setVecs(vectors);
    IRQ_nmiEnable();
    IRQ_globalEnable();
    IRQ_map(IRQ_EVT_VINT1, 11);
    IRQ_map(IRQ_EVT_VINT0, 12);
    IRQ_reset(IRQ_EVT_VINT1);
    IRQ_reset(IRQ_EVT_VINT1);	
/*----------------------------------------------------------*/	
	GPIO_RSET(GPGC,0x0);/*将GPIO0不做为GPINT使用*/
	GPIO_RSET(GPDIR,0x1);/*将GPIO0做为输出*/
	GPIO_RSET(GPVAL,0x1);/*GPIO0输出为高,选择IIC1总线*/
	QXDDM642_waitusec(100);
	/*AIC23B的初始化*/
	hQXDdm642i2c = I2C_open(I2C_PORT0,I2C_OPEN_RESET);
	I2C_config(hQXDdm642i2c,&QXDDM642IIC_Config);  
	
	
	
	/*测试QXD-DM642的LED*/
 //   GPIO_RSET(GPGC,0x0);/*将GPIO0不做为GPINT使用*/
//    GPIO_RSET(GPEN,0x108);
//	GPIO_RSET(GPDIR,0x108);/*将GPIO0做为输出*/

/*------------------------------------------------------------------*/
	/*读取当前的时间值*/
	for(;;)
	{
		/*读年*/ 
		QXDDM642_RTC_read( hQXDdm642i2c,
							RTC_X1226_Y2K,   
							(Uint32)(&rtcregvalue), 
							1);
		rtcCfg.year = ( rtcregvalue & 0x00ff)<<8;
		
		QXDDM642_RTC_read( hQXDdm642i2c,
							RTC_X1226_YR, 
							(Uint32)(&rtcregvalue), 
							1);
		rtcCfg.year = rtcCfg.year + (rtcregvalue & 0x00ff);
		/*读月*/	  
		QXDDM642_RTC_read( hQXDdm642i2c,
							RTC_X1226_MO, 
							(Uint32)(&rtcregvalue), 
							1);
		rtcCfg.month = rtcregvalue;
		/*读日*/	
		QXDDM642_RTC_read( hQXDdm642i2c,
							RTC_X1226_DT, 
							(Uint32)(&rtcregvalue), 
							1);
		rtcCfg.day = rtcregvalue;
		/*读时*/
		
		QXDDM642_RTC_read( hQXDdm642i2c,
							RTC_X1226_HR, 
							(Uint32)(&rtcregvalue), 
							1);
		rtcCfg.hour = rtcregvalue - RTC_X1226_24;
		/*读分*/	
		QXDDM642_RTC_read( hQXDdm642i2c,
							RTC_X1226_MN, 
							(Uint32)(&rtcregvalue), 
							1);
		rtcCfg.minutes = rtcregvalue;
		/*读秒*/	
		QXDDM642_RTC_read( hQXDdm642i2c,
							RTC_X1226_SC, 
							(Uint32)(&rtcregvalue), 
							1);
		rtcCfg.seconds = rtcregvalue;
		/*读星期*/	
		QXDDM642_RTC_read( hQXDdm642i2c,
							RTC_X1226_DW, 
							(Uint32)(&rtcregvalue), 
							1);
		rtcCfg.week = rtcregvalue;
		printf ("time value is:  %x年%x月%x日%x时%x分%x秒\n",
				rtcCfg.year,rtcCfg.month,rtcCfg.day,rtcCfg.hour,
				rtcCfg.minutes,rtcCfg.seconds);
		/*延时1秒钟*/
		rtc_delay(80);
		
		
		
	
		
				/*GPIO3输出为高*/
//		GPIO_RSET(GPVAL,0x8);
//    	QXDDM642_waitusecqq(5000);
    	/*GPIO3输出为低*/
//		GPIO_RSET(GPVAL,0x0);
//   	QXDDM642_waitusecqq(5000);
    	/*GPIO8输出为高*/
//		GPIO_RSET(GPVAL,0x100);
//   	QXDDM642_waitusecqq(5000);
    	/*GPIO8输出为低*/
//		GPIO_RSET(GPVAL,0x0);
 //   	QXDDM642_waitusecqq(5000);
    	

	}
	
	
	
}





    

void QXDDM642_waitusecqq(Uint32 delay)
{
    QXDDM642_wait(delay * 1000);
}

     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -