📄 drvuart.c
字号:
else if( UART_EXT_CMD_MS_DAT1 == 0x0C )
{
putchar( g_u8_S_H_U );
}
else if( UART_EXT_CMD_MS_DAT1 == 0x0D )
{
putchar( g_u8_S_H_D );
}
break;
case URCMD_MST_DLC_TEST_BOUNDARY_WRITE:
if( UART_EXT_CMD_MS_DAT1 == 0x04 )
{
g_u8_L_L_U = UART_EXT_CMD_MS_DAT2 >> 4;
g_u8_L_L_D = UART_EXT_CMD_MS_DAT2 & 0x0F;
}
else if( UART_EXT_CMD_MS_DAT1 == 0x06 )
{
g_u8_L_H_U = UART_EXT_CMD_MS_DAT2 >> 4;
g_u8_L_H_D = UART_EXT_CMD_MS_DAT2 & 0x0F;
}
else if( UART_EXT_CMD_MS_DAT1 == 0x08 )
{
g_u8_S_L_U = UART_EXT_CMD_MS_DAT2;
}
else if( UART_EXT_CMD_MS_DAT1 == 0x09 )
{
g_u8_S_L_D = UART_EXT_CMD_MS_DAT2;
}
else if( UART_EXT_CMD_MS_DAT1 == 0x0C )
{
g_u8_S_H_U = UART_EXT_CMD_MS_DAT2;
}
else if( UART_EXT_CMD_MS_DAT1 == 0x0D )
{
g_u8_S_H_D = UART_EXT_CMD_MS_DAT2;
}
break;
} // End of switch(dev_cmd)
break;
}
#endif //ENABLE_DLC_TEST_BY_MSTVTOOL
case uartExtDev_I2C_DEVICE:
u8addressCount = (UART_EXT_CMD_MS_DAT1 & 0xF0) >> 4;
u8dataCount = (UART_EXT_CMD_MS_DAT1 & 0x0F);
if( u8addressCount + u8dataCount > 12 ) //UART_EXT_CMD_MS_DAT2...UART_EXT_CMD_MS_DAT13
UARTMSG(printf("I2C error!"));
if( UART_EXT_CMD & 0x01 ) // I2C read
u8Result = MDrv_IIC_ReadBytes( UART_EXT_CMD,
u8addressCount,
&UART_EXT_CMD_MS_DAT2,
u8dataCount,
(&UART_EXT_CMD_MS_DAT2)+u8addressCount);
else // I2C write
u8Result = MDrv_IIC_WriteBytes( UART_EXT_CMD,
u8addressCount,
&UART_EXT_CMD_MS_DAT2,
u8dataCount,
(&UART_EXT_CMD_MS_DAT2)+u8addressCount);
if( u8Result )
{
i = _UART_CMD_INDEX5_;
UARTMSG(printf("0x%02X ", (U16)UART_EXT_CMD ));
while( u8addressCount > 0 )
{
UARTMSG(printf("W0x%02X ", (U16)g_UartCommand.Buffer[i]));
--u8addressCount;
++i;
}
while( u8dataCount > 0 )
{
if( UART_EXT_CMD & 0x01 )
UARTMSG(printf("R0x%02X ", (U16)g_UartCommand.Buffer[i]));
else
UARTMSG(printf("W0x%02X ", (U16)g_UartCommand.Buffer[i]));
--u8dataCount;
++i;
}
UARTMSG(printf("\r\n"));
}
else
UARTMSG(printf("0x%02X doesn't exist!\r\n", (U16)UART_EXT_CMD));
break;
case uartExtDev_SAMSUNG_S5H1409_DEMODE:
i = 0;
while( 1 )
{
if( MDrv_IIC_ReadBytes( UART_EXT_CMD|0x01 , 1, &i, 2, &UART_EXT_CMD_MS_DAT12) )
UARTMSG(printf("Reg 0x%02X = 0x%02X 0x%02X\n", (U16)i, (U16)UART_EXT_CMD_MS_DAT12, (U16)UART_EXT_CMD_MS_DAT13));
else
{
UARTMSG(printf("0x%02X doesn't exist!\r\n", (U16)UART_EXT_CMD));
break;
}
if( i == 0xFF )
break;
++i;
}
break;
#if 0//((CHANNEL_SCAN_AUTO_TEST == 1) || (SFU_AUTO_TEST == 1))
case uartExtDev_I2C_DEVICE_NEW:
MDrv_UART_I2C_Device();
break;
case uartExtDev_SCAN_TUNER:
MDrv_UART_Scan_Tuner();
break;
#endif
#if 0//(CHANNEL_SCAN_AUTO_TEST == 1)
case uartExtDev_AUDIO_DEBUG:
switch(UART_EXT_CMD)
{
case UART_AUDIODBG_CMD_SET_BK9:
g_ScanAutoTestAU.u8RegStartAddr = UART_AUDIO_DATA1;
g_ScanAutoTestAU.u8WriteData = UART_AUDIO_DATA2;
g_ScanAutoTestAU.u8ReadBytes = UART_AUDIO_DATA3;
g_u8ScanAutoTestCmd |= AUDIO_DEBUG_CMD_RWREG;
break;
}
break;
#endif
default:
UARTMSG(printf("Unsupport ExtDev %d\n", (U16)UART_EXT_DEV));
break;
}
}
#else
static U8 code u8Dummy;
#endif /* ENABLE_MSTV_UART_DEBUG */
#if USE_PIU_UART
void MDrv_UART_FIFO_Init(DWORD u32Value)
{
U16 count;
// Enable INT
EX1 = 1;
// Select UART port
#if (UART_PORT_SEL == UART_PORT1)
MDrv_Moses_SetUartPad(UART_PAD_0,UART_PAD_1);// for SIC
#else
MDrv_Moses_SetUartPad(UART_FIFO,UART_PAD_0);
#endif
// Enable IRQ SRC
MDrv_WriteRegBit(BK_2B_0C_L, 0, _BIT0);
// IER
MDrv_WriteByte(BK_PIU_MISC_13_H, UART_IER_SEL);
// UART FIFO Trigger
MDrv_WriteByte(BK_PIU_MISC_14_L, UART_FIFO_TRIGGER);
// Attribute
MDrv_WriteByte(BK_PIU_MISC_14_H, UART_ATTR_SEL);
//Set Boudrate
MDrv_WriteRegBit(BK_PIU_MISC_14_H, 1, _BIT7);
MDrv_Write2Byte(BK_PIU_MISC_12_L, UART_FIFO_BAUDRATE(u32Value, UART_FIFO_BAUDRATE_SEL));
MDrv_WriteRegBit(BK_PIU_MISC_14_H, 0, _BIT7);
for(count=0;count<UART_FIFO_BUFFER_MAX;count++)
UartBuffer[count]=0;
UartFifoIntState=0;
UartIndex_E=0;
UartIndex_R=0;
UartIndex_R_temp=0;
UartFifoRemainBufCount=UART_FIFO_BUFFER_MAX-1;
UartFifoCS=0;
UartFifoTimeOutCount=0;
}
// check command
// return 0 : no command
// return other : command length
U8 MDrv_UART_FIFO_CheckCommand(void)
{
U8 count=0;
if(UartIndex_E!=UartIndex_R)
count=UartBuffer[UartIndex_E];
return count;
}
// get command
// count : get data counter
// pdata : data point
void MDrv_UART_FIFO_GetCommand(U8 count,U8 *pData)
{
U8 i;
for(i=0;i<count;i++)
pData[i]=UartBuffer[(UartIndex_E+i)&(UART_FIFO_BUFFER_MAX-1)];
UartIndex_E=(UartIndex_E+count)&(UART_FIFO_BUFFER_MAX-1);
UartFifoRemainBufCount+=count;
}
U8 MDrv_UART_PUTS(char c)
{
while(MDrv_ReadByte(BK_PIU_MISC_15_L)&0x80){} //data full in tx FIFO???
MDrv_WriteByte(BK_PIU_MISC_13_L, c);
return 0;
}
/*
void IntToStr( WORD wVal, BYTE ucBase, BYTE* pBuf )
{
BOOL bShowZero = FALSE;
WORD wDivider;
BYTE ucDisp;
if( 0 == wVal )
{
pBuf[0] = '0';
pBuf[1] = '\0';
return;
}
if( 16 == ucBase )
wDivider = 0x1000;
else
wDivider = 10000;
while( wDivider )
{
ucDisp = wVal/wDivider;
wVal = wVal%wDivider;
if( ucDisp )
bShowZero = TRUE;
if( ucDisp || bShowZero )
{
if( ucDisp < 10 )
*pBuf = '0' + ucDisp;
else
*pBuf = 'A' + ucDisp - 10;
pBuf ++;
}
if( 16 == ucBase )
wDivider /= 0x10;
else
wDivider /= 10;
}
*pBuf = '\0';
}
void MDrv_UART_PUTSTR(BYTE *pFmt)
{
BYTE ucBff; // character buffer
while (1)
{
ucBff = *pFmt; // get a character
if (ucBff == _EOS_) // check end of string
break;
MDrv_UART_PUTS(ucBff); // put a character
pFmt++; // next
} // while
}
xdata unsigned char s_Buf[6];
void MDrv_UART_PRINTFS( BYTE code *pFmt, WORD wVal )
{
BYTE ucBff;
while( ucBff = *(pFmt++) )
{
if(ucBff == '%') // check special case
{
switch( *(pFmt++) ) // check next character
{
case 'x': // hexadecimal number
case 'X':
IntToStr( wVal, 16, s_Buf );
MDrv_UART_PUTSTR( s_Buf );
break;
case 'd': // decimal number
case 'i':
IntToStr( wVal, 10, s_Buf );
MDrv_UART_PUTSTR( s_Buf );
break;
} // switch
}
else // general
MDrv_UART_PUTS(ucBff); // put a character
} // while
}*/
#endif
#undef _DRVUART_C_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -