📄 sv_addr_ag.h
字号:
/*!***************************************************************************! *! MACROS:*! IO_MASK(reg,field)*! IO_STATE(reg,field,state)*! IO_EXTRACT(reg,field,val)*! IO_STATE_VALUE(reg,field,state)*! IO_BITNR(reg,field)*! IO_WIDTH(reg,field)*! IO_FIELD(reg,field,val)*! IO_RD(reg)*! All moderegister addresses and fields of these.*!*!**************************************************************************/#ifndef __sv_addr_ag_h__#define __sv_addr_ag_h__#define __test_sv_addr__ 0/*------------------------------------------------------------!* General macros to manipulate moderegisters.!*-----------------------------------------------------------*//* IO_MASK returns a mask for a specified bitfield in a register. Note that this macro doesn't work when field width is 32 bits. */#define IO_MASK(reg, field) IO_MASK_ (reg##_, field##_)#define IO_MASK_(reg_, field_) \ ( ( ( 1 << reg_##_##field_##_WIDTH ) - 1 ) << reg_##_##field_##_BITNR )/* IO_STATE returns a constant corresponding to a one of the symbolic states that the bitfield can have. (Shifted to correct position) */#define IO_STATE(reg, field, state) IO_STATE_ (reg##_, field##_, _##state)#define IO_STATE_(reg_, field_, _state) \ ( reg_##_##field_##_state << reg_##_##field_##_BITNR )/* IO_EXTRACT returns the masked and shifted value corresponding to the bitfield can have. */#define IO_EXTRACT(reg, field, val) IO_EXTRACT_ (reg##_, field##_, val)#define IO_EXTRACT_(reg_, field_, val) ( (( ( ( 1 << reg_##_##field_##_WIDTH ) \ - 1 ) << reg_##_##field_##_BITNR ) & (val)) >> reg_##_##field_##_BITNR )/* IO_STATE_VALUE returns a constant corresponding to a one of the symbolic states that the bitfield can have. (Not shifted) */#define IO_STATE_VALUE(reg, field, state) \ IO_STATE_VALUE_ (reg##_, field##_, _##state)#define IO_STATE_VALUE_(reg_, field_, _state) ( reg_##_##field_##_state )/* IO_FIELD shifts the val parameter to be aligned with the bitfield specified. */#define IO_FIELD(reg, field, val) IO_FIELD_ (reg##_, field##_, val)#define IO_FIELD_(reg_, field_, val) ((val) << reg_##_##field_##_BITNR)/* IO_BITNR returns the starting bitnumber of a bitfield. Bit 0 is LSB and the returned bitnumber is LSB of the field. */#define IO_BITNR(reg, field) IO_BITNR_ (reg##_, field##_)#define IO_BITNR_(reg_, field_) (reg_##_##field_##_BITNR)/* IO_WIDTH returns the width, in bits, of a bitfield. */#define IO_WIDTH(reg, field) IO_WIDTH_ (reg##_, field##_)#define IO_WIDTH_(reg_, field_) (reg_##_##field_##_WIDTH)/*--- Obsolete. Kept for backw compatibility. ---*//* Reads (or writes) a byte/uword/udword from the specified mode register. */#define IO_RD(reg) (*(volatile u32*)(reg))#define IO_RD_B(reg) (*(volatile u8*)(reg))#define IO_RD_W(reg) (*(volatile u16*)(reg))#define IO_RD_D(reg) (*(volatile u32*)(reg))/*------------------------------------------------------------!* Start addresses of the different memory areas.!*-----------------------------------------------------------*/#define MEM_CSE0_START (0x00000000)#define MEM_CSE0_SIZE (0x04000000)#define MEM_CSE1_START (0x04000000)#define MEM_CSE1_SIZE (0x04000000)#define MEM_CSR0_START (0x08000000)#define MEM_CSR1_START (0x0c000000)#define MEM_CSP0_START (0x10000000)#define MEM_CSP1_START (0x14000000)#define MEM_CSP2_START (0x18000000)#define MEM_CSP3_START (0x1c000000)#define MEM_CSP4_START (0x20000000)#define MEM_CSP5_START (0x24000000)#define MEM_CSP6_START (0x28000000)#define MEM_CSP7_START (0x2c000000)#define MEM_DRAM_START (0x40000000)#define MEM_NON_CACHEABLE (0x80000000)/*------------------------------------------------------------!* Type casts used in mode register macros, making pointer!* dereferencing possible. Empty in assembler.!*-----------------------------------------------------------*/#ifndef __ASSEMBLER__# define IO_TYPECAST_UDWORD (volatile u32*)# define IO_TYPECAST_RO_UDWORD (const volatile u32*)# define IO_TYPECAST_UWORD (volatile u16*)# define IO_TYPECAST_RO_UWORD (const volatile u16*)# define IO_TYPECAST_BYTE (volatile u8*)# define IO_TYPECAST_RO_BYTE (const volatile u8*)#else# define IO_TYPECAST_UDWORD# define IO_TYPECAST_RO_UDWORD# define IO_TYPECAST_UWORD# define IO_TYPECAST_RO_UWORD# define IO_TYPECAST_BYTE# define IO_TYPECAST_RO_BYTE#endif/*------------------------------------------------------------*/#include "sv_addr.agh"#if __test_sv_addr__/* IO_MASK( R_BUS_CONFIG , CE ) */IO_MASK( R_WAITSTATES , SRAM_WS )IO_MASK( R_TEST , W32 )IO_STATE( R_BUS_CONFIG, CE, DISABLE )IO_STATE( R_BUS_CONFIG, CE, ENABLE )IO_STATE( R_DRAM_TIMING, REF, IVAL2 )IO_MASK( R_DRAM_TIMING, REF )IO_MASK( R_EXT_DMA_0_STAT, TFR_COUNT ) >> IO_BITNR( R_EXT_DMA_0_STAT, TFR_COUNT )IO_RD(R_EXT_DMA_0_STAT) & IO_MASK( R_EXT_DMA_0_STAT, S ) == IO_STATE( R_EXT_DMA_0_STAT, S, STARTED )#endif#endif /* ifndef __sv_addr_ag_h__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -