📄 uart.h
字号:
/******************************************************************************
Copyright (c) 2003 MStar Semiconductor, Inc.
All rights reserved.
[Module Name]: Uart.h
[Date]: 04-Nov-2003
[Comment]:
Uart header file.
[Reversion History]:
*******************************************************************************/
#include "define.h"
#include "mcu.h"
#include "debug.h"
#ifndef _UART_H_
#define _UART_H_
#ifdef _UART_C_
#define _UARTDEC_
#else
#define _UARTDEC_ extern
#endif
/////////////////////////////////////////////
// Uart Protocol Command Definition
/////////////////////////////////////////////
#define kWrite_MST_Bank0 0x1E
#define kRead_MST_Bank0 0x1F
#define kWrite_MST_Bank1 0x1C
#define kRead_MST_Bank1 0x1D
#define kWrite_MST_Bank2 0x18
#define kRead_MST_Bank2 0x19
#define kWrite_MST_Bank3 0x16
#define kRead_MST_Bank3 0x17
#define kWrite_MST_Bank4 0x14
#define kRead_MST_Bank4 0x15
#define kWrite_MST_Bank5 0x0E
#define kRead_MST_Bank5 0x0D
#define kWrite_MST_Bank6 0x06
#define kRead_MST_Bank6 0x05
#define kWrite_MST_Bank7 0x04
#define kRead_MST_Bank7 0x03
#define kWrite_MST_OSD 0x1A
#define kRead_MST_OSD 0x1B
#define kWrite_EEPROM 0x12
#define kRead_EEPROM 0x13
#define kWrite_Device 0x10
#define kRead_Device_B8 0x11
#define kRead_Device_B16 0x0F
#define kWrite_VPC32xx_FP 0x0B
#define kRead_VPC32xx_FP 0x0C
#define kWrite_MCU 0x07
#define kRead_MCU 0x08
#define kEnter_ISP 0x00
// Test
#define kTest_Command 0x09
#define DEV_MICRONAS_AUDIO 0x01
#define DEV_PHLIPS_TUNER 0x02
#define DEV_EEPROM_HDCP 0x03
#define URCMD_MICRONAS_AUDIO_WRITE 0
#define URCMD_MICRONAS_AUDIO_READ 1
#define URCMD_PHLIPS_TUNER_SET_FREQ 0
#define URCMD_PHLIPS_TUNER_GET_STATUS 1
#define URCMD_EEPROM_HDCP_GET_ADDR 0
#define URCMD_EEPROM_HDCP_WRITE 1
#define URCMD_EEPROM_HDCP_WRITE_END 2
#define URCMD_EEPROM_HDCP_GET_CHECKSUM 3
/////////////////////////////////////////////
// Uart Constant
/////////////////////////////////////////////
// [Timer1 Baud Rate] = (1 / 32) * {Fosc / [12 * (256 - [TH1])]}
// [TH1] = 256 - (Fosc / ([Timer1 Baud Rate] * 32 * 12)
#define UART_BAUD_RATE 9600
#define _SMOD 1
// (TIMER1_MODE2_DIVIDER / 2) -> decimal fraction
#define TIMER1_MODE2_DIVIDER ((DWORD)UART_BAUD_RATE * 384)
#define TIMER1_MODE2_TH1 256-((DWORD)MCU_XTAL_CLK_HZ*_SMOD+MCU_XTAL_CLK_HZ+(TIMER1_MODE2_DIVIDER/2))/TIMER1_MODE2_DIVIDER
#define UART_CMD_LENGTH (g_UartCommand.Buffer[_UART_CMD_CODE_] >> 5)
#define UART_CMD (g_UartCommand.Buffer[_UART_CMD_CODE_] & 0x1F)
#define UART_CMD_MS_REG (g_UartCommand.Buffer[_UART_CMD_INDEX1_])
#define UART_CMD_MS_DAT (g_UartCommand.Buffer[_UART_CMD_INDEX2_])
#define UART_EXT (UART_CMD_LENGTH == 7)
#define UART_CMD_EXT_LENGTH (g_UartCommand.Buffer[_UART_CMD_INDEX1_])
#define UART_EXT_DEV (g_UartCommand.Buffer[_UART_CMD_INDEX2_])
#define UART_EXT_CMD (g_UartCommand.Buffer[_UART_CMD_INDEX3_])
#define UART_EXT_CMD_MS_DAT1 (g_UartCommand.Buffer[_UART_CMD_INDEX4_])
#define UART_EXT_CMD_MS_DAT2 (g_UartCommand.Buffer[_UART_CMD_INDEX5_])
#define UART_EXT_CMD_MS_DAT3 (g_UartCommand.Buffer[_UART_CMD_INDEX6_])
#define UART_EXT_CMD_MS_DAT4 (g_UartCommand.Buffer[_UART_CMD_INDEX7_])
#define UART_EXT_CMD_MS_DAT5 (g_UartCommand.Buffer[_UART_CMD_INDEX8_])
#define UART_EXT_CMD_MS_DAT6 (g_UartCommand.Buffer[_UART_CMD_INDEX9_])
#define UART_EXT_CMD_MS_DAT7 (g_UartCommand.Buffer[_UART_CMD_INDEX10_])
#define UART_EXT_CMD_MS_DAT8 (g_UartCommand.Buffer[_UART_CMD_INDEX11_])
#define UART_EXT_CMD_MS_DAT9 (g_UartCommand.Buffer[_UART_CMD_INDEX12_])
#define UART_EXT_CMD_MS_DAT10 (g_UartCommand.Buffer[_UART_CMD_INDEX13_])
#define UART_EXT_CMD_MS_DAT11 (g_UartCommand.Buffer[_UART_CMD_INDEX14_])
#define UART_EXT_CMD_MS_DAT12 (g_UartCommand.Buffer[_UART_CMD_INDEX15_])
#define UART_EXT_CMD_MS_DAT13 (g_UartCommand.Buffer[_UART_CMD_INDEX16_])
#define _EOS_ '\0' // end of string
/////////////////////////////////////////////
// Uart command structure
/////////////////////////////////////////////
typedef enum _UartCommadEnumType
{
_UART_CMD_CODE_,
_UART_CMD_INDEX1_,
_UART_CMD_INDEX2_,
_UART_CMD_INDEX3_,
_UART_CMD_INDEX4_,
_UART_CMD_INDEX5_,
_UART_CMD_INDEX6_,
_UART_CMD_INDEX7_,
_UART_CMD_INDEX8_,
_UART_CMD_INDEX9_,
_UART_CMD_INDEX10_,
_UART_CMD_INDEX11_,
_UART_CMD_INDEX12_,
_UART_CMD_INDEX13_,
_UART_CMD_INDEX14_,
_UART_CMD_INDEX15_,
_UART_CMD_INDEX16_,
_UART_CMD_LENGTH_
}UartCommadEnumType;
typedef struct _UartCommadType
{
BYTE Buffer[_UART_CMD_LENGTH_]; // command buffer
// [Length+Command] - [Byte 2] - [Byte 3] - [Byte 4] - [Byte 5]
BYTE Index; // buffer index
}UartCommadType;
typedef enum
{
MCU_P0,
MCU_P1,
MCU_P2,
MCU_P3,
MCU_P4,
MCU_TCON,
MCU_TMOD,
MCU_PCON,
MCU_IE,
MCU_IP,
MCU_SCON
} MCU_Reg;
/////////////////////////////////////////////
// Uart Variables
/////////////////////////////////////////////
_UARTDEC_ bit g_bUartDetected; // decode command flag
_UARTDEC_ bit g_bUartOutput; // output hexidecimal data flag
_UARTDEC_ bit g_bDebugASCIICommandFlag;
_UARTDEC_ bit g_bDebugProgStopFlag;
_UARTDEC_ XDATA UartCommadType g_UartCommand; // Uart command struct
/////////////////////////////////////////////
// Uart subroutines
/////////////////////////////////////////////
#if 0
#if (_DEBUG_PRINT_EN_)
#define puthex(ucVal) printf("%x", ucVal)
_UARTDEC_ void putstr(BYTE code *pFmt);
_UARTDEC_ void printf(BYTE code *pFmt, WORD wVal);
#else
#define puthex(ucVal)
#define putstr(pFmt)
#define printf(pFmt, wVal)
#endif
#else
void putstr(BYTE code *pFmt);
void printf(BYTE code *pFmt, WORD wVal);
#define puthex(ucVal) printf("%x", ucVal)
#endif
#if (_DEBUG_PRINT_EN_||_DEBUG_RW_REG_EN_)
_UARTDEC_ void putchar(BYTE ucVal);
#else
#define putchar(ucVal)
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -