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

📄 drvuart.c

📁 TFT-LCD驱动芯片MST776的驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
                    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 + -