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

📄 rtc41t81.c

📁 dm270 source code
💻 C
📖 第 1 页 / 共 2 页
字号:
	{
		status = E_INVALID_INPUT;
		goto I2Cfail;
	}
	
	
	status = E_INVALID_INPUT;
	M41T81_Register++;
	Buffer = M41T81_Hex2Dec( TimeBuff.M41T81_sec, (Uint8)59, (Uint8)00);
	if(Buffer == 0xFF)
		goto TimeInputEnd;	
	*M41T81_Register = (*M41T81_Register & 0x80) | Buffer;
	
	M41T81_Register++;
	Buffer = M41T81_Hex2Dec( TimeBuff.M41T81_min, (Uint8)59, (Uint8)00);
	if(Buffer == 0xFF)
		goto TimeInputEnd;	
	*M41T81_Register = (*M41T81_Register & 0x80) | Buffer;
	
	M41T81_Register++;
	Buffer = M41T81_Hex2Dec( TimeBuff.M41T81_hour, (Uint8)23, (Uint8)00);
	if(Buffer == 0xFF)
		goto TimeInputEnd;	
	*M41T81_Register = (*M41T81_Register & 0xC0) | Buffer;
	
	M41T81_Register++;
	Buffer = M41T81_Hex2Dec( TimeBuff.M41T81_wday, (Uint8)7, (Uint8)1);
	if(Buffer == 0xFF)
		goto TimeInputEnd;	
	*M41T81_Register = (*M41T81_Register & 0xF8) | Buffer;
		
	M41T81_Register++;
	Buffer = M41T81_Hex2Dec( TimeBuff.M41T81_mday, (Uint8)31, (Uint8)1);
	if(Buffer == 0xFF)
		goto TimeInputEnd;	
	*M41T81_Register = (*M41T81_Register & 0xC0) | Buffer;
		
	M41T81_Register++;
	Buffer = M41T81_Hex2Dec( TimeBuff.M41T81_mon, (Uint8)12, (Uint8)1);
	if(Buffer == 0xFF)
		goto TimeInputEnd;	
	*M41T81_Register = (*M41T81_Register & 0xE0) | Buffer;
		
	M41T81_Register++;
	Buffer = M41T81_Hex2Dec( TimeBuff.M41T81_year, (Uint8)99, (Uint8)00);
	if(Buffer == 0xFF)
		goto TimeInputEnd;	
	*M41T81_Register = Buffer;
	
	M41T81_Register = Register;
	status = M41T81_HaltEable( (M41T81_Register + 0x0C) );
  	if (status != E_PASS) 
  		goto I2Cfail;
  		
	counter = 8;
	i2cWriteRegs((M41T81_SLAVE_ADDR << 1), 0x00, M41T81_Register, counter, &Buffer);
	if (Buffer != E_PASS) 
		goto	I2Cfail;
		
	status = M41T81_HaltDisable( (M41T81_Register + 0x0C) );
  	if (status != E_PASS) 
  		goto I2Cfail;
  		
I2Cfail:
	
TimeInputEnd:
	return status;	
}
/* M41T81_TimeInput - */

/*=========================================================================
SubRoutine: STATUS M41T81_TimeOut( M41T81_TM *TimeOutput )

Function  : read time from M41T81.	

Parameter : M41T81_TM 

Return    : Status - error message  ==> E_PASS OR E_INVALID_INPUT

Reference : [2][1]

=========================================================================*/
STATUS M41T81_TimeOut( M41T81_TM *TimeOutput )
{
	STATUS			status;
	static Uint8	Register[20];
	Uint8			*M41T81_Register;
	
	
	M41T81_Register = Register;
	i2cInit(); 
	M41T81_ReadRegister(&status, &(*M41T81_Register));	
	
	if(status != I2C_SUCCESS)
	{
		status = E_INVALID_INPUT;
		return status;	
	}
	else		
		status = E_PASS;
		
	M41T81_Register++;
	TimeOutput->M41T81_sec = M41T81_Dec2Hex( *M41T81_Register & 0x7F );
	M41T81_Register++;
	TimeOutput->M41T81_min = M41T81_Dec2Hex( *M41T81_Register & 0x7F );
	M41T81_Register++;
	TimeOutput->M41T81_hour = M41T81_Dec2Hex( *M41T81_Register & 0x3F );
	M41T81_Register++;
	TimeOutput->M41T81_wday = M41T81_Dec2Hex( *M41T81_Register & 0x07 );
	M41T81_Register++;
	TimeOutput->M41T81_mday = M41T81_Dec2Hex( *M41T81_Register & 0x3F );
	M41T81_Register++;
	TimeOutput->M41T81_mon = M41T81_Dec2Hex( *M41T81_Register & 0x1F );
	M41T81_Register++;
	TimeOutput->M41T81_year = M41T81_Dec2Hex( *M41T81_Register & 0xFF );
	  
	return status;		
}
/* M41T81_TimeOut - */ 

/*=========================================================================
SubRoutine: STATUS M41T81_Init( void )

Function  : Init and start M41T81.	

Parameter : nil 

Return    : Status - error message  ==> E_PASS OR E_INVALID_INPUT

Reference : [2][1]

=========================================================================*/
STATUS M41T81_Init( void )
{
	STATUS			status;
	static Uint8	Register[20];
	Uint8			*M41T81_Register;
		
	M41T81_Register = Register;
	i2cInit(); 
	M41T81_ReadRegister(&status, &(*M41T81_Register));	
	if(status != I2C_SUCCESS)		
		status = E_INVALID_INPUT;
	else
		status = M41T81_StopDisable( M41T81_Register + M41T81_ST );
			
	return status;				
}
/* M41T81_Init - */

/*=========================================================================
SubRoutine: STATUS M41T81_AlarmTimeInput( M41T81_TM *TimeInput )

Function  : set alarm time successive to M41T81.	

Parameter : *TimeInput - time struct for input.
			(Just useing Month, Date, Hour, Minutes, Secons)

Return    : STATUS

Reference : [2][1]

=========================================================================*/
STATUS M41T81_AlarmTimeInput( M41T81_TM *TimeInput )
{
	STATUS			status;
	static Uint8	Register[20];
	Uint8			*M41T81_Register;
	Uint8			Buffer;
	M41T81_TM		TimeBuff;
	Uint16			counter;
	
	TimeBuff = *TimeInput;
	M41T81_Register = Register;
	i2cInit(); 
	M41T81_ReadRegister(&status, &(*M41T81_Register));
	if(status != I2C_SUCCESS)
	{
		status = E_INVALID_INPUT;
		goto I2Cfail;
	}
	
	
	status = E_INVALID_INPUT;
	M41T81_Register += M41T81_AlarmMonth;
	Buffer = M41T81_Hex2Dec( TimeBuff.M41T81_mon, (Uint8)12, (Uint8)1);
	if(Buffer == 0xFF)
		goto TimeInputEnd;	
	*M41T81_Register = (*M41T81_Register & 0xE0) | Buffer;
		
	M41T81_Register++;
	Buffer = M41T81_Hex2Dec( TimeBuff.M41T81_mday, (Uint8)31, (Uint8)1);
	if(Buffer == 0xFF)
		goto TimeInputEnd;	
	*M41T81_Register = (*M41T81_Register & 0xC0) | Buffer;
		
	M41T81_Register++;
	Buffer = M41T81_Hex2Dec( TimeBuff.M41T81_hour, (Uint8)23, (Uint8)00);
	if(Buffer == 0xFF)
		goto TimeInputEnd;	
	*M41T81_Register = (*M41T81_Register & 0xC0) | Buffer;
	
	M41T81_Register++;
	Buffer = M41T81_Hex2Dec( TimeBuff.M41T81_min, (Uint8)59, (Uint8)00);
	if(Buffer == 0xFF)
		goto TimeInputEnd;	
	*M41T81_Register = (*M41T81_Register & 0x80) | Buffer;
	
	M41T81_Register++;
	Buffer = M41T81_Hex2Dec( TimeBuff.M41T81_sec, (Uint8)59, (Uint8)00);
	if(Buffer == 0xFF)
		goto TimeInputEnd;	
	*M41T81_Register = (*M41T81_Register & 0x80) | Buffer;
	
	M41T81_Register = Register;
	status = M41T81_HaltEable( (M41T81_Register + M41T81_HT) );
  	if (status != E_PASS) 
  		goto I2Cfail;
  		
	counter = 5;
	i2cWriteRegs((M41T81_SLAVE_ADDR << 1), M41T81_AlarmMonth,
				 (M41T81_Register + M41T81_AlarmMonth), counter, &Buffer);
	if (Buffer != E_PASS) 
		goto	I2Cfail;
		
	status = M41T81_HaltDisable( (M41T81_Register + M41T81_HT) );
  	if (status != E_PASS) 
  		goto I2Cfail;
  		
I2Cfail:
	
TimeInputEnd:
	return status;	
}
/* M41T81_AlarmTimeInput - */

/*=========================================================================
SubRoutine: STATUS M41T81_AlarmTimeOut( M41T81_TM *TimeOutput )

Function  : read alarm time from M41T81.	

Parameter : M41T81_TM (Month, Date, Hour, Minutes, Secons)

Return    : Status - error message  ==> E_PASS OR E_INVALID_INPUT

Reference : [2][1]

=========================================================================*/
STATUS M41T81_AlarmTimeOut( M41T81_TM *TimeOutput )
{
	STATUS			status;
	static Uint8	Register[20];
	Uint8			*M41T81_Register;
	
	
	M41T81_Register = Register;
	i2cInit(); 
	M41T81_ReadRegister(&status, &(*M41T81_Register));	
	if(status == I2C_SUCCESS)
	{	
		status = E_PASS;
		
		M41T81_Register += M41T81_AlarmMonth;
		TimeOutput->M41T81_mon = M41T81_Dec2Hex( *M41T81_Register & 0x1F );
		M41T81_Register++;
		TimeOutput->M41T81_mday = M41T81_Dec2Hex( *M41T81_Register & 0x3F );
		M41T81_Register++;
		TimeOutput->M41T81_hour = M41T81_Dec2Hex( *M41T81_Register & 0x3F );
		M41T81_Register++;
		TimeOutput->M41T81_min = M41T81_Dec2Hex( *M41T81_Register & 0x7F );
		M41T81_Register++;
		TimeOutput->M41T81_sec = M41T81_Dec2Hex( *M41T81_Register & 0x7F );
		TimeOutput->M41T81_wday = 0x00;
		TimeOutput->M41T81_year = 0x00;	  
	}
	else	
		status = E_INVALID_INPUT;
		
	return status;		
}
/* M41T81_AlarmTimeOut - */ 

/*=========================================================================
SubRoutine: STATUS M41T81_AlarmRepeatMode( AlarmRepeatMode *Repeat )

Function  : Write alarm repeat mode to M41T81 register.	

Parameter : AlarmRepeatMode (OncePerYear, Month, Day, Hour, Minute, Second)

Return    : Status - error message  ==> E_PASS OR E_INVALID_INPUT

Reference : [2][1]

=========================================================================*/
STATUS M41T81_AlarmRepeatMode( AlarmRepeatMode Repeat )
{
	STATUS			status;
	static Uint8	Register[20];
	Uint8			*M41T81_Register;
	Uint8			*RepeatBuffer;
	Uint8			Buffer;
	Uint16			counter;
						
	M41T81_Register = Register;
//	i2cInit( RTC ); 
	M41T81_ReadRegister(&status, &(*M41T81_Register));
	if(status != I2C_SUCCESS)
	{
		status = E_INVALID_INPUT;
		goto I2Cfail;
	}
	RepeatBuffer = M41T81_Register + M41T81_PRT5;
			
	switch(Repeat)					
	{
		case OncePerYear:			
			*RepeatBuffer &= ~0xC0;			//						RPT5	RPT4	RPT3	RPT2	RPT1
			*(RepeatBuffer + 1) &= ~0x80;	//	Once Per Year		0		0		0		0		0
			*(RepeatBuffer + 2) &= ~0x80;	//	Once Per Month		1		0		0		0		0
			*(RepeatBuffer + 3) &= ~0x80;	//	Once Per Day		1		1		0		0		0
			break;							//	Once Per Hour		1		1		1		0		0
											//	Once Per Minute		1		1		1		1		0
		case OncePerMonth:					//	Once Per Second		1		1		1		1		1	
			*RepeatBuffer &= ~0xC0;
			*RepeatBuffer |= 0x40;		
			*(RepeatBuffer + 1) &= ~0x80;
			*(RepeatBuffer + 2) &= ~0x80;
			*(RepeatBuffer + 3) &= ~0x80;
			break;
			
		case OncePerDay:		
			*RepeatBuffer |= 0xC0;			// alarm repeat seting of repeat register to RPT5 and RPT4	
			*(RepeatBuffer + 1) &= ~0x80;	// alarm repeat seting of repeat register to RPT3	
			*(RepeatBuffer + 2) &= ~0x80;	// alarm repeat seting of repeat register to RPT2
			*(RepeatBuffer + 3) &= ~0x80;	// alarm repeat seting of repeat register to RPT1
			break;
			
		case OncePerHour:		
			*RepeatBuffer |= 0xC0;			// alarm repeat seting of repeat register to RPT5 and RPT4	
			*(RepeatBuffer + 1) |= 0x80;	// alarm repeat seting of repeat register to RPT3	
			*(RepeatBuffer + 2) &= ~0x80;	// alarm repeat seting of repeat register to RPT2
			*(RepeatBuffer + 3) &= ~0x80;	// alarm repeat seting of repeat register to RPT1
			break;
			
		case OncePerMinute:
			*RepeatBuffer |= 0xC0;			// alarm repeat seting of repeat register to RPT5 and RPT4	
			*(RepeatBuffer + 1) |= 0x80;	// alarm repeat seting of repeat register to RPT3	
			*(RepeatBuffer + 2) |= 0x80;	// alarm repeat seting of repeat register to RPT2
			*(RepeatBuffer + 3) &= ~0x80;	// alarm repeat seting of repeat register to RPT1
			break;
			
		case OncePerSecond:
			*RepeatBuffer |= 0xC0;			// alarm repeat seting of repeat register to RPT5 and RPT4	
			*(RepeatBuffer + 1) |= 0x80;	// alarm repeat seting of repeat register to RPT3	
			*(RepeatBuffer + 2) |= 0x80;	// alarm repeat seting of repeat register to RPT2
			*(RepeatBuffer + 3) |= 0x80;	// alarm repeat seting of repeat register to RPT1
			break;
			
		default:
			break;
	}
	
	M41T81_Register = Register;
	status = M41T81_HaltEable( (M41T81_Register + M41T81_HT) );
  	if (status != E_PASS) 
  		goto I2Cfail;
  		
	counter = 4;
	i2cWriteRegs((M41T81_SLAVE_ADDR << 1), M41T81_PRT5,
				 RepeatBuffer, counter, &Buffer);
	if (Buffer != E_PASS)
	{
		status = E_INVALID_INPUT;
		goto	I2Cfail;
	}
	else
		status = E_PASS;
		
	status = M41T81_HaltDisable( (M41T81_Register + M41T81_HT) );
  	if (status != E_PASS) 
  		goto I2Cfail;
  		
I2Cfail:
	return status;	
}

⌨️ 快捷键说明

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