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

📄 mqmacros.blt

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 BLT
📖 第 1 页 / 共 5 页
字号:
#ifndef __MQMACROS_BLT_
#define	__MQMACROS_BLT_

//$$$$ Routine: Intensive Src FIFO pumping $$$$$$$$$$$$$$$$$$$$$$$$$
//Intensive 16 dwords pumps
#define	 geSRCFIFO16(pSrc) \
	{\
		geWAITSRCFIFO( 16 ); \
		geREG(SRC_IMAGE_DATA, *pSrc++); \
	}

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Lookup Table Conversion for 8Bpp $$$$$$$$$$$$$$$$$$$
#define	LOOKUP_8BPP(ulData, ulRData, pLookup) \
	ulData = pLookup[ulRData & 0xFFUL] \
			| (pLookup[(ulRData >> 8) & 0xFFUL] << 8) \
			| (pLookup[(ulRData >> 16) & 0xFFUL] << 16) \
			| (pLookup[(ulRData >> 24) & 0xFFUL] << 24)
			
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Lookup Table Conversion for 16Bpp $$$$$$$$$$$$$$$$$$$
#define	LOOKUP_16BPP(ulData, ulRData, pLookup) \
	ulData = pLookup[ulRData & 0xFFFFUL] \
			| (pLookup[(ulRData >> 16) & 0xFFFFUL] << 16) 
			
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Lookup Table Conversion for 32Bpp $$$$$$$$$$$$$$$$$$$
#define	LOOKUP_32BPP(ulData, ulRData, pLookup) \
	ulData = pLookup[ulRData] 
			
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Lookup Table Conversion for 4_8Bpp $$$$$$$$$$$$$$$$$$$
#define	LOOKUP4_8BPP(ulData, ulRData, pLookup) \
	ulData = (pLookup[(ulRData >>  4) & 0x0FUL] ) \
			| (pLookup[ ulRData & 0x0FUL] << 8) \
			| (pLookup[(ulRData >> 12) & 0x0FUL] << 16) \
			| (pLookup[(ulRData >>  8) & 0x0FUL] << 24) 
			
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Lookup Table Conversion for 4_16Bpp $$$$$$$$$$$$$$$$$$$
#define	LOOKUP4_16BPP(ulData, ulRData, pLookup) \
	ulData = (pLookup[(ulRData >> 4) & 0x0FUL]) \
			|  (pLookup[ulRData & 0x0FUL] << 16) 
			
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Lookup Table Conversion for 4_32Bpp $$$$$$$$$$$$$$$$$$$
#define	LOOKUP4_32BPP(ulRData, pLookup) \
	geREG(SRC_IMAGE_DATA, pLookup[(ulRData >> 4) & 0x0FUL]); \
	geREG(SRC_IMAGE_DATA, pLookup[ulRData & 0x0FUL]) 
			
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//$$$$ Routine: Pump Packed Src FIFO $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
#ifdef CHECK_SRCFIFO

#define	MACRO_PUMP_PACKED_SRCFIFO(pSrcBits, ulDWords, ulExtras, \
								ulDWordsTotal, lSrcStride, height) \
	PULONG	pulData; \
	ULONG	i, j; \
	while( height-- ) \
	{ \
		pulData = (PULONG)(((ULONG)pSrcBits + 3UL) & ~0x03UL); \
		j = ulDWords; \
		while ( j >= SRC_FIFO_MAX_DWORDS ) \
		{ \
			geWAITSRCFIFO( SRC_FIFO_MAX_DWORDS ); \
			for ( i = 0; i < SRC_FIFO_MAX_DWORDS; i++ ) \
				geREG(SRC_IMAGE_DATA, *pulData++); \
			j -= SRC_FIFO_MAX_DWORDS; \
		}\
		geWAITSRCFIFO( j ); \
		while( j-- ) \
			geREG(SRC_IMAGE_DATA, *pulData++);  \
		pSrcBits += lSrcStride; \
	} \
	geWAITSRCFIFO( ulExtras ); \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);
#if 1	// No fifo check version

#define	MACRO_PUMP_PACKED_SRCFIFO180(pSrcBits, ulDWords, ulExtras, \
								ulDWordsTotal, lSrcStride, height) \
	PULONG  pulData;\
	ULONG	ulDataTmp,ulData; \
	ULONG	i;\
	while( height-- ) \
	{ \
		pulData = (PULONG)(((ULONG)pSrcBits) & ~0x03UL); \
		for ( i = 0; i < ulDWords; i++ ) \
		{\
			ulDataTmp = *pulData--;\
			ulData = (ulDataTmp >> 24) | (ulDataTmp&0x00FF0000) >> 8 \
				| (ulDataTmp&0x0000FF00) << 8 | (ulDataTmp &0x000000FF)<<24;\
			geREG(SRC_IMAGE_DATA, ulData); \
		}\
		pSrcBits += lSrcStride; \
	} \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);

#else  //  check fifo version	
#define	MACRO_PUMP_PACKED_SRCFIFO180(pSrcBits, ulDWords, ulExtras, \
								ulDWordsTotal, lSrcStride, height) \
	PULONG  pulData;\
	ULONG	ulDataTmp,ulData; \
	ULONG	i,j;\
	while( height-- ) \
	{ \
		pulData = (PULONG)(((ULONG)pSrcBits) & ~0x03UL); \
		j = ulDWords; \
		while ( j >= SRC_FIFO_MAX_DWORDS ) \
		{ \
			geWAITSRCFIFO( SRC_FIFO_MAX_DWORDS ); \
			for ( i = 0; i < SRC_FIFO_MAX_DWORDS; i++ ) \
			{									\
				ulDataTmp = *pulData--;\
				ulData = (ulDataTmp >> 24) | (ulDataTmp&0x00FF0000) >> 8 \
				| (ulDataTmp&0x0000FF00) << 8 | (ulDataTmp &0x000000FF)<<24;\
				geREG(SRC_IMAGE_DATA, ulData); \
			}\
			j -= SRC_FIFO_MAX_DWORDS; \
		}\
		geWAITSRCFIFO( j ); \
		while( j-- ) \
		{\
			ulDataTmp = *pulData--;\
			ulData = (ulDataTmp >> 24) | (ulDataTmp&0x00FF0000) >> 8 \
				| (ulDataTmp&0x0000FF00) << 8 | (ulDataTmp &0x000000FF)<<24;\
			geREG(SRC_IMAGE_DATA, ulData);  \
		}\
		pSrcBits += lSrcStride; \
	} \
	geWAITSRCFIFO( ulExtras ); \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);
#endif	

#if 1 // No fifo check version
#define	MACRO_PUMP_PACKED_SRCFIFO90_270(pSrcBits, width, height, LineInc,\
								PixelInc,ulExtras)\
	ULONG   w;\
	PBYTE   pByte;\
	ULONG	ulData;\
	while( height-- ) \
	{ \
		w = width;\
		pByte = (PBYTE)pSrcBits;\
		pSrcBits += LineInc; \
		while ( w >= 4) \
		{ \
			ulData = (ULONG)(*pByte); \
			pByte += PixelInc;\
			ulData  |= ( (ULONG )(*pByte) << 8);\
			pByte += PixelInc;\
			ulData  |= ( (ULONG )(*pByte) << 16);\
			pByte += PixelInc;\
			ulData  |= ( (ULONG )(*pByte) << 24);\
			pByte += PixelInc;\
			geREG(SRC_IMAGE_DATA,ulData);\
			w -= 4;\
		}\
		if(w)\
		{\
			switch(w)\
			{\
				default:\
					break;\
				case 1:	\
					ulData = (ULONG)(*pByte); \
					break;\
				case 2:\
					ulData = (ULONG)(*pByte); \
					pByte += PixelInc;\
					ulData  |= ( (ULONG )(*pByte) << 8);\
					break;\
				case 3:\
					ulData = (ULONG)(*pByte); \
					pByte += PixelInc;\
					ulData  |= ( (ULONG )(*pByte) << 8);\
					pByte += PixelInc;\
					ulData  |= ( (ULONG )(*pByte) << 16);\
					break;\
			}\
			geREG(SRC_IMAGE_DATA,ulData);\
		}\
	}\
	while(ulExtras--)\
	{\
		geREG(SRC_IMAGE_DATA,0UL);\
	}
			
#else
#define	MACRO_PUMP_PACKED_SRCFIFO90_270(pSrcBits, width, height, LineInc,\
								PixelInc,ulExtras)\
	ULONG   i,j;\
	PBYTE   pByte;\
	ULONG	ulData;\
	ULONG	w=(width&0x03UL);\
	while( height-- ) \
	{ \
		j = width>>2;\
		pByte = (PBYTE)pSrcBits;\
		pSrcBits += LineInc; \
		while ( j >= SRC_FIFO_MAX_DWORDS ) \
		{\
			geWAITSRCFIFO( SRC_FIFO_MAX_DWORDS ); \
			for ( i = 0; i < SRC_FIFO_MAX_DWORDS; i++ ) \
			{									\
				ulData = (ULONG)(*pByte); \
				pByte += PixelInc;\
				ulData  |= ( (ULONG )(*pByte) << 8);\
				pByte += PixelInc;\
				ulData  |= ( (ULONG )(*pByte) << 16);\
				pByte += PixelInc;\
				ulData  |= ( (ULONG )(*pByte) << 24);\
				pByte += PixelInc;\
				geREG(SRC_IMAGE_DATA,ulData);\
			}\
			j -= SRC_FIFO_MAX_DWORDS; \
		}\
		geWAITSRCFIFO( j ); \
		while(j) \
		{									\
			--j;\
			ulData = (ULONG)(*pByte); \
			pByte += PixelInc;\
			ulData  |= ( (ULONG )(*pByte) << 8);\
			pByte += PixelInc;\
			ulData  |= ( (ULONG )(*pByte) << 16);\
			pByte += PixelInc;\
			ulData  |= ( (ULONG )(*pByte) << 24);\
			pByte += PixelInc;\
			geREG(SRC_IMAGE_DATA,ulData);\
		}\
		if(w)\
		{\
			switch(w)\
			{\
				default:\
					break;\
				case 1:	\
					ulData = (ULONG)(*pByte); \
					break;\
				case 2:\
					ulData = (ULONG)(*pByte); \
					pByte += PixelInc;\
					ulData  |= ( (ULONG )(*pByte) << 8);\
					break;\
				case 3:\
					ulData = (ULONG)(*pByte); \
					pByte += PixelInc;\
					ulData  |= ( (ULONG )(*pByte) << 8);\
					pByte += PixelInc;\
					ulData  |= ( (ULONG )(*pByte) << 16);\
					break;\
			}\
			geWAITSRCFIFO( 1 ); \
			geREG(SRC_IMAGE_DATA,ulData);\
		}\
	}\
	geWAITSRCFIFO( ulExtras ); \
	while(ulExtras--)\
	{\
		geREG(SRC_IMAGE_DATA,0UL);\
	}
			
#endif

#if 1	// no FIFO check version

#define	MACRO_PUMP_PACKED_SRCFIFO16BPP180(pSrcBits, ulDWords, ulExtras, \
								ulDWordsTotal, lSrcStride, height) \
	PULONG  pulData;\
	ULONG	ulDataTmp,ulData; \
	ULONG	i,j;\
	while( height-- ) \
	{ \
		pulData = (PULONG)(((ULONG)pSrcBits) & ~0x03UL); \
		j = ulDWords; \
		while ( j >= SRC_FIFO_MAX_DWORDS ) \
		{ \
			for ( i = 0; i < SRC_FIFO_MAX_DWORDS; i++ ) \
			{									\
				ulDataTmp = *pulData--;\
				ulData = (ulDataTmp >> 16) | (ulDataTmp&0x0000FFFF) <<16;\
				geREG(SRC_IMAGE_DATA, ulData); \
			}\
			j -= SRC_FIFO_MAX_DWORDS; \
		}\
		while( j-- ) \
		{\
			ulDataTmp = *pulData--;\
			ulData = (ulDataTmp >> 16) | (ulDataTmp&0x0000FFFF) <<16;\
			geREG(SRC_IMAGE_DATA, ulData);  \
		}\
		pSrcBits += lSrcStride; \
	} \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);

#else // Check FIFO version

#define	MACRO_PUMP_PACKED_SRCFIFO16BPP180(pSrcBits, ulDWords, ulExtras, \
								ulDWordsTotal, lSrcStride, height) \
	PULONG  pulData;\
	ULONG	ulDataTmp,ulData; \
	ULONG	i,j;\
	while( height-- ) \
	{ \
		pulData = (PULONG)(((ULONG)pSrcBits) & ~0x03UL); \
		j = ulDWords; \
		while ( j >= SRC_FIFO_MAX_DWORDS ) \
		{ \
			geWAITSRCFIFO( SRC_FIFO_MAX_DWORDS ); \
			for ( i = 0; i < SRC_FIFO_MAX_DWORDS; i++ ) \
			{									\
				ulDataTmp = *pulData--;\
				ulData = (ulDataTmp >> 16) | (ulDataTmp&0x0000FFFF) <<16;\
				geREG(SRC_IMAGE_DATA, ulData); \
			}\
			j -= SRC_FIFO_MAX_DWORDS; \
		}\
		geWAITSRCFIFO( j ); \
		while( j-- ) \
		{\
			ulDataTmp = *pulData--;\
			ulData = (ulDataTmp >> 16) | (ulDataTmp&0x0000FFFF) <<16;\
			geREG(SRC_IMAGE_DATA, ulData);  \
		}\
		pSrcBits += lSrcStride; \
	} \
	geWAITSRCFIFO( ulExtras ); \
	while( ulExtras-- ) \
		geREG(SRC_IMAGE_DATA, 0UL);
#endif

#if 1 // no FIFO check version	
#define	MACRO_PUMP_PACKED_SRCFIFO16BPP90_270(pSrcBits, width, height, LineInc,\
								PixelInc,ulExtras)\
	ULONG   w;\
	PDWORD  pDWord;\
	ULONG	ulData;\
	ULONG	ulData1;\
	ULONG	i;\
	ULONG	ulWordStart;\
	PDWORD	pBuffer=(PDWORD)MM_GetMemory(width*4);\
	ulWordStart = (ULONG)pSrcBits & 0x03UL;\
	if(ulWordStart)\
	{\
		--height;\
		w = width;\
		pDWord = (PDWORD)(((ULONG)pSrcBits) & ~0x03UL); \
		pSrcBits += LineInc; \
		while ( w >= 2) \
		{ \
			ulData = *pDWord; \
			pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
			ulData1 = *pDWord; \
			pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
			ulData = (ulData>>16) + (ulData1&0xFFFF0000);\
			geREG(SRC_IMAGE_DATA,ulData);\
			w -= 2;\
		}\
		if(w)\
		{\
			ulData = (ulData>>16);\
			geREG(SRC_IMAGE_DATA,ulData);\
		}\
	}\
	while(height)\
	{ \
		--height;\
		i=0;\
		w = width;\
		pDWord = (PDWORD)(((ULONG)pSrcBits) & ~0x03UL); \
		pSrcBits += LineInc; \
		while ( w >= 2) \
		{ \
			ulData = *pDWord; \
			pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
			ulData1 = *pDWord; \
			pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
			pBuffer[i++]= (ulData>>16) + (ulData1&0xFFFF0000);\
			ulData = (ulData & 0x0000FFFF) +(ulData1<<16);\
			geREG(SRC_IMAGE_DATA,ulData);\
			w -= 2;\
		}\
		if(w)\
		{\
			ulData = *pDWord; \
			pBuffer[i]= (ulData>>16);\
			geREG(SRC_IMAGE_DATA,ulData);\
		}\
		i=0;\
		pSrcBits += LineInc; \
	   	if(height)\
		{\
			--height;\
			w = width;\
			while ( w >= 2) \
			{ \
				ulData = pBuffer[i++]; \
				geREG(SRC_IMAGE_DATA,ulData);\
				w -= 2;\
			}\
			if(w)\
			{\
				ulData = pBuffer[i];\
				geREG(SRC_IMAGE_DATA,ulData);\
			}\
		}\
	}\
	MM_ReturnMemory((ADDRESS)pBuffer);\
	while(ulExtras--)\
	{\
		geREG(SRC_IMAGE_DATA,0UL);\
	}

#else // check fifo version
#define	MACRO_PUMP_PACKED_SRCFIFO16BPP90_270(pSrcBits, width, height, LineInc,\
								PixelInc,ulExtras)\
	ULONG   w;\
	PDWORD  pDWord;\
	ULONG	ulData;\
	ULONG	ulData1;\
	ULONG	i,j;\
	ULONG	ulWordStart;\
	PDWORD	pBuffer=(PDWORD)MM_GetMemory(width*4);\
	ulWordStart = (ULONG)pSrcBits & 0x03UL;\
	if(ulWordStart)\
	{\
		--height;\
		w = width;\
		pDWord = (PDWORD)(((ULONG)pSrcBits) & ~0x03UL); \
		pSrcBits += LineInc; \
		while ( w >= 2) \
		{ \
			ulData = *pDWord; \
			pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
			ulData1 = *pDWord; \
			pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
			ulData = (ulData>>16) + (ulData1&0xFFFF0000);\
			geREG(SRC_IMAGE_DATA,ulData);\
			w -= 2;\
		}\
		if(w)\
		{\
			ulData = (ulData>>16);\
			geREG(SRC_IMAGE_DATA,ulData);\
		}\
	}\
	while(height)\
	{ \
		--height;\
		i=0;\
		w = width;\
		pDWord = (PDWORD)(((ULONG)pSrcBits) & ~0x03UL); \
		pSrcBits += LineInc; \
		while ( w >= 2) \
		{ \
			ulData = *pDWord; \
			pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
			ulData1 = *pDWord; \
			pDWord = (PDWORD)((PWORD)(pDWord) + PixelInc);\
			pBuffer[i++]= (ulData>>16) + (ulData1&0xFFFF0000);\
			ulData = (ulData & 0x0000FFFF) +(ulData1<<16);\
			geREG(SRC_IMAGE_DATA,ulData);\
			w -= 2;\
		}\
		if(w)\
		{\
			ulData = *pDWord; \
			pBuffer[i]= (ulData>>16);\
			geREG(SRC_IMAGE_DATA,ulData);\
		}\
		i=0;\
		pSrcBits += LineInc; \
	   	if(height)\
		{\
			--height;\
			w = (width>>1);\
			while ( w >= SRC_FIFO_MAX_DWORDS ) \
			{ \
				geWAITSRCFIFO( SRC_FIFO_MAX_DWORDS ); \
				for ( j = 0; j < SRC_FIFO_MAX_DWORDS; j++ ) \
				{									\
					ulData = pBuffer[i++]; \
					geREG(SRC_IMAGE_DATA, ulData); \
				}\
				w -= SRC_FIFO_MAX_DWORDS; \
			}\
			geWAITSRCFIFO( w ); \
			while (w) \
			{ \
				ulData = pBuffer[i++]; \
				geREG(SRC_IMAGE_DATA,ulData);\
				--w;\
			}\
			if(width&0x01L)\
			{\
				ulData = pBuffer[i];\
				geREG(SRC_IMAGE_DATA,ulData);\
			}\
		}\
	}\
	MM_ReturnMemory((ADDRESS)pBuffer);\
	geWAITSRCFIFO( ulExtras ); \
	while(ulExtras--)\

⌨️ 快捷键说明

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