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

📄 hostctrl.c

📁 Vc0558 backend IC host control
💻 C
📖 第 1 页 / 共 3 页
字号:
			uSize--;
			pData++;
		}
		uLeft = (UINT8)(uSize & 0x1);
		uSize /= 2;


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

			pData++;

			*pData = (UINT8)uTemp;


			pData++;
			uSize--;
		}
		if(uLeft == 1)
		{
			*pData = (UINT8)((*(volatile UINT16 *)(MULTI16_ADDR_VAL)&0xff00)>>8);
			MEM_HOLDCLK()
		}
	}
	else
	{
		if(uStartAddr&0x1)
		{
			*pData = (UINT8)((*(volatile UINT16 *)(MULTI16_ADDR_VAL)&0xff00)>>8);
			MEM_HOLDCLK()

			uSize--;
			pData++;
		}
		uLeft = (UINT8)(uSize & 0x1);
		uSize /= 2;


		while(uSize>0)
		{
			uTemp = *(volatile UINT16*)(MULTI16_ADDR_VAL);
			MEM_HOLDCLK()
			*pData = (UINT8)uTemp;


			pData++;

			*pData = (UINT8)((uTemp&0xff00)>>8);

			pData++;
			uSize--;
		}
		if(uLeft == 1)
		{
			*pData = (UINT8)((*(volatile UINT16 *)(MULTI16_ADDR_VAL))&0xff);

			MEM_HOLDCLK()
		}

	}
	OS_EXIT_CRITICAL()

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


void V558_WriteLcdSram(UINT32 uStartAddr, UINT16* pData, UINT32 uSize)
{
UINT16 uTemp = 0;
	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()
	*(volatile UINT16*)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_FLG;
	while(uSize>0)
	{
		uTemp = *(pData);

		*(volatile UINT16*)(MULTI16_ADDR_VAL) = uTemp;
		MEM_HOLDCLK()
		pData++;
		uSize--;

	}
		OS_EXIT_CRITICAL()
	V558_SetReg(V558_REG_BIU_MUL_CLR_AUTO, 0x0);
}
void V558_WriteSram(UINT32 uStartAddr, UINT8* pData, UINT32 uSize)
{
	UINT16 uTemp = 0;
	UINT8 uLeft = 0;

	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));

	if((uStartAddr>=0x10000) && (uStartAddr<0x20000))//Lcd 40k buffer
	{

		OS_ENTER_CRITICAL()

		if(uStartAddr&0x1)
		{
			//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()

			//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()

			//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) = 0x1;
			MEM_HOLDCLK()

			//Set multi6 emory port addr
			*(volatile UINT16*)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_FLG;
			MEM_HOLDCLK()
			*(volatile UINT16 *)(MULTI16_ADDR_VAL) = (uTemp&0xff00)|*pData;
			MEM_HOLDCLK()

			uSize--;
			pData++;

		}
		uLeft = (UINT8)(uSize & 0x1);
		uSize /= 2;

		//Set multi6 emory port addr
		*(volatile UINT16*)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_FLG;
		MEM_HOLDCLK()
		while(uSize>0)
		{
			uTemp = *(pData+1);
			uTemp += (UINT16)(*pData)<<8;
			pData+=2;

			*(volatile UINT16*)(MULTI16_ADDR_VAL) = uTemp;
			MEM_HOLDCLK()

			uSize--;

		}
		if(uLeft)
		{
			//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()

			//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()

			//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) = 0x1;
			MEM_HOLDCLK()

			//Set multi6 emory port addr
			*(volatile UINT16*)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_FLG;
			MEM_HOLDCLK()
			*(volatile UINT16 *)(MULTI16_ADDR_VAL) = (uTemp&0xff)|(*pData<<8);
			MEM_HOLDCLK()
		}
		OS_EXIT_CRITICAL()
	}
	else
	{
		OS_ENTER_CRITICAL()

		if(uStartAddr&0x1)
		{
			//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()

			//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()

			//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) = 0x1;
			MEM_HOLDCLK()

			//Set multi6 emory port addr
			*(volatile UINT16*)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_FLG;
			MEM_HOLDCLK()
			*(volatile UINT16 *)(MULTI16_ADDR_VAL) = (uTemp&0xff)|(*pData<<8);
			MEM_HOLDCLK()
			
			uSize--;
			pData++;
			
		}
		
		uLeft = (UINT8)(uSize & 0x1);
		uSize /= 2;

		*(volatile UINT16*)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_FLG;
		MEM_HOLDCLK()
		while(uSize>0)
		{
			uTemp = *pData;
			pData++;
			
			uTemp += (UINT16)(*pData)<<8;
			pData++;
//	if(uTemp==0xd9ff)
//	     uTemp=0xd9ff;//0xffd9;		
			*(volatile UINT16*)(MULTI16_ADDR_VAL) = uTemp;
			MEM_HOLDCLK()
			
			uSize--;			
		}
		if(uLeft == 1)
		{
			//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()

			//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()

			//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) = 0x1;
			MEM_HOLDCLK()

			//Set multi6 emory port addr
			*(volatile UINT16*)(MULTI16_ADDR_ADDR) = (UINT16)V558_REG_BIU_MEM_FLG;
			MEM_HOLDCLK()
			*(volatile UINT16 *)(MULTI16_ADDR_VAL) = (uTemp&0xff00)|*pData;
			MEM_HOLDCLK()
		}
		OS_EXIT_CRITICAL()
		
	}
	
	
	if((uStartAddr>=0x08000) && (uStartAddr<0x20000))//Lcd 40k buffer or lbuf
	{
		V558_SetReg(V558_REG_BIU_MUL_CLR_AUTO, 0x0);
	}
}

#endif//2005.5.5 mask 
#endif

//********************************************************************************
//Private functions
//********************************************************************************
/*
void DrvInit_558BUS(void)
{
#if V558_BUS_TYPE == V558_BUS_MULTI8
	DrvSetMultiSel(VMV_MULTI_SEL8);
#endif

#if V558_BUS_TYPE == V558_BUS_MULTI16
	DrvSetMultiSel(VMV_MULTI_SEL16);
#endif
	//Delay(50);	
}*/

void DrvSetMultiSel(VMV_MULTI_SEL sel)	//Set register 188c ,(multi8)
{
//		GPIO_WriteIO(0,19);

		*(volatile UINT8 *)(MULTI8_ADDR_CTRL) = (UINT8)MULTI8_REG_WORDH;
//		GPIO_WriteIO(1,19);

		*(volatile UINT8 *)(MULTI8_ADDR_DATA) = (UINT8)((((UINT16)V558_REG_BIU_SEL_8_16)&0xff00)>>8);
//		GPIO_WriteIO(0,19);

		*(volatile UINT8 *)(MULTI8_ADDR_CTRL) = (UINT8)MULTI8_REG_WORDL;
//		GPIO_WriteIO(1,19);

		*(volatile UINT8 *)(MULTI8_ADDR_DATA) = (UINT8)(((UINT16)V558_REG_BIU_SEL_8_16)&0xff);
//		GPIO_WriteIO(0,19);

		*(volatile UINT8 *)(MULTI8_ADDR_CTRL) = (UINT8)MULTI8_REG_PORT;
//		GPIO_WriteIO(1,19);

		*(volatile UINT8 *)(MULTI8_ADDR_DATA) = (UINT8)sel;

}

void USER558_Init558BUS(void)
{
#if V558_BUS_TYPE == V558_BUS_MULTI8
	DrvSetMultiSel(VMV_MULTI_SEL8);
#endif

#if V558_BUS_TYPE == V558_BUS_MULTI16
	DrvSetMultiSel(VMV_MULTI_SEL16);
#endif
	//Delay(50);	
}




typedef struct _VERSIONINFO {
    UINT8 ChipVersion[5];
    UINT8 HAVersion[17];
    UINT8 DRVVersion[16]; 
    UINT8 BusType[2];
    UINT8 SensorType[3];   
    UINT8 LCDType[3];           
} VERSIONINFO, *PVERSIONINFO;



VERSIONINFO V558RDK_VERSION;
extern UINT8 const HAPI_VERSION[5];
extern UINT8 const DRIV_VERSION[5];

UINT8* USER558_GetRDKVersion(void) //length=44 bytes
{
	V558RDK_VERSION.ChipVersion[0]='V';
	V558RDK_VERSION.ChipVersion[1]='5';
	V558RDK_VERSION.ChipVersion[2]='5';
	V558RDK_VERSION.ChipVersion[3]='8';
	V558RDK_VERSION.ChipVersion[4]='-';	
	V558RDK_VERSION.HAVersion[0]='H';
	V558RDK_VERSION.HAVersion[1]='A';	
	V558RDK_VERSION.HAVersion[2]='P';	
	V558RDK_VERSION.HAVersion[3]='I';
	V558RDK_VERSION.HAVersion[4]=0x30+(HAPI_VERSION[0]/10);
	V558RDK_VERSION.HAVersion[5]=0x30+(HAPI_VERSION[0]%10);	
	V558RDK_VERSION.HAVersion[6]='-';
	V558RDK_VERSION.HAVersion[7]=0x30+(HAPI_VERSION[1]/10);
	V558RDK_VERSION.HAVersion[8]=0x30+(HAPI_VERSION[1]%10);	
	V558RDK_VERSION.HAVersion[9]='-';

	V558RDK_VERSION.HAVersion[10]=0x30+(HAPI_VERSION[2]/10);
	V558RDK_VERSION.HAVersion[11]=0x30+(HAPI_VERSION[2]%10);	
	V558RDK_VERSION.HAVersion[12]='-';
	V558RDK_VERSION.HAVersion[13]=0x30+(HAPI_VERSION[3]%10);	
	V558RDK_VERSION.HAVersion[14]='.';	
	V558RDK_VERSION.HAVersion[15]=0x30+(HAPI_VERSION[4]%10);
	V558RDK_VERSION.HAVersion[16]='-';		
	V558RDK_VERSION.DRVVersion[0]='D';
	V558RDK_VERSION.DRVVersion[1]='R';	
	V558RDK_VERSION.DRVVersion[2]='I';	
	V558RDK_VERSION.DRVVersion[3]='V';
	V558RDK_VERSION.DRVVersion[4]=0x30+(DRIV_VERSION[0]/10);
	V558RDK_VERSION.DRVVersion[5]=0x30+(DRIV_VERSION[0]%10);	
	V558RDK_VERSION.DRVVersion[6]='-';
	V558RDK_VERSION.DRVVersion[7]=0x30+(DRIV_VERSION[1]/10);
	V558RDK_VERSION.DRVVersion[8]=0x30+(DRIV_VERSION[1]%10);	
	V558RDK_VERSION.DRVVersion[9]='-';
	V558RDK_VERSION.DRVVersion[10]=0x30+(DRIV_VERSION[2]/10);
	V558RDK_VERSION.DRVVersion[11]=0x30+(DRIV_VERSION[2]%10);	
	V558RDK_VERSION.DRVVersion[12]='-';
	V558RDK_VERSION.DRVVersion[13]=0x30+(DRIV_VERSION[3]%10);	
	V558RDK_VERSION.DRVVersion[14]='.';	
	V558RDK_VERSION.DRVVersion[15]=0x30+(DRIV_VERSION[4]%10);

	V558RDK_VERSION.BusType[0]='-';		
	V558RDK_VERSION.BusType[1]=V558_BUS_TYPE+0x30;
	V558RDK_VERSION.SensorType[0]='-';		
	V558RDK_VERSION.SensorType[1]=0x30+((UINT8)SENSOR_TYPE/10);		
	V558RDK_VERSION.SensorType[2]=0x30+((UINT8)SENSOR_TYPE%10);	
	V558RDK_VERSION.LCDType[0]='-';			
	V558RDK_VERSION.LCDType[1]=0x30+((UINT8)LCD_TYPE/10);		
	V558RDK_VERSION.LCDType[2]=0x30+((UINT8)LCD_TYPE%10);		

	return (UINT8 *)&V558RDK_VERSION;
		
}

//HAPI VERSION: 04-03-30-1.0
//UINT8 const HAPI_VERSION[5]={04,03,31,1,0};

//DRIVE VERSION: 04-03-30-1.0
//UINT8 const DRIV_VERSION[5]={04,03,31,1,0};

⌨️ 快捷键说明

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