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

📄 leon.h

📁 这是leon3处理器的交叉编译链
💻 H
字号:
#ifndef _INCLUDE_LEON_h#define _INCLUDE_LEON_h#include <asm-leon/leon3.h>#include <asm-leon/amba.h> #ifdef __cplusplusextern "C" {#endif/* psr defines */#define SPARC_PSR_WIN_MASK  0x0000001f   /* bit   0-4 */#define SPARC_PSR_ET_MASK   0x00000020   /* bit   5 */#define SPARC_PSR_PS_MASK   0x00000040   /* bit   6 */#define SPARC_PSR_S_MASK    0x00000080   /* bit   7 */#define SPARC_PSR_PIL_MASK  0x00000F00   /* bits  8 - 11 */#define SPARC_PSR_EF_MASK   0x00001000   /* bit  12 */#define SPARC_PSR_EC_MASK   0x00002000   /* bit  13 */#define SPARC_PSR_ICC_MASK  0x00F00000   /* bits 20 - 23 */#define SPARC_PSR_VER_MASK  0x0F000000   /* bits 24 - 27 */#define SPARC_PSR_IMPL_MASK 0xF0000000   /* bits 28 - 31 */#define SPARC_PSR_PIL_SHIFT 8  #define SPARC_NUM_REGWIN    _nwindows#ifndef __ASSEMBLER__extern int _nwindows;#endif  /* *  Interrupt Sources * *  The interrupt source numbers directly map to the trap type and to  *  the bits used in the Interrupt Clear, Interrupt Force, Interrupt Mask, *  and the Interrupt Pending Registers. */#define LEON_INTERRUPT_CORRECTABLE_MEMORY_ERROR  1#define LEON2_INTERRUPT_UART_2_RX_TX             2#define LEON2_INTERRUPT_UART_1_RX_TX             3#define LEON23_INTERRUPT_UART_2_RX_TX            leon23_irqs[1] /*console.c*/#define LEON23_INTERRUPT_UART_1_RX_TX            leon23_irqs[0] /*console.c*/#define LEON_INTERRUPT_EXTERNAL_0                4#define LEON_INTERRUPT_EXTERNAL_1                5#define LEON_INTERRUPT_EXTERNAL_2                6#define LEON_INTERRUPT_EXTERNAL_3                7#define LEON2_INTERRUPT_TIMER1                   8#define LEON2_INTERRUPT_TIMER2                   9#define LEON23_INTERRUPT_TIMER1                  leon23_timerirqs[0] /* timer.c */#define LEON23_INTERRUPT_TIMER2                  leon23_timerirqs[1] /* timer.c */#define LEON_INTERRUPT_EMPTY1                    10#define LEON_INTERRUPT_EMPTY2                    11#define LEON_INTERRUPT_EMPTY3                    12#define LEON_INTERRUPT_EMPTY4                    13#define LEON_INTERRUPT_EMPTY5                    14#define LEON_INTERRUPT_EMPTY6                    15#ifndef  __ASSEMBLER__/* *  Trap Types for on-chip peripherals * *  Source: Table 8 - Interrupt Trap Type and Default Priority Assignments * *  NOTE: The priority level for each source corresponds to the least  *        significant nibble of the trap type. */#define LEON_TRAP_TYPE( _source ) SPARC_ASYNCHRONOUS_TRAP((_source) + 0x10)#define LEON_TRAP_SOURCE( _trap ) ((_trap) - 0x10)#define LEON_INT_TRAP( _trap ) \  ( (_trap) >= LEON_TRAP_TYPE( LEON_INTERRUPT_CORRECTABLE_MEMORY_ERROR ) && \    (_trap) <= LEON_TRAP_TYPE( LEON_INTERRUPT_EMPTY6 ) )/* *  Structure for LEON memory mapped registers.   * *  Source: Section 6.1 - On-chip registers * *  NOTE:  There is only one of these structures per CPU, its base address  *         is 0x80000000, and the variable LEON_REG is placed there by the  *         linkcmds file. */typedef struct {	volatile unsigned int Memory_Config_1;	volatile unsigned int Memory_Config_2;	volatile unsigned int Edac_Control;	volatile unsigned int Failed_Address;	volatile unsigned int Memory_Status;	volatile unsigned int Cache_Control;	volatile unsigned int Power_Down;	volatile unsigned int Write_Protection_1;	volatile unsigned int Write_Protection_2;	volatile unsigned int Leon_Configuration;	volatile unsigned int dummy2;	volatile unsigned int dummy3;	volatile unsigned int dummy4;		volatile unsigned int dummy5;	volatile unsigned int dummy6;	volatile unsigned int dummy7;	volatile unsigned int Timer_Counter_1;	volatile unsigned int Timer_Reload_1;	volatile unsigned int Timer_Control_1;	volatile unsigned int Watchdog;	volatile unsigned int Timer_Counter_2;	volatile unsigned int Timer_Reload_2;	volatile unsigned int Timer_Control_2;	volatile unsigned int dummy8;	volatile unsigned int Scaler_Counter;	volatile unsigned int Scaler_Reload;	volatile unsigned int dummy9;	volatile unsigned int dummy10;	volatile unsigned int UART_Channel_1;	volatile unsigned int UART_Status_1;	volatile unsigned int UART_Control_1;	volatile unsigned int UART_Scaler_1;	volatile unsigned int UART_Channel_2;	volatile unsigned int UART_Status_2;	volatile unsigned int UART_Control_2;	volatile unsigned int UART_Scaler_2;	volatile unsigned int Interrupt_Mask;	volatile unsigned int Interrupt_Pending;	volatile unsigned int Interrupt_Force;	volatile unsigned int Interrupt_Clear;	volatile unsigned int PIO_Data;	volatile unsigned int PIO_Direction;	volatile unsigned int PIO_Interrupt;} LEON_Register_Map;#endif/* *  The following constants are intended to be used ONLY in assembly *  language files. * *  NOTE:  The intended style of usage is to load the address of LEON REGS *         into a register and then use these as displacements from *         that register. */#ifdef  __ASSEMBLER__#define  LEON_REG_MEMCFG1_OFFSET                                  0x00#define  LEON_REG_MEMCFG2_OFFSET                                  0x04#define  LEON_REG_EDACCTRL_OFFSET                                 0x08#define  LEON_REG_FAILADDR_OFFSET                                 0x0C#define  LEON_REG_MEMSTATUS_OFFSET                                0x10#define  LEON_REG_CACHECTRL_OFFSET                                0x14#define  LEON_REG_POWERDOWN_OFFSET                                0x18#define  LEON_REG_WRITEPROT1_OFFSET                               0x1C#define  LEON_REG_WRITEPROT2_OFFSET                               0x20#define  LEON_REG_LEONCONF_OFFSET                                 0x24#define  LEON_REG_UNIMPLEMENTED_2_OFFSET                          0x28#define  LEON_REG_UNIMPLEMENTED_3_OFFSET                          0x2C#define  LEON_REG_UNIMPLEMENTED_4_OFFSET                          0x30#define  LEON_REG_UNIMPLEMENTED_5_OFFSET                          0x34#define  LEON_REG_UNIMPLEMENTED_6_OFFSET                          0x38#define  LEON_REG_UNIMPLEMENTED_7_OFFSET                          0x3C#define  LEON_REG_TIMERCNT1_OFFSET                                0x40#define  LEON_REG_TIMERLOAD1_OFFSET                               0x44#define  LEON_REG_TIMERCTRL1_OFFSET                               0x48#define  LEON_REG_WDOG_OFFSET                                     0x4C#define  LEON_REG_TIMERCNT2_OFFSET                                0x50#define  LEON_REG_TIMERLOAD2_OFFSET                               0x54#define  LEON_REG_TIMERCTRL2_OFFSET                               0x58#define  LEON_REG_UNIMPLEMENTED_8_OFFSET                          0x5C#define  LEON_REG_SCALERCNT_OFFSET                                0x60#define  LEON_REG_SCALER_LOAD_OFFSET                              0x64#define  LEON_REG_UNIMPLEMENTED_9_OFFSET                          0x68#define  LEON_REG_UNIMPLEMENTED_10_OFFSET                         0x6C#define  LEON_REG_UARTDATA1_OFFSET                                0x70#define  LEON_REG_UARTSTATUS1_OFFSET                              0x74#define  LEON_REG_UARTCTRL1_OFFSET                                0x78#define  LEON_REG_UARTSCALER1_OFFSET                              0x7C#define  LEON_REG_UARTDATA2_OFFSET                                0x80#define  LEON_REG_UARTSTATUS2_OFFSET                              0x84#define  LEON_REG_UARTCTRL2_OFFSET                                0x88#define  LEON_REG_UARTSCALER2_OFFSET                              0x8C#define  LEON_REG_IRQMASK_OFFSET                                  0x90#define  LEON_REG_IRQPEND_OFFSET                                  0x94#define  LEON_REG_IRQFORCE_OFFSET                                 0x98#define  LEON_REG_IRQCLEAR_OFFSET                                 0x9C#define  LEON_REG_PIODATA_OFFSET                                  0xA0#define  LEON_REG_PIODIR_OFFSET                                   0xA4#define  LEON_REG_PIOIRQ_OFFSET                                   0xA8#define  LEON_REG_SIM_RAM_SIZE_OFFSET                             0xF4#define  LEON_REG_SIM_ROM_SIZE_OFFSET                             0xF8#endif/* *  The following defines the bits in Memory Configuration Register 1. */#define LEON_MEMORY_CONFIGURATION_PROM_SIZE_MASK  0x0003C000/* *  The following defines the bits in Memory Configuration Register 1. */#define LEON_MEMORY_CONFIGURATION_RAM_SIZE_MASK  0x00001E00 /* *  The following defines the bits in the Timer Control Register. */#define LEON_REG_TIMER_CONTROL_EN    0x00000001  /* 1 = enable counting */                                                 /* 0 = hold scalar and counter */#define LEON_REG_TIMER_CONTROL_RL    0x00000002  /* 1 = reload at 0 */                                                 /* 0 = stop at 0 */#define LEON_REG_TIMER_CONTROL_LD    0x00000004  /* 1 = load counter */                                                 /* 0 = no function *//* *  The following defines the bits in the UART Control Registers. * */#define LEON_REG_UART_CONTROL_RTD  0x000000FF /* RX/TX data */  /* *  The following defines the bits in the LEON UART Status Registers. */#define LEON_REG_UART_STATUS_DR   0x00000001 /* Data Ready */#define LEON_REG_UART_STATUS_TSE  0x00000002 /* TX Send Register Empty */#define LEON_REG_UART_STATUS_THE  0x00000004 /* TX Hold Register Empty */#define LEON_REG_UART_STATUS_BR   0x00000008 /* Break Error */#define LEON_REG_UART_STATUS_OE   0x00000010 /* RX Overrun Error */#define LEON_REG_UART_STATUS_PE   0x00000020 /* RX Parity Error */#define LEON_REG_UART_STATUS_FE   0x00000040 /* RX Framing Error */#define LEON_REG_UART_STATUS_ERR  0x00000078 /* Error Mask */ /* *  The following defines the bits in the LEON UART Status Registers. */#define LEON_REG_UART_CTRL_RE     0x00000001 /* Receiver enable */#define LEON_REG_UART_CTRL_TE     0x00000002 /* Transmitter enable */#define LEON_REG_UART_CTRL_RI     0x00000004 /* Receiver interrupt enable */#define LEON_REG_UART_CTRL_TI     0x00000008 /* Transmitter interrupt enable */#define LEON_REG_UART_CTRL_PS     0x00000010 /* Parity select */#define LEON_REG_UART_CTRL_PE     0x00000020 /* Parity enable */#define LEON_REG_UART_CTRL_FL     0x00000040 /* Flow control enable */#define LEON_REG_UART_CTRL_LB     0x00000080 /* Loop Back enable */#ifndef  __ASSEMBLER__/* *  This is used to manipulate the on-chip registers. * *  The following symbol must be defined in the linkcmds file and point *  to the correct location. */extern LEON_Register_Map LEON_REG;extern unsigned long *LEON23_IRQ_mask_addr;    /* in peripherals.h */extern unsigned long *LEON23_IRQ_force_addr;   /* in peripherals.h */extern unsigned long *LEON23_IRQ_pending_addr; /* in peripherals.h */extern unsigned long *LEON23_IRQ_clear_addr;   /* in peripherals.h *//* *  Macros to manipulate the Interrupt Clear, Interrupt Force, Interrupt Mask, *  and the Interrupt Pending Registers. * *  NOTE: For operations which are not atomic, this code disables interrupts *        to guarantee there are no intervening accesses to the same register. *        The operations which read the register, modify the value and then *        store the result back are vulnerable. */#define LEON_Clear_interrupt( _source ) \  do { \    (*LEON23_IRQ_clear_addr) = (1 << (_source)); \  } while (0)#define LEON_Force_interrupt( _source ) \  do { \    (*LEON23_IRQ_force_addr) = (1 << (_source)); \  } while (0) #define LEON_Is_interrupt_pending( _source ) \  (LEON_REG.Interrupt_Pending & (1 << (_source))) #define LEON_Is_interrupt_masked( _source ) \  ((*LEON23_IRQ_mask_addr) & (1 << (_source))) #define LEON_Mask_interrupt( _source ) \  do { \    unsigned32 _level; \    \    _level = sparc_disable_interrupts(); \      (*LEON23_IRQ_mask_addr) &= ~(1 << (_source)); \    sparc_enable_interrupts( _level ); \  } while (0) #define LEON_Unmask_interrupt( _source ) \  do { \    unsigned32 _level; \    \    _level = sparc_disable_interrupts(); \      (*LEON23_IRQ_mask_addr) |= (1 << (_source)); \    sparc_enable_interrupts( _level ); \  } while (0)#define LEON_Disable_interrupt( _source, _previous ) \  do { \    unsigned32 _level; \    unsigned32 _mask = 1 << (_source); \    \    _level = sparc_disable_interrupts(); \      (_previous) = (*LEON23_IRQ_mask_addr); \      (*LEON23_IRQ_mask_addr) = _previous & ~_mask; \    sparc_enable_interrupts( _level ); \    (_previous) &= _mask; \  } while (0) #define LEON_Restore_interrupt( _source, _previous ) \  do { \    unsigned32 _level; \    unsigned32 _mask = 1 << (_source); \    \    _level = sparc_disable_interrupts(); \      (*LEON23_IRQ_mask_addr) = \        ((*LEON23_IRQ_mask_addr) & ~_mask) | (_previous); \    sparc_enable_interrupts( _level ); \  } while (0)/* *  Each timer control register is organized as follows: * *    D0 - Enable *          1 = enable counting *          0 = hold scaler and counter * *    D1 - Counter Reload *          1 = reload counter at zero and restart *          0 = stop counter at zero * *    D2 - Counter Load *          1 = load counter with preset value  *          0 = no function * */#define LEON_REG_TIMER_COUNTER_IRQEN              0x00000008#define LEON_REG_TIMER_COUNTER_RELOAD_AT_ZERO     0x00000002#define LEON_REG_TIMER_COUNTER_STOP_AT_ZERO       0x00000000#define LEON_REG_TIMER_COUNTER_LOAD_COUNTER       0x00000004#define LEON_REG_TIMER_COUNTER_ENABLE_COUNTING    0x00000001#define LEON_REG_TIMER_COUNTER_DISABLE_COUNTING   0x00000000#define LEON_REG_TIMER_COUNTER_RELOAD_MASK        0x00000002#define LEON_REG_TIMER_COUNTER_ENABLE_MASK        0x00000001#define LEON_REG_TIMER_COUNTER_DEFINED_MASK       0x00000003#define LEON_REG_TIMER_COUNTER_CURRENT_MODE_MASK  0x00000003/* console.c */int lo_sprintf(char * buf, const char *fmt, ...);#define ASI_LEON2_IFLUSH		0x05#define ASI_LEON2_DFLUSH		0x06extern __inline__ void sparc_leon2_dcache_flush(void) {	__asm__ __volatile__("sta %%g0, [%%g0] %0\n\t": :			     "i" (ASI_LEON2_IFLUSH) : "memory");	__asm__ __volatile__("sta %%g0, [%%g0] %0\n\t": :			     "i" (ASI_LEON2_DFLUSH) : "memory");};  extern __inline__ void sparc_leon_dcache_flush(void) {  switch(sparc_leon23_get_psr_version()) {  case 0: case 2:    sparc_leon2_dcache_flush();    break;  default:    sparc_leon3_dcache_flush();    break;  }}  #endif /* ! __ASSEMBLER__ */#ifdef __cplusplus}#endif #endif /* !_INCLUDE_LEON_h *//* end of include file */

⌨️ 快捷键说明

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