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

📄 drvuart.c

📁 mstar 776 开发的车载dvd
💻 C
📖 第 1 页 / 共 2 页
字号:
////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2006-2007 MStar Semiconductor, Inc.
// All rights reserved.
//
// Unless otherwise stipulated in writing, any and all information contained
// herein regardless in any format shall remain the sole proprietary of
// MStar Semiconductor Inc. and be kept in strict confidence
// (¨MStar Confidential Information〃) by the recipient.
// Any unauthorized act including without limitation unauthorized disclosure,
// copying, use, reproduction, sale, distribution, modification, disassembling,
// reverse engineering and compiling of the contents of MStar Confidential
// Information is unlawful and strictly prohibited. MStar hereby reserves the
// rights to any and all damages, losses, costs and expenses resulting therefrom.
//
///@file drvuart.h
///@brief System functions:UART Module
/// This file is vaild when "ENABLE_MSTV_UART_DEBUG" is enable
/// The brief function is get the register content by UART without halt the whole
/// system.
//
///////////////////////////////////////////////////////////////////////////////

#define _DRVUART_C_

#include "mreg51.h"
#include "datatype.h"
#include "hwreg.h"
#include "drvuart.h"
#include "sysinfo.h"
#include "Analog_Reg.h"
#include "drviic.h"
#include "drvDLC.h"
#include "drvTimer.h"
#include "panel.h"
#include "Mapp_globalVar.h"
#include "msAPI_Auto.h"

#include "drvmode.h"
#include "msAPI_Mode.h"
#include "drvScaler.h"
#include "msgpio.h"
#include "VersionInfo.h"
#include "msAPI_DLC.h"
#include "mcuprotocol.h"

//#include "SI2cHost.h"
extern BOOLEAN MDrv_IIC_WriteBytes(U8 u8SlaveID, U8 AddrCnt, U8* pu8addr, U16 u16size, U8* pBuf);// kevin 071027_0

/* original stuff in MDrv_UART_Init() is moved to drvsys.c */

/******************************************************************************/
///Initial UART relative variable and flag.
/******************************************************************************/
void MDrv_UART_Init(void)
{

    // reset Uart variables
    TI = 0;
    g_UartCommand.Index = 0;
    g_Uart1Command.BuffIndex = 0;
    g_Uart1Command.CommandIndex = 0;
    g_Uart1Command.CommandCRC = 0;
    g_u8Uart1CommandIndex = 0;

    g_bDebugASCIICommandFlag = 0;
    g_bDebugProgStopFlag = FALSE;

    g_Uart0CheckTick = 0;
    g_Uart1CheckTick = 0;
    g_bUart1WaitAck = 0;
    g_bUart1Ack = 0;
#if (CHANNEL_SCAN_AUTO_TEST == 1)
    MDrv_UART_AutoScanTest_Init();
#endif
}

void MDrv_UART1_SendSTR370Command(void)
{
    U8 u8Dummy,u8CommandCRC,i;
    u8CommandCRC =0xF0+g_Uart1Command.CommandLength;
    for(i=0;i<g_Uart1Command.CommandLength-1;i++)
        u8CommandCRC+=g_Uart1Command.SendBuffer[i];
    u8Dummy = 3;    //loop dummy
    while (u8Dummy--)
    {
        putcharUART1(0xF0);
        putcharUART1(g_Uart1Command.CommandLength);
        for(i=0;i<g_Uart1Command.CommandLength-1;i++)
            putcharUART1(g_Uart1Command.SendBuffer[i]);
        putcharUART1(u8CommandCRC);
        g_bUart1WaitAck = TRUE;
        g_bUart1Ack = FALSE;
        MDrv_Timer_Delayms(6);
        if(g_bUart1Ack==TRUE)  //check ack
            break;
        else
            UARTMSG(printf("SendSTR370Command %bx\r\n", u8Dummy));
    }
}

#if (ENABLE_MSTV_UART_DEBUG)


//#define UARTMSG(x)    x

#if ((CHANNEL_SCAN_AUTO_TEST == 1) || (SFU_AUTO_TEST == 1))
#include "drvuart_scan.c"
#endif
extern U8 g_u8MenuMainItemIndex;
extern U8 g_u8MenuPageIndex;
extern MenuPageType code tblMenuPages[];

extern void msAPI_hdcpkeyBurstWriteBytes(WORD wIndex, BYTE *pBuf, WORD ucBufLen);
extern void msAPI_hdcpkeyReadByte(WORD wIndex, BYTE *pBuf);
extern void msAPI_hdcpkeyWriteByte(WORD wIndex, BYTE ucVal);

/******************************************************************************/
/// Decode the Command gets from UART port for main chip.
/// Command Buffer [0]:
///  -bit7~bit5 :Command length:1 ~ 6
///  -bit4~bit0 :UART command
/// Command Buffer [1]:
///  -Control address high.
/// Command Buffer [2]:
///  -Control address low.
/// if write command:
///   -Command buffer [3]: control data
/******************************************************************************/
void MDrv_UART_DecodeNormalCommand(void)
{
    //printf("MDrv_UART_DecodeNormalCommand %x\n", (U16)UART_CMD );
    U8 u8Value;

    switch(UART_CMD)
    {
        case uartWrite_MST_Bank_n:
                XBYTE[((U8)UART_CMD_MS_BANK<<8) | (U8)UART_CMD_MS_REGINDEX] = UART_CMD_MS_REGDATA;
                putchar(0xF1);
                break;
        case uartRead_MST_Bank_n:
                putchar(0xF2);
                putchar(XBYTE[((U8)UART_CMD_MS_BANK<<8)|(U8)UART_CMD_MS_REGINDEX]);
                break;

        case uartRead_MCU_XDATA:
                putchar(0xF2);
                putchar(XBYTE[((U8)UART_CMD_MCU_IDX_H<<8)|(U8)UART_CMD_MCU_IDX_L]);
                break;

        case uartWrite_MCU_XDATA:
                XBYTE[((U8)UART_CMD_MCU_IDX_H<<8) | (U8)UART_CMD_MCU_IDX_L] = UART_CMD_MCU_DATA;
                putchar(0xF1);
                break;

        case uartI2C_Device_Write:
                MDrv_IIC_WriteByte( UART_CMD_MCU_IDX_H, UART_CMD_MCU_IDX_L, UART_CMD_MCU_DATA);
                putchar(0xF1);
                break;

        case uartI2C_Device_Read:
                putchar(0xF2);
                if( MDrv_IIC_ReadByte( UART_CMD_MCU_IDX_H, UART_CMD_MCU_IDX_L, &u8Value) )
                    putchar(u8Value);
                else
                    putchar(0xFF);
                break;
		case uartEEPROM_Write:
			{
                        extern void msAPI_rmWriteByte(WORD wIndex, BYTE ucVal);
                        msAPI_rmWriteByte(MAKEWORD(UART_CMD_MCU_IDX_H,UART_CMD_MCU_IDX_L), UART_CMD_MCU_DATA);
                        putchar(0xF1);
			}
          	break;

        case uartEEPROM_Read:
			{
                        extern BYTE msAPI_rmReadByte(WORD wIndex);
                        u8Value = 0xFF;
                        putchar(0xF2);
                        u8Value = msAPI_rmReadByte(MAKEWORD(UART_CMD_MCU_IDX_H,UART_CMD_MCU_IDX_L));
                        putchar(u8Value);
			}
            break;
        case uartTest_Command:

            MDrv_UART_ExecTestCommand();
            break;

        default:
               // printf("Unsupport Normal Command: 0x%x\n", (U16)UART_CMD );
                break;
    }

}

void MDrv_UART_ExecTestCommand(void)
{
    switch( g_UartCommand.Buffer[_UART_CMD_INDEX1_] )
    {
        case 0x50:
            g_bDebugProgStopFlag = !g_bDebugProgStopFlag;
            if( g_bDebugProgStopFlag )
            {
                printf("<Debug>\r\n");
            }
            else
            {
                printf("<Free>\r\n");
            }
            break;

        case 0x51:
            MApp_DebugInfo_GetCurModel();
            break;
        case 0x52:
            msAPI_Auto_Geometry( AUTO_TUNE_BASIC, &g_PcadcModeSetting, &stGenSetting.g_AdcSetting[ADC_SET_VGA]);
            break;

        case 0x53:
            GPIOWrite(2, 1);    // for China demo board ISP
            printf("Enter ISP");
            break;

        case 0x54:
            msAPI_DLC_Handler();
            break;
        case 0x55:
            msAPI_DLC_SetOnOff(1);
            break;
        case 0x56:
            msAPI_DLC_SetOnOff(0);
            break;

⌨️ 快捷键说明

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