示例#1
0
文件: RVV6.c 项目: alex262/MB90F591
//===================================================================================
BYTE ReadBlockNotSelect()
{
	BYTE b;
	selREAD_DATA;
	RW_R=tREAD;
	WaitMS(1);
	CLOCK_CLK();
	b=DATA_0_3_R;
	WaitMS(1);
	RW_R=tWRITE;
	selWRITE_DATA;
	return b;
}
示例#2
0
文件: RVV6.c 项目: alex262/MB90F591
void CLOCK_CLK(void)
{
	RCLK=0; 
	RCLK=1; 
	WaitMS(1);
	RCLK=0;
}
示例#3
0
文件: RVV6.c 项目: alex262/MB90F591
//===================================================================================
void WriteBlockNotSelect(BYTE data)
{
	selWRITE_DATA;
	DATA_0_3_W(data);
	RW_R=tWRITE;
	WaitMS(1);
	CLOCK_CLK();
	Rvv.Timer=0;
	while(Rvv.Timer<TIME_5MS)clrwdt;
}
示例#4
0
文件: RVV6.c 项目: alex262/MB90F591
//===================================================================================
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void DriverRVV()
{
	BYTE	flag, i, j, ret;
	//DWORD k;
	//__DI();
	//Rvv.Error&=~7;	//Комплектность 
	Rvv.Error=RIN;
	//============================================================================
	if(Rvv.EnableChange != Rvv.NewEnableChange)	// разрешено переключить реле
	{
		//=====================================
		// Сначала проверяем необходимо ли что то записывать
		flag = 0;
		for(i=0;i<COUNT_BLOCK; i++)
		{
			for(j=0;j<2; j++)
			{
				if(Rvv.Block[i].New[j] != Rvv.Block[i].Old[j])
					flag = 1;
			}
		}
		//if(Rvv.SelectBlockNew!=Rvv.SelectBlockOld)
		//	flag = 1;
		//---------------------------------------
		// Переходим к записи данных при необходимости
		if(flag == 1)
		{
			//Rvv.SelectBlockOld = Rvv.SelectBlockNew;
			
			UN_SELEKT_BL();	// Снимаем выбор со всех блоков
			WaitMS(10);
			
			//-------------------------------------------
			// Запись нужно начинать с блока ДН
			for(i=COUNT_BLOCK; i>0; i--)
			{
				for(j=0;j<2; j++)
				{
					//----------------------------------------------
					//Выставляем Select для блока при неообходимости
					//ret = (Rvv.SelectBlockOld>>(2*(i-1)+j))&1;
					//if(ret == 1)
					//	Rvv.Block[i-1].Select[j] = SELECT_BLOCK;
					//if(ret == 0)
					//	Rvv.Block[i-1].Select[j] = UNSELECT_BLOCK;
					//----------------------------------------------
					if(Rvv.Block[i-1].New[j] != Rvv.Block[i-1].Old[j])
					{
						Rvv.Block[i-1].Old[j] = Rvv.Block[i-1].New[j];
						//====================================================
						// Выставляем выбор для конкретной половины блока если необходимо записать новые данные
						if(j==0)
							SetSel0Path_WithoutMark(i-1,SELECT_BLOCK);
						if(j==1)
							SetSel1Path_WithoutMark(i-1,SELECT_BLOCK);
						WaitMS(5);
						// Записываем данные
						WriteBlockNotSelect(Rvv.Block[i-1].Old[j]);
						// Проверяем чтением записаныые данные
						ret = ReadBlockNotSelect();
						Rvv.Block[i-1].Read[j]=ret;
						// 0 бит неисправность первой половины блока; 1 - второй
						if(ret !=Rvv.Block[i-1].Old[j])
							Rvv.Block[i-1].Error |= 1<<j;
						else
							Rvv.Block[i-1].Error &= ~(1<<j);
						WaitMS(5);
						// Снимаем выбор
						if(j==0)
							SetSel0Path_WithoutMark(i-1,UNSELECT_BLOCK);
						if(j==1)
							SetSel1Path_WithoutMark(i-1,UNSELECT_BLOCK);
						WaitMS(10);
						
					}
				}
			}
			//SET_ALL_SELEKT_STATUS(); // Ставим выбор всем блокам которым он был выставлен или которым нужно выставить
		}
		//=====================================
		Rvv.EnableChange = Rvv.NewEnableChange;	// Сбрасываем флаг
	}
	//__EI();
	//-----------------------------------------------------------
	// Читаем подключённые блоки и сверяем с тем что записали 
	// вслучае несовпадения зажигаем неисправность
/*	for(i=0; i<COUNT_BLOCK; i++)
	{
		for(j=0;j<2; j++)
		{
			if(Rvv.Block[i].Select[j] == SELECT_BLOCK)
			{
				// Проверяем чтением записаныые данные
				ret = ReadBlockNotSelect();
				// 0 бит неисправность первой половины блока; 1 - второй
				if(ret !=Rvv.Block[i-1].Old[j])
					Rvv.Block[i].Error |= 1<<j;
				else
					Rvv.Block[i].Error &= ~(1<<j);
				// Снимаем выбор
			}
		}
	}*/
	//============================================================================
	
}
示例#5
0
/*
================
idThread::WaitSec
================
*/
void idThread::WaitSec( float time ) {
	WaitMS( SEC2MS( time ) );
}