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

📄 drvsys.h

📁 mstar 776 开发的车载dvd
💻 H
📖 第 1 页 / 共 2 页
字号:
#define _SetInt_EX1_SCM( bEnable )          _SetInt_EX1_BIT( 27, bEnable )
#define _SetInt_EX1_VBI( bEnable )          _SetInt_EX1_BIT( 28, bEnable )
#define _SetInt_EX1_M4V( bEnable )          _SetInt_EX1_BIT( 29, bEnable )
#define _SetInt_EX1_FCIE2RIU( bEnable )     _SetInt_EX1_BIT( 30, bEnable )
#define _SetInt_EX1_ADCDVI2RIU( bEnable )   _SetInt_EX1_BIT( 31, bEnable )

#define MDrv_Sys_SetInterrupt( IntSrc, bEnable )    _SetInt_##IntSrc( bEnable )
#define MDrv_Sys_GetInterrupt( IntSrc )             _GetInt_##IntSrc()

////////////////////////////////////////////////////////////////////////////////
// 8051 Timer functions
////////////////////////////////////////////////////////////////////////////////

// Enable timer
#define TIMER_RUN                           1
#define TIMER_STOP                          0

#define _SetTimer0_TIMER_MODE( mode )       (TMOD = (TMOD & 0xF8) | (mode))
#define _SetTimer0_COUNTER_MODE( mode )     (TMOD = (TMOD & 0xF8) | 0x04 | (mode))
#define _SetTimer0_CNT_REG( value )         do { TL0 = LOWBYTE( value ); TH0 = HIGHBYTE( value ); } while (0)
#define _SetTimer0_STATE( state )           (TR0 = (state))

#define _SetTimer1_TIMER_MODE( mode )       (TMOD = (TMOD & 0x8F) | ((mode) << 4))
#define _SetTimer1_COUNTER_MODE( mode )     (TMOD = (TMOD & 0x8F) | 0x40 | ((mode) << 4))
#define _SetTimer1_CNT_REG( value )         do { TL1 = LOWBYTE( value ); TH1 = HIGHBYTE( value ); } while (0)
#define _SetTimer1_STATE( state )           (TR1 = (state))

// mode for timer2
#define TIMER2_CLOCKED_WITH_DIV12           0x00
#define TIMER2_CLOCKED_WITH_DIV24           0x80

#define TIMER2_RELOAD_DISABLED              0x00
#define TIMER2_RELOAD_MODE0                 0x10
#define TIMER2_RELOAD_MODE1                 0x18

#define _SetTimer2_TIMER_MODE( mode )       (T2CON = (mode) | 0x01)
#define _SetTimer2_CNT_REG( value )         do { TL2 = LOWBYTE( value ); TH2 = HIGHBYTE( value ); } while (0)
#define _SetTimer2_CRC_REG( value )         do { CRCL = LOWBYTE( value ); CRCH = HIGHBYTE( value ); } while (0)
#define _SetTimer2_STATE( state )           if ( !(state) ) (T2CON = 0)

#define MDrv_Sys_SetTimer( n, func, mode )  _SetTimer##n##_##func( mode )

////////////////////////////////////////////////////////////////////////////////
// prototype for putcharUARTn
////////////////////////////////////////////////////////////////////////////////

#if ( ENABLE_UART0 )
    #if ( STDOUT_DEVICE == IO_DEV_UART0 )
        #define putcharUART0( c ) putchar( c )
    #else
        extern char putcharUART0( char c );
    #endif
#else
    #define putcharUART0( c ) do {} while ( 0 )
#endif

#if ( ENABLE_UART1 )
    #if ( STDOUT_DEVICE == IO_DEV_UART1 )
        #define putcharUART1( c ) putchar( c )
    #else
        extern char putcharUART1( char c );
    #endif
#else
    #define putcharUART1( c ) do {} while ( 0 )
#endif

extern void puthex( U16 u16HexVal );

////////////////////////////////////////////////////////////////////////////////
// PIU Watch Dog Timer
////////////////////////////////////////////////////////////////////////////////

#if ( WATCH_DOG == ENABLE )

// Disable watchdog is not suggested at any time, please ask related people first
#define MDrv_Sys_DisableWatchDog()  __ASSERT(0)

#else

#define MDrv_Sys_DisableWatchDog()                                      \
    do {                                                                \
        XBYTE[MCU_WDT_KEY_L] = 0x55;                                    \
        XBYTE[MCU_WDT_KEY_H] = 0xAA;                                    \
    } while (0)

#endif

// This is not really necessary, WDT is enabled after MCU reset
#define MDrv_Sys_EnableWatchDog()                                       \
    do {                                                                \
        XBYTE[MCU_WDT_KEY_L] = 0;                                       \
        XBYTE[MCU_WDT_KEY_H] = 0;                                       \
    } while (0)

#define MDrv_Sys_ClearWatchDog()    ( XBYTE[WDT_RST] = 0x02 )

// Use 0xFFFF instead of 0x10000 to allow sec=0 and approximate ceil()
#define MDrv_Sys_WatchDogCycles( sec ) ( 0xFFFF - (((sec) * MST_XTAL_CLOCK_HZ) >> 16) )

// Internal counter will be updated to new value after set
// To reduce the chance of failure, please don't use variable
#define MDrv_Sys_SetWatchDogTimer( sec )                                \
    do {                                                                \
        __ASSERT( (sec) >= 0 );                                         \
        __ASSERT( (sec) <= (0xFFFF0000 / MST_XTAL_CLOCK_HZ) );          \
        XBYTE[WDT_TIMER_0] = LOBYTE( MDrv_Sys_WatchDogCycles( sec ) );  \
        XBYTE[WDT_TIMER_1] = HIBYTE( MDrv_Sys_WatchDogCycles( sec ) );  \
    } while (0)

////////////////////////////////////////////////////////////////////////////////
extern U32 u32XDataAddr;
extern U32 u32XDataSize;
extern U32 u32CodeAddr;
extern U32 u32CodeSize;
extern U32 u32SecbufAddr;
extern U32 u32SecbufSize;
extern U32 u32MvdBsAddr;
extern U32 u32MvdBsSize;
extern U32 u32MvdFbAddr;
extern U32 u32MvdFbSize;

extern U8 u8ChipVer;
extern U8 u8ChipRev;

#ifdef _DRV_SYS_C_
    #define DRVSYS_EX
#else
    #define DRVSYS_EX extern
#endif

DRVSYS_EX void MDrv_Sys_InitUartForXtalClk( char cOutputChar ) small;
DRVSYS_EX void MDrv_Sys_Devices_Init( void );
DRVSYS_EX bit  MDrv_Sys_IsCodeInSPI( void );
DRVSYS_EX void MDrv_Sys_RunCodeInMIU( U16 u16MIUAddrInBank, U8 u8NumBanks, BOOLEAN bBypassCache );
DRVSYS_EX void MDrv_Sys_RunCodeInSPI( void );

DRVSYS_EX void MDrv_Sys_WatchDogEnable(void);
DRVSYS_EX void MDrv_Sys_WatchDogDisable(void);


DRVSYS_EX void MDrv_Sys_ResetWatchDog(void);
DRVSYS_EX void MDrv_Sys_Set_ECC_DMA(U8 mode);
DRVSYS_EX void MDrv_Sys_Reboot( void );
DRVSYS_EX void MDrv_Sys_ResetAeon( BOOLEAN bReset );
DRVSYS_EX U16  MDrv_Sys_SetXdataWindow1Base(U16 u16XDWin1BaseIn4Kbytes);
DRVSYS_EX U16  MDrv_Sys_GetXdataWindow1Base(void);

DRVSYS_EX void MDrv_Sys_CopyMIU2VAR( U32 u32MiuAddr, U8 * pAddr, U16 u16Length );
DRVSYS_EX void MDrv_Sys_CopyVAR2MIU( U8 * pAddr, U32 u32MiuAddr, U16 u16Length );

DRVSYS_EX void MDrv_Sys_UartControl(BOOLEAN bEnable);


#undef DRVSYS_EX

#endif // _DRVSYS_H_

⌨️ 快捷键说明

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