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

📄 rtc.c

📁 samsung 最新芯片2450 的测试程序.
💻 C
📖 第 1 页 / 共 2 页
字号:

	rGPHDAT ^= (1<<13); // for test tick interval
	Tick++;

	transtime = EndStopwatch();
	printf(" reset: %dusec\n",transtime);
	

	StartStopwatch();

}


void Rtc_Alarm(void)
{
	int i;
	
    	printf("[ RTC Alarm Test for S3C2450 ]\n");

    	rRTCCON  = 0x01;                    //No reset, Merge BCD counters, 1/32768, RTC Control enable
    	rALMYEAR = TESTYEAR2 ;
    	rALMMON  = TESTMONTH2;
    	rALMDATE = TESTDATE2 ;
    	rALMHOUR = TESTHOUR2 ;
    	rALMMIN  = TESTMIN2  ;
    	rALMSEC  = TESTSEC2  ; 

		
		printf("Select alarm interrupt source  \n");
		printf("1:sec 2:min 3:hour 4:date 5:month 6:year\n");
		
		i = GetIntNum();
		rRTCALM  = (rRTCALM & ~(0x3f<<0))|(1<<(i-1)); //Year,Month,Day,Hour,Minute,Second alarm enable
		printf( " rRTCALM = %08x\n", rRTCALM);
				
		printf("After 5 sec, alarm interrupt will occur.. \n");
		printf("alarm:%2x : %2x : %2x  %2x/%2x/20%02x\n",rALMHOUR,rALMMIN,rALMSEC,rALMMON,rALMDATE,rALMYEAR);
				
		RTC_Init();
		printf("curr:%2x : %2x : %2x  %2x/%2x/20%02x\n",rBCDHOUR,rBCDMIN,rBCDSEC,rBCDMON,rBCDDATE,rBCDYEAR);	
    	
    	Alarm = 0;
	
    	pISR_RTC = (unsigned int)Rtc_Alarm_ISR;
    	
    	rRTCALM  |= (1<<6);
    
      	rRTCCON  = 0x0;                     //No reset, Merge BCD counters, 1/32768, RTC Control disable
    	rINTMSK  = ~(BIT_RTC);
		
	
	while(Alarm==0)
    	{
		if ( !(i == rBCDSEC))
		{	printf("%2x : %2x : %2x  %10s,  %2x/%2x/20%02x\n",rBCDHOUR,rBCDMIN,rBCDSEC,day[rBCDDAY],rBCDMON,rBCDDATE,rBCDYEAR);	
			i = rBCDSEC;
		}
    	}
	Alarm = 0;
	printf("Alarmed:%2x : %2x : %2x  %10s,  %2x/%2x/20%02x\n",rBCDHOUR,rBCDMIN,rBCDSEC,day[rBCDDAY],rBCDMON,rBCDDATE,rBCDYEAR);

		
	rRTCALM = 0x0; //alarm off
	rINTMSK = BIT_ALLMSK;
	
	//rRTCCON = 0x0;  //RTC  Control disable(for power consumption), 1/32768, Normal(merge), No reset}
	
}

void Tick_Count_Set(U32 count)
{
	U32 temp;

	if (count !=1) 
	{
		temp = (count-1)%32768;
	 	rTICNT2 = (count-1)/32768;
		rTICNT0 = temp/256;
		rTICNT1 = temp%256;
	}
	else
	{
		printf("time display by every 2 seconds\n");
		rTICNT2 = 0;
		rTICNT0 = 0;
		rTICNT1 = 1;
	}

}

void Rtc_Alarm_Set(void)
{
   	rRTCCON  = rRTCCON  | 0x1;		//RTC Control enable

    	rALMHOUR =rBCDHOUR;
    	rALMMIN  =rBCDMIN;
    	rALMSEC  =rBCDSEC+5;

   	printf("After 5 second, Alarm Interrupt Occur\n");

  	//rRTCCON  = rRTCCON  & ~(0x1);	//RTC Control disable
}

void Print_RTC(void)
{
	int year,month,date,hour,min,sec,weekday;

   	//rRTCCON  = rRTCCON  | 0x1;		//RTC Control enable
   		
    if(rBCDYEAR==0x99) 
       	year = 0x1999;
  	else 
       	year = 0x2000 + rBCDYEAR;
              	
	month   = rBCDMON;
	weekday = rBCDDAY;
	date    = rBCDDATE;
	hour    = rBCDHOUR;
	min     = rBCDMIN;
	sec     = rBCDSEC;

  	//rRTCCON  = rRTCCON  & ~(0x1);	//RTC Control disable
	printf("%2x : %2x : %2x  %10s,  %2x/%2x/%4x\n",hour,min,sec,day[weekday],month,date,year);
}


void RTC_SetTime(void)
{
	int year,month,date,hour,min,sec,weekday;

   	rRTCCON  = rRTCCON  | 0x1;		//RTC Control enable
   	printf("\nYear(0x00~0x99):");
	year = GetIntNum();
	printf("\nMonth(0x1~0x12):");
	month = GetIntNum();
	
	printf("\nweekday(0x1~0x7):");
	weekday = GetIntNum();
	
	printf("\nDate(0x1~0x31):");
	date = GetIntNum();
	
	printf("\nHour(0x0~0x23):");
	hour = GetIntNum();

	printf("\nMin(0x0~0x59):");
	min = GetIntNum();

	printf("\nSec(0x0~0x59):");
	sec = GetIntNum();
	printf("\n");
	rBCDYEAR = year;
       rBCDMON = month;
	rBCDDAY = weekday ;
	
	rBCDDATE = date   ;
	rBCDHOUR = hour ;
	
	rBCDMIN = min  ;
	rBCDSEC = sec ;


	rRTCCON  = rRTCCON  & ~(0x1);	//RTC Control disable

	
    if(rBCDYEAR==0x99) 
       	year = 0x1999;
  	else 
       	year = 0x2000 + rBCDYEAR;
              	
	month   = rBCDMON;
	weekday = rBCDDAY;
	date    = rBCDDATE;
	hour    = rBCDHOUR;
	min     = rBCDMIN;
	sec     = rBCDSEC;

  
	printf("%2x : %2x : %2x  %10s,  %2x/%2x/%4x\n",hour,min,sec,day[weekday],month,date,year);
}
void RTC_Init(void)
{

    rRTCCON  = rRTCCON  & ~(0xf)  | 0x1;            //No reset, Merge BCD counters, 1/32768, RTC Control enable
    
    rBCDYEAR = rBCDYEAR & ~(0xff) | TESTYEAR;
    rBCDMON  = rBCDMON  & ~(0x1f) | TESTMONTH;
    rBCDDATE = rBCDDATE & ~(0x3f) | TESTDATE;         
    rBCDDAY  = rBCDDAY  & ~(0x7)  | TESTDAY;       //SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7
    rBCDHOUR = rBCDHOUR & ~(0x3f) | TESTHOUR;
    rBCDMIN  = rBCDMIN  & ~(0x7f) | TESTMIN;
    rBCDSEC  = rBCDSEC  & ~(0x7f) | TESTSEC;
    
    rRTCCON  = 0x0;             //No reset, Merge BCD counters, 1/32768, RTC Control disable    

}





void __irq Rtc_Tick_ISR(void)
{
	rGPHDAT ^= (1<<13); // for test tick interval
	ClearPending(BIT_TICK);
	Tick=1;
	//transtime = EndStopwatch();
	
	//printf("\n%dusec\n",transtime);


	printf(" RTC tick interrupt occurred!\n");
}





void __irq Rtc_Alarm_ISR(void)
{
	ClearPending(BIT_RTC);
	Alarm=1;
	printf(" RTC alarm test OK\n");
	printf("rSRCPND %x , rINTPND %x \n",rSRCPND,rINTPND);
}


/////////////////////////////////////////////////////
// autotest
//


//condition to success :
//coverage : 
bool RTC_initialize_autotest(void)
{
	int year,month,date,hour,min,sec;
	int old_sec = 0x0, i=0;
	int cntfail=0;

	year =  6;
	month= 12;
	date = 31;
	hour = 23;
	min  = 59;
	sec  = 20;
	
	rRTCCON  = rRTCCON  | 0x1;		//RTC Control enable
	
	rBCDYEAR =( ((year/10)<<4) + (year%10) );
	rBCDMON  =( ((month/10)<<4)+ (month%10));
	rBCDDATE =( ((date/10)<<4) + (date%10) );     	
	rBCDDAY  = rBCDDAY  & ~(0x7)  | 0x3;		//SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7
	rBCDHOUR =( ((hour/10)<<4) + (hour%10) );
	rBCDMIN  =( ((min/10)<<4)  + (min%10)  );
	rBCDSEC  =( ((sec/10)<<4)  + (sec%10)  );     	

	rRTCCON = rRTCCON | (1<<3); //divider count init.
	rRTCCON = rRTCCON & ~(1<<3);

	rRTCCON  = rRTCCON  & ~(0x1);	//RTC Control disable

  	while (!Uart_GetKey())
  	{	
  			
  			sec = (rBCDSEC & 0x7F);
  						
  			if(sec==old_sec)
  			{
  				if(i++ == 2000000)
  				{		
	  				i = 0;
	  				printf("[]");
	  				
  				}
  			}
  			else
  			{
  				if( sec ==  old_sec+1)
  				{
  					if( ( sec     & 0xF)<10 ||
  				        ((sec>>4) & 0xF)<6  				    
  				       )
  				    {
	  					if(i++ == 2000000)
		  				{
			  				i = 0;
			  				printf("[]");		  			
		  				}		  				
		  				
		  				// 2 log at every 10min
		  				min=rBCDMIN;
		  				if( (min&0xF) == 0 && (sec==0x5 || sec == 0x35) )
		  				{
		  					AUTO_msginfo_printf("%2x:%2x:%2x  %10s,  %2x.%2x.20%02x",
		  									rBCDHOUR,rBCDMIN,rBCDSEC,day[rBCDDAY],rBCDMON,rBCDDATE,rBCDYEAR);
		  				}  	
		  				
		  				// test for during 2min
		  				if(min == 0x2) break;			
		  				
  				    }
  				    else
  				    {
  				    	AUTO_errinfo_printf("i:%d sec : 0x%2x  -- old_sec : 0x%2x", i, sec, old_sec); 
  				    	cntfail++;
  				    }
  				}
  				else
  				{
	  				if( (old_sec == 0x9 && sec == 0x10) ||
	  				    (old_sec == 0x19 && sec == 0x20) ||
	  				    (old_sec == 0x29 && sec == 0x30) ||
	  				    (old_sec == 0x39 && sec == 0x40) ||
	  				    (old_sec == 0x49 && sec == 0x50) ||
	  				    (old_sec == 0x59 && sec == 0x0)
	  				   )
	  				{
	  					if(i++ == 2000000)
		  				{
			  				i = 0;
			  				printf("[]");		  			
		  				}  
	  				}
	  				else
					{
	  				   	AUTO_errinfo_printf("i:%d sec : 0x%2x  -- old_sec : 0x%2x", i, sec, old_sec); 
	  				   	cntfail++;
	  				}  				
  				}
  			}
  			old_sec = sec;
  			
  	}	
	
	if(cntfail == 0) 	return true;
	else return false;
	
}

⌨️ 快捷键说明

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