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

📄 hostctrl.c

📁 Vc0558 backend IC host control
💻 C
📖 第 1 页 / 共 3 页
字号:
//		GPIO_WriteIO(1,19);
		*(volatile UINT8*)(MULTI8_ADDR_DATA) = uTemp;
		MEM_HOLDCLK()
		pData++;
		uSize--;

	}
		OS_EXIT_CRITICAL()
	if((uStartAddr>=0x08000) && (uStartAddr<0x20000))//Lcd 40k buffer or lbuf
	{
		V558_SetReg(V558_REG_BIU_MUL_CLR_AUTO, 0x0);
	}

//	GPIO_WriteIO(0,19);

}

void V558_WriteSram(UINT32 uStartAddr, UINT8* pData, UINT32 uSize)
{

	if((uStartAddr>=0x08000) && (uStartAddr<0x20000))//Lcd 40k buffer or lbuf
	{
		V558_SetReg(V558_REG_BIU_MUL_CLR_AUTO, 0x1);
	}

	V558_SetReg((UINT16)V558_REG_BIU_SEL_PORT,0x1);

	V558_SetReg((UINT16)V558_REG_BIU_INCREMENT,0x1); //Addr auto increate(only effect sram)

	V558_SetReg((UINT16)V558_REG_BIU_MEM_LOW_WORD_H,(UINT8)((uStartAddr&0xff00)>>8));	
	V558_SetReg((UINT16)V558_REG_BIU_MEM_LOW_WORD_L,(UINT8)(uStartAddr&0xff));	
	V558_SetReg((UINT16)V558_REG_BIU_MEM_HIGH_WORD,(UINT8)((uStartAddr&0x30000)>>16));

	OS_ENTER_CRITICAL()
	//Set multi8 emory port addr
//	GPIO_WriteIO(0,19);
	*(volatile UINT8 *)(MULTI8_ADDR_CTRL) = MULTI8_MEM_PORT;
	MEM_HOLDCLK()
	while(uSize>0)
	{
//		GPIO_WriteIO(1,19);
		*(volatile UINT8 *)(MULTI8_ADDR_DATA) = *pData;
		MEM_HOLDCLK()
		
		pData++;
		uSize--;
	}
	OS_EXIT_CRITICAL()
	
	if((uStartAddr>=0x08000) && (uStartAddr<0x20000))//Lcd 40k buffer or lbuf
	{
		V558_SetReg(V558_REG_BIU_MUL_CLR_AUTO, 0x0);
	}
//	GPIO_WriteIO(0,19);


}


#endif



#if V558_BUS_TYPE == V558_BUS_MULTI16
#if 0 //2005.5.5 mask 

void V558_GetReg(UINT32 uAddr, UINT8 *uVal)
{
	if(uAddr < 0x8000)
	{
		OS_ENTER_CRITICAL()

		if(uAddr < 0x1430 || uAddr > 0x144e)
		{
			*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)uAddr;

			MEM_HOLDCLK()
			if((uAddr&0x1) == 0)
			{
				*uVal = (UINT8)((*(volatile UINT16 *)(MULTI16_ADDR_VAL))&0xff);
			}
			else
			{
				*uVal = (UINT8)((*(volatile UINT16 *)(MULTI16_ADDR_VAL)&0xff00)>>8);
			}
			MEM_HOLDCLK()

		}
		else
		{

			//Set to multi8
			*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_SEL_8_16;
			MEM_HOLDCLK()
			*(volatile UINT16 *)(MULTI16_ADDR_VAL) = 0;
			MEM_HOLDCLK()

			*(volatile UINT8 *)(MULTI8_ADDR_CTRL) = (UINT8)MULTI8_REG_WORDH;
			MEM_HOLDCLK()
			*(volatile UINT8 *)(MULTI8_ADDR_DATA) = (UINT8)((uAddr&0xff00)>>8);
			MEM_HOLDCLK()
			*(volatile UINT8 *)(MULTI8_ADDR_CTRL) = (UINT8)MULTI8_REG_WORDL;
			MEM_HOLDCLK()
			*(volatile UINT8 *)(MULTI8_ADDR_DATA) = (UINT8)(uAddr&0xff);
			MEM_HOLDCLK()
			*(volatile UINT8 *)(MULTI8_ADDR_CTRL) = (UINT8)MULTI8_REG_PORT;
			MEM_HOLDCLK()
			*uVal = *(volatile UINT8 *)(MULTI8_ADDR_DATA);
			MEM_HOLDCLK()

			//Set to multi16
			*(volatile UINT8 *)(MULTI8_ADDR_CTRL) = (UINT8)MULTI8_REG_WORDH;
			MEM_HOLDCLK()
			*(volatile UINT8 *)(MULTI8_ADDR_DATA) = (UINT8)((((UINT16)V558_REG_BIU_SEL_8_16)&0xff00)>>8);
			MEM_HOLDCLK()
			*(volatile UINT8 *)(MULTI8_ADDR_CTRL) = (UINT8)MULTI8_REG_WORDL;
			MEM_HOLDCLK()
			*(volatile UINT8 *)(MULTI8_ADDR_DATA) = (UINT8)(((UINT16)V558_REG_BIU_SEL_8_16)&0xff);
			MEM_HOLDCLK()
			*(volatile UINT8 *)(MULTI8_ADDR_CTRL) = (UINT8)MULTI8_REG_PORT;
			MEM_HOLDCLK()
			*(volatile UINT8 *)(MULTI8_ADDR_DATA) = (UINT8)1;
			MEM_HOLDCLK()
		}

		OS_EXIT_CRITICAL()

	}
	else	//sram debug
	{
		OS_ENTER_CRITICAL()

		if((uAddr>=0x20000) && (uAddr<0x30000))//Jpeg buffer
		{
			//reg V558_REG_BIU_SEL_PORT = 0,not select port access (only effect Jbuf sram)
			*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_SEL_PORT;
			MEM_HOLDCLK()
			*(volatile UINT16 *)(MULTI16_ADDR_VAL) = 0x0;
			MEM_HOLDCLK()
		}

		//reg V558_REG_BIU_INCREMENT = 0,Addr not auto increate(only effect sram)
		*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_INCREMENT;
		MEM_HOLDCLK()
		*(volatile UINT16 *)(MULTI16_ADDR_VAL) = 0x0;
		MEM_HOLDCLK()


		//reg V558_REG_BIU_MEM_HIGH_WORD
		*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_HIGH_WORD;
		MEM_HOLDCLK()
		*(volatile UINT16 *)(MULTI16_ADDR_VAL) = (UINT16)((uAddr&0x30000)>>16);
		MEM_HOLDCLK()
		//reg V558_REG_BIU_MEM_LOW_WORD
		*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_LOW_WORD_L;
		MEM_HOLDCLK()
		*(volatile UINT16 *)(MULTI16_ADDR_VAL) = (UINT16)(uAddr&0xffff);
		MEM_HOLDCLK()

		//Set multi6 emory port addr
		*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_FLG;
		MEM_HOLDCLK()
		if((uAddr&0x1) == 0)
		{
			*uVal = (UINT8)(*(volatile UINT16 *)(MULTI16_ADDR_VAL));
		}
		else
		{
			*uVal = (UINT8)((*(volatile UINT16 *)(MULTI16_ADDR_VAL)&0xff00)>>8);
		}
		MEM_HOLDCLK()

		if((uAddr>=0x20000) && (uAddr<0x30000))//Jpeg buffer
		{
			//reg V558_REG_BIU_SEL_PORT = 1,select port access (only effect Jbuf sram)
			*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_SEL_PORT;
			MEM_HOLDCLK()
			*(volatile UINT16 *)(MULTI16_ADDR_VAL) = 0x1;
			MEM_HOLDCLK()
		}

		OS_EXIT_CRITICAL()
	}
}
void V558_SetReg(UINT32 uAddr, UINT8 uVal)
{
	UINT16 uTemp;

	if(uAddr < 0x8000)
	{
		OS_ENTER_CRITICAL()

		*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)uAddr;
		MEM_HOLDCLK()
		uTemp = *(volatile UINT16 *)(MULTI16_ADDR_VAL);
		MEM_HOLDCLK()
		if((uAddr&0x1) == 0)
		{
			*(volatile UINT16 *)(MULTI16_ADDR_VAL) = (uTemp&0xff00)|uVal;
		}
		else
		{
			*(volatile UINT16 *)(MULTI16_ADDR_VAL) = (uTemp&0xff)|(uVal<<8);
		}
		MEM_HOLDCLK()

		if(uAddr>=0x41a&&uAddr<=0x42b)
		{
         		uTemp = 0x8001;
   			*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_LCD_LCDTEST;
			MEM_HOLDCLK()
			*(volatile UINT16 *)(MULTI16_ADDR_VAL) = uTemp;
			MEM_HOLDCLK()
		}

		OS_EXIT_CRITICAL()
	}
	else		//sram debug
	{
		OS_ENTER_CRITICAL()

		if((uAddr>=0x20000) && (uAddr<0x30000))//Jpeg buffer
		{
			//reg V558_REG_BIU_SEL_PORT = 0,not select port access (only effect Jbuf sram)
			*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_SEL_PORT;
			MEM_HOLDCLK()
			*(volatile UINT16 *)(MULTI16_ADDR_VAL) = 0x0;
			MEM_HOLDCLK()
		}

		//reg V558_REG_BIU_INCREMENT = 0,Addr not auto increate(only effect sram)
		*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_INCREMENT;
		MEM_HOLDCLK()
		*(volatile UINT16 *)(MULTI16_ADDR_VAL) = 0x0;
		MEM_HOLDCLK()



		//reg V558_REG_BIU_MEM_HIGH_WORD
		*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_HIGH_WORD;
		MEM_HOLDCLK()
		*(volatile UINT16 *)(MULTI16_ADDR_VAL) = (UINT16)((uAddr&0x30000)>>16);
		MEM_HOLDCLK()
		//reg V558_REG_BIU_MEM_LOW_WORD

		*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_LOW_WORD_L;
		MEM_HOLDCLK()
		*(volatile UINT16 *)(MULTI16_ADDR_VAL) = (UINT16)(uAddr&0xffff);
		MEM_HOLDCLK()



		//Set multi6 emory port addr
		*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_FLG;
		MEM_HOLDCLK()
		uTemp = *(volatile UINT16 *)(MULTI16_ADDR_VAL);
		MEM_HOLDCLK()
		if((uAddr&0x1) == 0)
		{
			*(volatile UINT16 *)(MULTI16_ADDR_VAL) = (uTemp&0xff00)|uVal;
		}
		else
		{
			*(volatile UINT16 *)(MULTI16_ADDR_VAL) = (uTemp&0xff)|(uVal<<8);
		}
		MEM_HOLDCLK()
		if((uAddr>=0x20000) && (uAddr<0x30000))//Jpeg buffer
		{
			//reg V558_REG_BIU_SEL_PORT = 1,select port access (only effect Jbuf sram)
			*(volatile UINT16 *)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_SEL_PORT;
			MEM_HOLDCLK()
			*(volatile UINT16 *)(MULTI16_ADDR_VAL) = 0x1;
			MEM_HOLDCLK()
		}

		OS_EXIT_CRITICAL()
	}

}
void V558_ReadSramVideo(UINT32 uStartAddr, UINT8* pData, UINT32 uSize)
{
	UINT16 uTemp = 0;

	V558_SetReg((UINT16)V558_REG_BIU_SEL_PORT,0x1);

	V558_SetReg((UINT16)V558_REG_BIU_INCREMENT,0x1); //Addr auto increate(only effect sram)

	V558_SetReg((UINT16)V558_REG_BIU_MEM_LOW_WORD_L, (UINT8)(uStartAddr&0xff));	
	V558_SetReg((UINT16)V558_REG_BIU_MEM_LOW_WORD_H, (UINT8)((uStartAddr&0xff00)>>8));	
	V558_SetReg((UINT16)V558_REG_BIU_MEM_HIGH_WORD, (UINT8)((uStartAddr&0x30000)>>16));

	
	//Set multi6 emory port addr
	OS_ENTER_CRITICAL()
	*(volatile UINT16*)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_FLG;
	MEM_HOLDCLK()
	uSize /= 2;

	while(uSize>0)
	{
		switch(VideoFrame.Video_Discard)
		{
			case PrapareDiscard:
				uTemp = *(volatile UINT16*)(MULTI16_ADDR_VAL);
				MEM_HOLDCLK()
				*pData = (UINT8)uTemp;
				
				VideoFrame.Video_Data=(VideoFrame.Video_Data<<8)|(*pData);
				if(VideoFrame.Video_Data==0xffd8)
					VideoFrame.Frame_NowNumber++;
				
				if(VideoFrame.Frame_NowNumber>VideoFrame.Discard_Number)
					{
						VideoFrame.Video_Discard=DiscardNow;
						pData--;
						VideoFrame.Video_ActLenth--;
						VideoFrame.Frame_NowNumber=0;
					}
				else
					{
						pData++;
						VideoFrame.Video_ActLenth++;
					}
				
				*pData = (UINT8)((uTemp&0xff00)>>8);

				VideoFrame.Video_Data=(VideoFrame.Video_Data<<8)|(*pData);
				if(VideoFrame.Video_Data==0xffd8)
					VideoFrame.Frame_NowNumber++;
				
				if(VideoFrame.Frame_NowNumber>VideoFrame.Discard_Number)
					{
						VideoFrame.Video_Discard=DiscardNow;
						pData--;
						VideoFrame.Video_ActLenth--;
						VideoFrame.Frame_NowNumber=0;
					}
				else
					{
						pData++;
						VideoFrame.Video_ActLenth++;
					}
				
				break;
		case DiscardNow:

				uTemp = *(volatile UINT16*)(MULTI16_ADDR_VAL);
				MEM_HOLDCLK()
				*pData = (UINT8)uTemp;
				
				VideoFrame.Video_Data=(VideoFrame.Video_Data<<8)|(*pData);
				if(VideoFrame.Video_Data==0xffd8)
					{
					VideoFrame.Video_Discard=PrapareDiscard;
					*pData=0xff;
					*(pData+1)=0xd8;
					pData+=2;
					VideoFrame.Video_ActLenth+=2;
					VideoFrame.Frame_NowNumber++;
					}
				
				*pData = (UINT8)((uTemp&0xff00)>>8);
				
				VideoFrame.Video_Data=(VideoFrame.Video_Data<<8)|(*pData);
				if(VideoFrame.Video_Data==0xffd8)
					{
					VideoFrame.Video_Discard=PrapareDiscard;
					*pData=0xff;
					*(pData+1)=0xd8;
					pData+=2;
					VideoFrame.Video_ActLenth+=2;
					VideoFrame.Frame_NowNumber++;
					}
				break;
		default:

				uTemp = *(volatile UINT16*)(MULTI16_ADDR_VAL);
				MEM_HOLDCLK()
				*pData = (UINT8)uTemp;
				pData++;
				*pData = (UINT8)((uTemp&0xff00)>>8);
				pData++;

		break;
		}
		uSize--;
	}
	OS_EXIT_CRITICAL()
}
void V558_ReadSram(UINT32 uStartAddr, UINT8* pData, UINT32 uSize)
{
	UINT16 uTemp = 0;
	UINT8 uLeft = 0;
	if((VideoFrame.Video_Discard!=NoNeedDiscard)&&(g_558_WorkStatus==STATE558_Video))		//angela
		{
		V558_ReadSramVideo(uStartAddr,pData,uSize);
			return;
		}
	if((uStartAddr>=0x08000) && (uStartAddr<0x20000))//Lcd 40k buffer or lbuf

	{
		V558_SetReg(V558_REG_BIU_MUL_CLR_AUTO, 0x1);
	}

	V558_SetReg((UINT16)V558_REG_BIU_SEL_PORT,0x1);

	V558_SetReg((UINT16)V558_REG_BIU_INCREMENT,0x1); //Addr auto increate(only effect sram)

	V558_SetReg((UINT16)V558_REG_BIU_MEM_LOW_WORD_L, (UINT8)(uStartAddr&0xff));	
	V558_SetReg((UINT16)V558_REG_BIU_MEM_LOW_WORD_H, (UINT8)((uStartAddr&0xff00)>>8));	
	V558_SetReg((UINT16)V558_REG_BIU_MEM_HIGH_WORD, (UINT8)((uStartAddr&0x30000)>>16));

	OS_ENTER_CRITICAL()
	
	//Set multi6 emory port addr
	*(volatile UINT16*)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_FLG;
	MEM_HOLDCLK()

	if((uStartAddr>=0x10000) && (uStartAddr<0x20000))//Lcd 40k buffer
	{
		if(uStartAddr&0x1)
		{
			*pData = (UINT8)((*(volatile UINT16 *)(MULTI16_ADDR_VAL))&0xff);
			MEM_HOLDCLK()

⌨️ 快捷键说明

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