📄 hal_ebsa285.h
字号:
*/
#define SA110_UART_DISABLED 0x00000000
#define SA110_UART_ENABLED 0x00000001
#define SA110_UART_ENABLE_MASK 0x00000001
#define SA110_SIR_DISABLED 0x00000000
#define SA110_SIR_ENABLED 0x00000002
#define SA110_SIR_ENABLE_MASK 0x00000002
#define SA110_SIR_PULSE_WIDTH_BIT_RATE 0x00000000
#define SA110_SIR_PULSE_WIDTH_MAX_CLK 0x00000004
/*
* SA-110 UART Flag Register bit masks
*/
#define SA110_TX_IDLE 0x00000000
#define SA110_TX_BUSY 0x00000008
#define SA110_TX_BUSY_MASK 0x00000008
#define SA110_RX_FIFO_FULL 0x00000000
#define SA110_RX_FIFO_EMPTY 0x00000010
#define SA110_RX_FIFO_STATUS_MASK 0x00000010
#define SA110_TX_FIFO_READY 0x00000000
#define SA110_TX_FIFO_BUSY 0x00000020
#define SA110_TX_FIFO_STATUS_MASK 0x00000020
/*
* SA-110 IRQ Controller Registers
*/
#define SA110_IRQCONT_IRQSTATUS_o 0x180
#define SA110_IRQCONT_IRQRAWSTATUS_o 0x184
#define SA110_IRQCONT_IRQENABLE_o 0x188
#define SA110_IRQCONT_IRQENABLESET_o 0x188
#define SA110_IRQCONT_IRQENABLECLEAR_o 0x18C
#define SA110_IRQCONT_IRQSOFT_o 0x190
#define SA110_IRQCONT_FIQSTATUS_o 0x280
#define SA110_IRQCONT_FIQRAWSTATUS_o 0x284
#define SA110_IRQCONT_FIQENABLE_o 0x288
#define SA110_IRQCONT_FIQENABLESET_o 0x288
#define SA110_IRQCONT_FIQENABLECLEAR_o 0x28C
#define SA110_IRQCONT_FIQSOFT_o 0x290
#define SA110_IRQCONT_IRQSTATUS SA110_REGISTER(SA110_IRQCONT_IRQSTATUS_o)
#define SA110_IRQCONT_IRQRAWSTATUS SA110_REGISTER(SA110_IRQCONT_IRQRAWSTATUS_o)
#define SA110_IRQCONT_IRQENABLE SA110_REGISTER(SA110_IRQCONT_IRQENABLE_o)
#define SA110_IRQCONT_IRQENABLESET SA110_REGISTER(SA110_IRQCONT_IRQENABLESET_o)
#define SA110_IRQCONT_IRQENABLECLEAR SA110_REGISTER(SA110_IRQCONT_IRQENABLECLEAR_o)
#define SA110_IRQCONT_IRQSOFT SA110_REGISTER(SA110_IRQCONT_IRQSOFT_o)
#define SA110_IRQCONT_FIQSTATUS SA110_REGISTER(SA110_IRQCONT_FIQSTATUS_o)
#define SA110_IRQCONT_FIQRAWSTATUS SA110_REGISTER(SA110_IRQCONT_FIQRAWSTATUS_o)
#define SA110_IRQCONT_FIQENABLE SA110_REGISTER(SA110_IRQCONT_FIQENABLE_o)
#define SA110_IRQCONT_FIQENABLESET SA110_REGISTER(SA110_IRQCONT_FIQENABLESET_o)
#define SA110_IRQCONT_FIQENABLECLEAR SA110_REGISTER(SA110_IRQCONT_FIQENABLECLEAR_o)
#define SA110_IRQCONT_FIQSOFT SA110_REGISTER(SA110_IRQCONT_FIQSOFT_o)
/*
* SA-110 Timer Control Registers
*/
#define SA110_TIMER_BASE_o 0x300
#define SA110_TIMER1_BASE_o (SA110_TIMER_BASE_o + 0x00)
#define SA110_TIMER2_BASE_o (SA110_TIMER_BASE_o + 0x20)
#define SA110_TIMER3_BASE_o (SA110_TIMER_BASE_o + 0x40)
#define SA110_TIMER4_BASE_o (SA110_TIMER_BASE_o + 0x60)
#define SA110_TIMER1_LOAD_o (SA110_TIMER1_BASE_o + 0x0)
#define SA110_TIMER1_VALUE_o (SA110_TIMER1_BASE_o + 0x4)
#define SA110_TIMER1_CONTROL_o (SA110_TIMER1_BASE_o + 0x8)
#define SA110_TIMER1_CLEAR_o (SA110_TIMER1_BASE_o + 0xc)
#define SA110_TIMER2_LOAD_o (SA110_TIMER2_BASE_o + 0x0)
#define SA110_TIMER2_VALUE_o (SA110_TIMER2_BASE_o + 0x4)
#define SA110_TIMER2_CONTROL_o (SA110_TIMER2_BASE_o + 0x8)
#define SA110_TIMER2_CLEAR_o (SA110_TIMER2_BASE_o + 0xc)
#define SA110_TIMER3_LOAD_o (SA110_TIMER3_BASE_o + 0x0)
#define SA110_TIMER3_VALUE_o (SA110_TIMER3_BASE_o + 0x4)
#define SA110_TIMER3_CONTROL_o (SA110_TIMER3_BASE_o + 0x8)
#define SA110_TIMER3_CLEAR_o (SA110_TIMER3_BASE_o + 0xc)
#define SA110_TIMER4_LOAD_o (SA110_TIMER4_BASE_o + 0x0)
#define SA110_TIMER4_VALUE_o (SA110_TIMER4_BASE_o + 0x4)
#define SA110_TIMER4_CONTROL_o (SA110_TIMER4_BASE_o + 0x8)
#define SA110_TIMER4_CLEAR_o (SA110_TIMER4_BASE_o + 0xc)
#define SA110_TIMER1_LOAD SA110_REGISTER(SA110_TIMER1_LOAD_o)
#define SA110_TIMER1_VALUE SA110_REGISTER(SA110_TIMER1_VALUE_o)
#define SA110_TIMER1_CONTROL SA110_REGISTER(SA110_TIMER1_CONTROL_o)
#define SA110_TIMER1_CLEAR SA110_REGISTER(SA110_TIMER1_CLEAR_o)
#define SA110_TIMER2_LOAD SA110_REGISTER(SA110_TIMER2_LOAD_o)
#define SA110_TIMER2_VALUE SA110_REGISTER(SA110_TIMER2_VALUE_o)
#define SA110_TIMER2_CONTROL SA110_REGISTER(SA110_TIMER2_CONTROL_o)
#define SA110_TIMER2_CLEAR SA110_REGISTER(SA110_TIMER2_CLEAR_o)
#define SA110_TIMER3_LOAD SA110_REGISTER(SA110_TIMER3_LOAD_o)
#define SA110_TIMER3_VALUE SA110_REGISTER(SA110_TIMER3_VALUE_o)
#define SA110_TIMER3_CONTROL SA110_REGISTER(SA110_TIMER3_CONTROL_o)
#define SA110_TIMER3_CLEAR SA110_REGISTER(SA110_TIMER3_CLEAR_o)
#define SA110_TIMER4_LOAD SA110_REGISTER(SA110_TIMER4_LOAD_o)
#define SA110_TIMER4_VALUE SA110_REGISTER(SA110_TIMER4_VALUE_o)
#define SA110_TIMER4_CONTROL SA110_REGISTER(SA110_TIMER4_CONTROL_o)
#define SA110_TIMER4_CLEAR SA110_REGISTER(SA110_TIMER4_CLEAR_o)
/* Timer bits */
#define SA110_TIMER_CONTROL_SCALE_1 0x00000000
#define SA110_TIMER_CONTROL_SCALE_16 0x00000004
#define SA110_TIMER_CONTROL_SCALE_256 0x00000008
#define SA110_TIMER_CONTROL_SCALE_EXT 0x0000000c
#define SA110_TIMER_CONTROL_MODE 0x00000040
#define SA110_TIMER_CONTROL_ENABLE 0x00000080
/*
* IRQ Controller IRQ Numbers
*/
#define SA110_IRQ_MIN 0
#define SA110_IRQ_RSV0 0
#define SA110_IRQ_SOFT_INTERRUPT 1
#define SA110_IRQ_CONSOLE_RX 2
#define SA110_IRQ_CONSOLE_TX 3
#define SA110_IRQ_TIMER_1 4
#define SA110_IRQ_TIMER_2 5
#define SA110_IRQ_TIMER_3 6
#define SA110_IRQ_TIMER_4 7
#define SA110_IRQ_IRQ_IN_I_0 8
#define SA110_IRQ_IRQ_IN_I_1 9
#define SA110_IRQ_IRQ_IN_I_2 10
#define SA110_IRQ_IRQ_IN_I_3 11
#define SA110_IRQ_XCS_I_0 12
#define SA110_IRQ_XCS_I_1 13
#define SA110_IRQ_XCS_I_2 14
#define SA110_IRQ_DOORBELL_FROM_HOST 15
#define SA110_IRQ_DMA_CHAN_1 16
#define SA110_IRQ_DMA_CHAN_2 17
#define SA110_IRQ_PIC_IRQ_I 18
#define SA110_IRQ_PMCSR_WRITE_BY_HOST 19
#define SA110_IRQ_RSV1 20
#define SA110_IRQ_RSV2 21
#define SA110_IRQ_START_BIST 22
#define SA110_IRQ_RECEIVED_SERR 23
#define SA110_IRQ_SDRAM_PARITY 24
#define SA110_IRQ_I20_INBOUND_POST_LIST 25
#define SA110_IRQ_RSV3 26
#define SA110_IRQ_DISCARD_TIMER_EXPIRED 27
#define SA110_IRQ_DATA_PARITY_ERROR 28
#define SA110_IRQ_MASTER_ABORT 29
#define SA110_IRQ_TARGET_ABORT 30
#define SA110_IRQ_PARITY_ERROR 31
#define SA110_IRQ_MAX 31
#define NUM_SA110_INTERRUPTS SA110_IRQ_MAX - SA110_IRQ_MIN + 1
#define SA110_IRQ_INTSRC_MASK(irq_nr) (1 << (irq_nr))
/*
* SA110 IRQSOFT/FIQSOFT Register bit fields
*/
#define SA110_IRQSOFT_RAW_BIT_MASK 0x00000001
/*
* SA-110 Miscellaneous Registers.
*/
#define SA110_XBUS_CYCLE_ARBITER_o 0x148
#define SA110_XBUS_IO_STROBE_MASK_o 0x14c
#define SA110_XBUS_CYCLE_ARBITER SA110_REGISTER(SA110_XBUS_CYCLE_ARBITER_o)
#define SA110_XBUS_IO_STROBE_MASK SA110_REGISTER(SA110_XBUS_IO_STROBE_MASK_o)
#define SA110_XBUS_CYCLE_ARBITER_ENABLED 0x00800000
#define SA110_XBUS_XCS2 0x40012000
#define SA110_XBUS_XCS2_PCI_DISABLE 0x40
// -------------------------------------------------------------------------
// MMU initialization:
//
// These structures are laid down in memory to define the translation
// table. For usage, see the memory setup in ebsa285_misc.c in this
// component. hal_bsp_mmu_init()
//
/*
* SA-1100 Translation Table Base Bit Masks */
#define ARM_TRANSLATION_TABLE_MASK 0xFFFFC000
/*
* SA-1100 Domain Access Control Bit Masks
*/
#define ARM_ACCESS_TYPE_NO_ACCESS(domain_num) (0x0 << (domain_num)*2)
#define ARM_ACCESS_TYPE_CLIENT(domain_num) (0x1 << (domain_num)*2)
#define ARM_ACCESS_TYPE_MANAGER(domain_num) (0x3 << (domain_num)*2)
// These are only useful in C, so:
#ifndef __ASSEMBLER__
struct ARM_MMU_FIRST_LEVEL_FAULT {
int id : 2;
int sbz : 30;
};
#define ARM_MMU_FIRST_LEVEL_FAULT_ID 0x0
struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE {
int id : 2;
int imp : 2;
int domain : 4;
int sbz : 1;
int base_address : 23;
};
#define ARM_MMU_FIRST_LEVEL_PAGE_TABLE_ID 0x1
struct ARM_MMU_FIRST_LEVEL_SECTION {
int id : 2;
int b : 1;
int c : 1;
int imp : 1;
int domain : 4;
int sbz0 : 1;
int ap : 2;
int sbz1 : 8;
int base_address : 12;
};
#define ARM_MMU_FIRST_LEVEL_SECTION_ID 0x2
struct ARM_MMU_FIRST_LEVEL_RESERVED {
int id : 2;
int sbz : 30;
};
#define ARM_MMU_FIRST_LEVEL_RESERVED_ID 0x3
#define ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, table_index) \
(unsigned long *)((unsigned long)(ttb_base) + ((table_index) << 2))
#define ARM_MMU_SECTION(ttb_base, actual_base, virtual_base, \
cacheable, bufferable, perm) \
CYG_MACRO_START \
register union ARM_MMU_FIRST_LEVEL_DESCRIPTOR desc; \
\
desc.word = 0; \
desc.section.id = ARM_MMU_FIRST_LEVEL_SECTION_ID; \
desc.section.domain = 0; \
desc.section.c = (cacheable); \
desc.section.b = (bufferable); \
desc.section.ap = (perm); \
desc.section.base_address = (actual_base); \
*ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, (virtual_base)) \
= desc.word; \
CYG_MACRO_END
union ARM_MMU_FIRST_LEVEL_DESCRIPTOR {
unsigned long word;
struct ARM_MMU_FIRST_LEVEL_FAULT fault;
struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE page_table;
struct ARM_MMU_FIRST_LEVEL_SECTION section;
struct ARM_MMU_FIRST_LEVEL_RESERVED reserved;
};
#endif /* __ASSEMBLER__ */
#define ARM_UNCACHEABLE 0
#define ARM_CACHEABLE 1
#define ARM_UNBUFFERABLE 0
#define ARM_BUFFERABLE 1
#define ARM_ACCESS_PERM_NONE_NONE 0
#define ARM_ACCESS_PERM_RO_NONE 0
#define ARM_ACCESS_PERM_RO_RO 0
#define ARM_ACCESS_PERM_RW_NONE 1
#define ARM_ACCESS_PERM_RW_RO 2
#define ARM_ACCESS_PERM_RW_RW 3
/*---------------------------------------------------------------------------*/
/* end of hal_ebsa285.h */
#endif /* CYGONCE_HAL_EBSA285_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -