📄 drvsys.h
字号:
#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 + -