亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ivm_core.c

?? 在嵌入式系統中對Lattice CPLD軟件升級時所需的VME文件生成所需源代碼。基于E2PROM存儲
?? C
?? 第 1 頁 / 共 3 頁
字號:
				}
				else {
					ispVMStateMachine( SHIFTDR );
				}
			}
			else {
				ispVMStateMachine( DRPAUSE );
				ispVMStateMachine( SHIFTDR );
				if ( HeadDR > 0 ) {
					ispVMBypass( HDR, HeadDR );
					sclock();
				}
			}
		}
		
		/*Data is shiftable if usiDataSize is less than MaxSize*/
		if ( usiDataSize < MaxSize ) {
			rightShift = 1;
		}
		break;
	default:
		return (-4);
	}

	cRetCode = ispVMDataCode();
	
	if ( cRetCode != 0 ) {
		return (-4);
	}
	
	if ( usDataType & TDO_DATA || usDataType & DMASK_DATA ) {
		if(usDataType & DMASK_DATA){
			cRetCode = ispVMReadandSave( usiDataSize );
			if(!cRetCode){
				if ( TailDR > 0 ) {
					sclock();
					ispVMBypass( TDR, TailDR ); 
				}
				ispVMStateMachine( DRPAUSE );
				ispVMStateMachine( SHIFTDR );
				if( HeadDR > 0 ){
					ispVMBypass( HDR, HeadDR );
					sclock();
				}
				for ( iDataIndex=0; iDataIndex < usiDataSize / 8 + 1; iDataIndex++ )
					InData[ iDataIndex ] = OutData[ iDataIndex ];
				usDataType &= ~( TDO_DATA+ DMASK_DATA );	
				cRetCode = ispVMSend( usiDataSize );
			}
		}
		else{
			cRetCode = ispVMRead( usiDataSize );
			if ( cRetCode == -1 && cVendor == XILINX ) {
				for( iReadLoop = 0; iReadLoop < 30; iReadLoop++ ){
					cRetCode = ispVMRead( usiDataSize );
					if( !cRetCode ) {
						break;
					}
					else {
						ispVMStateMachine( DRPAUSE ); /*Always DRPAUSE*/
						/*Bypass other devices when appropriate*/
						ispVMBypass( TDR, TailDR );
						ispVMStateMachine( End_DR );
						ispVMStateMachine( IDLE );
						ispVMDelay( 1000 );
					}
				}
			}
		}
	}
	else { /*TDI only*/
		cRetCode = ispVMSend( usiDataSize );
	}
	
	/*transfer the input data to the output buffer for the next verify*/
	if ( ( usDataType & EXPRESS ) || ( a_cCode == SDR ) ) {
		if ( OutData ) {
			for ( iDataIndex=0; iDataIndex < usiDataSize / 8 + 1; iDataIndex++ )
				OutData[ iDataIndex ] = InData[ iDataIndex ];
		}
	}
	
	switch( a_cCode ) {
	case SIR:
		/* 1/15/04 If not performing cascading, then shift ENDIR */
		if ( !( usFlowControl & CASCADE ) ) {
			if ( TailIR > 0 ) {
				sclock();
				ispVMBypass( TIR, TailIR );
			}
			ispVMStateMachine( End_IR );
		}
		break;
    case XSDR:
    case SDR: 
		/* 1/15/04 If not performing cascading, then shift ENDDR */
		if ( !( usFlowControl & CASCADE ) ) {
			if ( TailDR > 0 ) {
				sclock();
				ispVMBypass( TDR, TailDR );
			}
			ispVMStateMachine( End_DR );
		}
		break;
    default:
		break;
	}
	
	return ( cRetCode ); 
}                   

/****************************************************************************
                     ispVM Amble 
 This routine is to extract Header and Trailer parameter for SIR and 
 SDR operations.

 The Header and Trailer parameter are the pre-amble and post-amble bit
 stream need to be shifted into TDI or out of TDO of the devices. Mostly
 is for the purpose of bypassing the leading or trailing devices. ispVM
 supports only shifting data into TDI to bypass the devices. 

 For a single device, the header and trailer parameters are all set to 0
 as default by ispVM. If it is for multiple devices, the header and trailer
 value will change as specified by the VME file.            
 Input                                                          
     Code---------------HIR, HDR, TIR ,TDR.     
 Return                                                         
     rcode--------------pass or fail
     
*****************************************************************************/
char ispVMAmble(char Code)
{
	char compress = 0;
	usiDataSize = ispVMDataSize();
 
	if (usiDataSize) {
		GetByte(); /*discard the TDI opcode*/
		/* header and trailers are not compressed */
		if (usDataType&COMPRESS) {
			usDataType &= ~(COMPRESS);
			compress = 1;
		}
	}
	switch (Code) {
		case HIR:   /*modify the IR length of lead devices*/
                HeadIR = usiDataSize;
                if (HeadIR){
                   /*hold the IR opcode for the lead devices*/
                   ispVMMemManager(HIR, HeadIR);
                   ispVMData(HIRData);
                   }
                break;
		case TIR:   /*modify the IR length of the trailing devices*/
                TailIR = usiDataSize;
                /*hold the IR opcode for the trailing devices*/
                if (TailIR){
                   ispVMMemManager(TIR, TailIR);
                   ispVMData(TIRData);
                   }
                break;
		case HDR:   /*modify the DATA length of the lead devices*/
	            HeadDR = usiDataSize;
                /*hold the data stream for the lead devices*/
                if (HeadDR){
                    ispVMMemManager(HDR, HeadDR);
                    ispVMData(HDRData);
                    }
                break;
		case TDR:   /*modify the DATA length of the trailing devices*/
                TailDR = usiDataSize;
                /*hold the data stream for the trailing devices*/
                if (TailDR){
                   ispVMMemManager(TDR, TailDR);
                   usiDataSize=TailDR;
                   ispVMData(TDRData);
                   }
                break;
	default:    break;
    }

	/* resume compression */
	if (compress) 
		usDataType |= COMPRESS;

	if (usiDataSize) {  /* Search for CONTINUE */
		Code = GetByte();
		if (Code == CONTINUE) {
			return 0;
		}
		else {
			return -4; 
		}
	}

	return 0;
}

/****************************************************************************
                     ispVM Loop                            
 Perform the function call upon by the REPEAT opcode.
 Memory is to be allocated to store the entire loop from REPEAT to ENDLOOP.
 After the loop is stored then execution begin. The REPEATLOOP flag is set
 on the usFlowControl register to indicate the repeat loop is in session
 and therefore fetch opcode from the memory instead of from the file.
 global:
     pucHeapMemory----------Memory allocated to hold the repeat loop.
     iHEAPSize---------The register holds the HEAP memory size.
     iHeapCounter------The (byte) pointer to the HEAP.
 Input                                                          
     a_usLoopCount----------the number repeat looping to perform    
 Return                                                         
     cRetCode--------------pass or fail
     
*****************************************************************************/
char ispVMLoop(unsigned short a_usLoopCount)
{
	char cRetCode = 0;
	unsigned short iHeapIndex = 0;
	unsigned short iLoopIndex;
#ifdef VME_DEBUG
	static unsigned short iLoopSet = 1;
#endif
	
	iShiftValue = 0;
	for ( iHeapIndex = 0; iHeapIndex < iHEAPSize; iHeapIndex++ ) {
		pucHeapMemory[ iHeapIndex ] = GetByte();
	}
	
	if ( pucHeapMemory[ iHeapIndex - 1 ] != ENDLOOP ) {
		return( -4 );
	}
	
	usFlowControl |= REPEATLOOP;
	usDataType |= HEAP_IN; 

#ifdef VME_DEBUG
	printf( "\n=====>Begin loop set %d (size = %d).\n", iLoopSet, a_usLoopCount );
#endif
	
	for ( iLoopIndex = 0; iLoopIndex < a_usLoopCount; iLoopIndex++ ) {
		iHeapCounter = 0;

#ifdef VME_DEBUG
		printf( "\n****Begin repeat loop (%d of %d).****\n", iLoopIndex + 1, a_usLoopCount );
#endif
		cRetCode = ispVMCode();
#ifdef VME_DEBUG
		printf( "****End repeat loop (%d of %d).****\n", iLoopIndex + 1, a_usLoopCount );
#endif
		RepeatLoops++;
		if ( cRetCode < 0 ) {
			break;
		}
	}
#ifdef VME_DEBUG
	printf( "\n====>Exit loop set %d (size = %d).\n", iLoopSet++, a_usLoopCount );
#endif
	usDataType &= ~( HEAP_IN );
	usFlowControl &= ~( REPEATLOOP );
	return ( cRetCode );
}
/****************************************************************************
                     ispVMBitShift                           
 Shift the TDI stream left or right by the number of bits. The data in 
 *InData is of the VME format, so the actual shifting is the reverse of
 IEEE 1532 or SVF format.                 
 Input                                                          
    mode----LSHIFT or RSHIFT
    bits----shift left or right by the number bits
                                                       
    The content of *InData is shifted left or right.
     
*****************************************************************************/
char ispVMBitShift(char mode, unsigned short bits)
{
	unsigned short i, size, tmpbits;
#ifdef VME_DEBUG
	unsigned short j;
	unsigned char FlipData, Data;
#endif

	if (usiDataSize%8>0) {
		size = usiDataSize/8 + 1;
	}
	else {
		size = usiDataSize/8;
	}

	switch(mode) {
	case SHR:
		for (i = 0; i < size; i++) {
			if (InData[i] != 0) {			
				tmpbits = bits;
				while (tmpbits > 0) {
					InData[i] <<= 1;
					if (InData[i] == 0) {
						i--;
						if (i < 0)
							break;
						InData[i] = 1;
					}
					tmpbits--;
				}
			}
		}
		break;
	case SHL:
		for (i = 0; i < size; i++) {
			if (InData[i] != 0) {			
				tmpbits = bits;
				while (tmpbits > 0) {
					InData[i] >>= 1;
					if (InData[i] == 0) {
						i--;
						if (i < 0)
							break;
						InData[i] = 8;
					}
					tmpbits--;
				}
			}
		}
		break;
	default: 
		return (-4);
	}

#ifdef VME_DEBUG 
		printf("Address after shifting: \n");
		for (i = size - 1; i >= 0; i--) {
			Data = InData[i];
			FlipData = Data;
			for (j=0;j<8;j++) {
				FlipData <<= 1;
				if (Data & 0x1)
					FlipData |= 0x1;
				Data >>= 1;
			}
			printf("%02X", FlipData);
		}
		printf("\n");
#endif

	return (0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产三级国产a| 国产人伦精品一区二区| 久久蜜臀中文字幕| 国产精品美女久久久久久| 久久精品久久精品| 91精品国产日韩91久久久久久| 国产亚洲一区二区三区| 日本免费新一区视频| 成人黄色在线视频| 国产欧美日韩另类视频免费观看| 九一久久久久久| 精品国产乱码久久久久久蜜臀| 亚洲一线二线三线久久久| 欧美怡红院视频| 欧美aaaaa成人免费观看视频| 91色porny蝌蚪| 亚洲精品一区二区三区四区高清 | 91免费国产在线观看| 欧美精品在线一区二区三区| 精品欧美一区二区久久| 欧美网站一区二区| 99国产精品99久久久久久| 蜜桃av一区二区三区| 亚洲欧美日韩国产综合| 日韩一区二区三区视频| 欧美精品丝袜中出| 成人精品鲁一区一区二区| 奇米在线7777在线精品| 欧美国产一区视频在线观看| 日韩一区二区三区视频| 欧美三级蜜桃2在线观看| 97久久精品人人做人人爽50路 | 亚洲高清视频中文字幕| 综合激情网...| 国产精品免费丝袜| 国产精品网友自拍| 中文字幕免费一区| 亚洲老妇xxxxxx| 夜夜夜精品看看| 天堂影院一区二区| 亚洲亚洲精品在线观看| 亚洲图片欧美一区| 日韩成人精品在线| 精品无人码麻豆乱码1区2区| 精品一区二区精品| 琪琪久久久久日韩精品| 九色综合国产一区二区三区| 黄网站免费久久| 国产精品正在播放| 不卡免费追剧大全电视剧网站| 99国产精品久久久| 精品免费日韩av| 久久精品一区二区三区不卡牛牛| 久久久久久电影| 欧美一区二区三区四区在线观看| 蜜臀av亚洲一区中文字幕| 欧美一区二区视频在线观看2020| 美女一区二区三区在线观看| 国产婷婷色一区二区三区| 色噜噜狠狠成人网p站| 免费高清不卡av| 日韩精品乱码免费| 国产精品免费av| 在线不卡一区二区| 成人在线视频一区| 男人的j进女人的j一区| 国产精品网站在线观看| 欧美精品黑人性xxxx| 91久久奴性调教| 不卡一区二区在线| 成人h精品动漫一区二区三区| 亚洲黄色录像片| 亚洲国产高清aⅴ视频| 国产视频亚洲色图| 国产日产亚洲精品系列| 欧美va亚洲va| 久久久久久综合| 日韩一二三区不卡| 日韩一区二区在线免费观看| 欧美日本在线看| 91亚洲大成网污www| 972aa.com艺术欧美| 亚洲三级在线观看| 色播五月激情综合网| 亚洲丝袜另类动漫二区| 一本色道a无线码一区v| 夜夜揉揉日日人人青青一国产精品| 粉嫩13p一区二区三区| 亚洲人成网站在线| 日韩欧美aaaaaa| 国产成人免费xxxxxxxx| 亚洲色图欧洲色图婷婷| 欧美日韩精品一区二区在线播放| 久久久精品欧美丰满| 日韩av在线免费观看不卡| 九九久久精品视频 | 中文字幕高清一区| 亚洲高清免费一级二级三级| 青青青伊人色综合久久| 国产精品77777| 欧美日韩在线免费视频| 久久美女艺术照精彩视频福利播放| 国产精品三级视频| 国产一区二区精品久久91| 精品视频1区2区| 亚洲一本大道在线| 欧美性色黄大片手机版| 中文字幕一区二区日韩精品绯色| 日本午夜一区二区| 欧美丝袜丝交足nylons图片| 亚洲制服丝袜av| 欧美日韩中文另类| 亚洲国产精品尤物yw在线观看| 波多野结衣中文一区| 中文字幕乱码一区二区免费| 国产成人在线色| 在线不卡欧美精品一区二区三区| 亚洲精品欧美二区三区中文字幕| 成人黄色a**站在线观看| 国产精品视频线看| 色欧美乱欧美15图片| 国产精品视频免费| 亚洲免费色视频| 亚洲精品视频一区二区| 亚洲综合成人在线| 樱桃视频在线观看一区| 亚洲人成亚洲人成在线观看图片 | 亚洲大尺度视频在线观看| 一级做a爱片久久| 人人精品人人爱| 极品少妇xxxx偷拍精品少妇| 久久久久久久综合色一本| 国产高清不卡二三区| 亚洲一区二区五区| 亚洲国产精华液网站w| 欧美日韩亚洲另类| 97se亚洲国产综合自在线| 一个色综合av| 国产精品网站在线| 欧美一区二区高清| 日本高清免费不卡视频| 韩国毛片一区二区三区| 亚洲成人高清在线| 综合久久久久久| 国产精品日产欧美久久久久| 久久亚洲影视婷婷| 欧美日韩一区三区四区| 成人污视频在线观看| 国产精品99久久久久久有的能看| 亚洲午夜视频在线观看| 国产色婷婷亚洲99精品小说| 欧美日本一区二区三区| 99精品国产一区二区三区不卡| 看片网站欧美日韩| 久久国产婷婷国产香蕉| 亚洲777理论| 日韩国产精品大片| 日精品一区二区| 黑人巨大精品欧美黑白配亚洲| 丝袜亚洲另类丝袜在线| 日韩中文字幕区一区有砖一区 | 欧美色综合久久| 亚洲123区在线观看| 本田岬高潮一区二区三区| 国产视频一区在线播放| 成人91在线观看| 亚洲欧美日韩电影| 色偷偷成人一区二区三区91| 亚洲免费av高清| 欧美一区二区三区免费大片| 亚洲特黄一级片| 精品中文字幕一区二区| 一本色道久久加勒比精品 | 久久先锋影音av鲁色资源网| 亚洲精品国产a久久久久久| 日本最新不卡在线| 色诱视频网站一区| 欧美国产激情二区三区 | 成人app软件下载大全免费| 欧美日韩1区2区| 日韩伦理电影网| 国产成人av电影在线| 3d动漫精品啪啪1区2区免费| 亚洲国产色一区| 国产成人99久久亚洲综合精品| 欧美一区午夜视频在线观看| 亚洲精品老司机| 欧美日韩性生活| 蜜臀av亚洲一区中文字幕| 欧美日韩免费观看一区二区三区| 欧美日韩国产一二三| 久久精品欧美日韩| 美脚の诱脚舐め脚责91| 99精品国产91久久久久久| 91精品婷婷国产综合久久| 亚洲国产精品麻豆| 91日韩一区二区三区| 国产精品美女久久久久久久| 麻豆高清免费国产一区| 欧美一级精品大片|