📄 hostctrl.c
字号:
// 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 + -