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