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

📄 main1.c

📁 Embest EudKit-II教学系统配Samsung S3C44B0处理器的部分测试程序。
💻 C
字号:
/*********************************************************************************************
* File:		main.c
* Author:	embest
* Desc:		c main entry
* History:	
*********************************************************************************************/
#include "44blib.h"
#include "44b.h"
#include "rtc.h"

/*------------------------------------------------------------------------------------------*/
/*	 								extern function						 				    */
/*------------------------------------------------------------------------------------------*/
extern char *f_szdate[8];
extern void read_rtc(void);


char user_getch(void);
char use_rtc(void);
char check_rtc(void);
void ev40_rtc_disp();


/*********************************************************************************************
* name:		main
* func:		c code entry
* para:		none
* ret:		1
* modify:
* comment:		
*********************************************************************************************/
int Main()
{
	sys_init();                                                      // Initial 44B0X's Interrupt,Port and UART 
    
	// set the extern interrupt
	rINTMOD = 0x0;
	rINTCON = 0x01;
	rINTMSK = ~(BIT_GLOBAL | BIT_EINT4567);                          // use Extern 6 to set time
	                                                                 // use Extern 7 to set Alarm time
	rPCONG = 0xffff;			                                     // EINT7~0
	rPUPG = 0x0;				                                     // pull up enable
		    
	uart_init(0,115200);
	
	// set the time for RTC and display current time
    while(1)
    {
		if(use_rtc())  ev40_rtc_disp();
	}
	return 1;
}


/*********************************************************************************************
* name:		check_rtc
* func:		check rtc working or not
* para:		none
* ret:		cRTC_alr = 0:
*			cRTC_alr = 1: ok
* modify:
* comment:		
*********************************************************************************************/
char check_rtc(void)
{
	char cRTC_alr = 0;
	char cYn = 0x59;
   
	// check RTC
	while((cYn == 0x0d)|(cYn == 0x59)|(cYn == 0x79)|(cRTC_alr == 0))
	{
		uart_printf("\n RTC Check(Y/N)? ");
       
		// get data from keybroad
		cYn = uart_getch();
		if((cYn == 0x4E)|(cYn == 0x6E)|(cYn == 0x59)|(cYn == 0x79))  uart_sendbyte(cYn);
		if((cYn == 0x0d)|(cYn == 0x59)|(cYn == 0x79))
		{
			cRTC_alr = test_rtc_alarm();                             // test rtc alarm
			display_rtc();
		}
		else break;
		if (cRTC_alr) break;
	}
	return cRTC_alr;   
}


/*********************************************************************************************
* name:		use_rtc
* func:		set the data for RTC
* para:		none
* ret:		--------0
            --------1    ok
* modify:
* comment:		
*********************************************************************************************/   
char use_rtc(void)
{
	char cYn,cTmp,i,cN09=1;
	char cNum0 = 0x30;                                               // "0";
	char cNum9 = 0x39;                                               // "9";
	char szchar[] ={0,'-',' ',':'};
	char szDATE[12];                                                 // xxxx-xx-xx x
	char szTIME[8];                                                  // xx:xx:xx

	// set data for RTC
	if(check_rtc())
	{      
		uart_printf("\n RTC Working now. To set time(Y/N)? ");
	          
		cYn = uart_getch();
		if((cYn == 0x4E)|(cYn == 0x6E)|(cYn == 0x59)|(cYn == 0x79))  uart_sendbyte(cYn);
		if((cYn == 0x0d)|(cYn == 0x59)|(cYn == 0x79))                // want to set time?
		{ 
			// set the data for g_nYear,g_nMonth,g_nDay and g_nWeekday         
			do{
				uart_printf("\nCurrent g_nDay is (%04x,%02x,%02x, %s). To set g_nDay(yy-mm-dd w): "
							 ,g_nYear,g_nMonth,g_nDay,f_szdate[g_nWeekday]);
				uart_getstring(szDATE);                              // get the data from keybroad
				
				// check the format of the data
				if(szDATE[0] == 0x32) 
				{
					if((szDATE[4] == szchar[1] )&(szDATE[7] == szchar[1] )&(szDATE[10] == szchar[2] ))
					{
						if( (szDATE[11]>0) | (szDATE[11]<8) )
						{
							i = 0; cN09 = 0;
							while(i<12)
							{
								if( (i!=4) | (i!=7) | (i!=10) ) 
								{
									if( (szDATE[i]<cNum0) & (szDATE[i]>cNum9) )
									{ 
										cN09 = 1; 
										break; 
									}
								}
								i++;
							}
							if(cN09 == 0)
							break;                                   // all right
						}                                            // if date 1 - 7
					}                                                // if "-" or " "
				}                                                    // if 32 (21th century)
          
				cN09 = 1;
				uart_printf("\n Wrong value!!  To set again(Y/N)? ");        
          
				cYn = uart_getch();                                  // want to set DATE again?
				if( (cYn == 0x4E) | (cYn == 0x6E) | (cYn == 0x59) | (cYn == 0x79) )  uart_sendbyte(cYn);
			}while( (cYn == 0x0d) | (cYn == 0x59) | (cYn == 0x79) );
            
			// write the data into rtc register
			if(cN09 ==0)
			{
				rRTCCON  = 0x01;	                                 // R/W enable, 1/32768, Normal(merge), No reset
				rBCDYEAR = ((szDATE[2]<<4)|0x0f) & (szDATE[3]|0xf0); // ->syear;
				rBCDMON  = ((szDATE[5]<<4)|0x0f) & (szDATE[6]|0xf0); // ->smonth;
				rBCDDAY  = ((szDATE[8]<<4)|0x0f) & (szDATE[9]|0xf0); // ->sday;
          
				cTmp = ( (szDATE[11]&0x0f) +1);
				if(cTmp == 8) rBCDDATE = 1;                          // SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7
				else         rBCDDATE = cTmp;
          
				rRTCCON  = 0x00;	                                 // R/W disable
          
			}
			else uart_printf("\n\n Use Current DATE Settings.\n");

			// set the data for g_nHour,g_nMin,g_nSec 
			do{
				uart_printf("\nCurrent time is (%02x:%02x:%02x). To set time(hh:mm:ss): "
                       		,g_nHour,g_nMin,g_nSec);
          		uart_getstring(szTIME);                              // get the data from keybroad
          
				// check the format of the data
            	if( (szTIME[2] == szchar[3]) & (szTIME[5] == szchar[3]) )
             	{
               		i = 0; cN09 = 0;
               		while(i<8)
                	{
                 		if((i != 2)|(i != 5))
                  		{
                   			if( (szTIME[i]<cNum0) & (szTIME[i]>cNum9) )
                    		{ 
                    			cN09 = 1;
                     			break;  
                     		}
                  		}
                 		i++;
                	}
               		if(cN09 == 0)
		         	{
		          		cTmp = ( (szTIME[0]<<4)|0x0f) & (szTIME[1]|0xf0);
		          		if( (cTmp>0) & (cTmp<0x24) )          
		           		{ 
		            		szTIME[2] = cTmp;                        // ->shour;
		            
		            		cTmp  = ((szTIME[3]<<4)|0x0f) & (szTIME[4]|0xf0);          
		            		if(cTmp <= 0x59)          
		             		{
		               			szTIME[5] = cTmp;                    // ->smin;
		               
		               			cTmp = ((szTIME[6]<<4)|0x0f) & (szTIME[7]|0xf0);
		               			if(cTmp <= 0x59) 
		                 		break;                               // all right
		              		}                                        // if g_nMin < 59
		            	}                                            // if 0 < g_nHour < 24
		         	}                                                // if num 0-9
		                                             
				}
				cN09 = 1;
				uart_printf("\n Wrong value!!  To set again(Y/N)? ");        
        
				cYn = uart_getch();                                  // want to set Time again?
				if( (cYn == 0x4E) | (cYn == 0x6E) | (cYn == 0x59) | (cYn == 0x79) )  uart_sendbyte(cYn);
			}while( (cYn == 0x0d) | (cYn == 0x59) | (cYn == 0x79) );
            
            // write the data into rtc register
			if(cN09 == 0)
			{
				rRTCCON  = 0x01;	                                 // R/W enable, 1/32768, Normal(merge), No reset
				rBCDHOUR = szTIME[2];                                // ->shour;     
				rBCDMIN  = szTIME[5];                                // ->smin;
				rBCDSEC  = ((szTIME[6]<<4)|0x0f) & (szTIME[7]|0xf0); // ->ssec;
				rRTCCON  = 0x00;	                                 // R/W disable
          
			}
			else uart_printf("\n\n Use Current TIME Settings.\n");
		}
		else
		{
			uart_printf("\n Use Current Settings...\n");
			return 1;
		}                                                            // end if want to set? 
	}
    else
	{
		uart_printf("\n Please check RTC or maybe it's Wrong. \n");
		return 0;
	}                                                                // end if(check_rtc) 
     
}


/*********************************************************************************************
* name:		ev40_rtc_disp
* func:		rtc display
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void ev40_rtc_disp()
{
	while(rBCDSEC == 0);
	
	// display the current data about g_nYear g_nMonth g_nDay g_nWeekday		
	if(rBCDYEAR == 0x99) 
		g_nYear = 0x1999;
	else 
		g_nYear = 0x2000 + rBCDYEAR;
		
	g_nMonth   = rBCDMON;
	g_nDay     = rBCDDAY;
	g_nWeekday = rBCDDATE;
		    
	uart_printf("\n%04x,%02x,%02x,%s\n",g_nYear,g_nMonth,g_nDay,f_szdate[g_nWeekday]);
	
	// display the current data about g_nHour, g_nMin and g_nSec
	
	uart_printf("\n please press 'Enter' to display current time\n");		
	while(uart_getch() != '\n')
	{
		g_nHour = rBCDHOUR;
		g_nMin  = rBCDMIN;
		g_nSec  = rBCDSEC;
		    
	    uart_printf(" %02x:%02x:%02x\r",g_nHour,g_nMin,g_nSec);
	
	     
		if( (g_nSec==59) & (g_nHour==24) & (g_nMin==59) )
		{
			while(g_nSec = rBCDSEC);
			break;
		}
	}
}

⌨️ 快捷键说明

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