📄 erc32.h
字号:
/* erc32.h * * This include file contains information pertaining to the ERC32. * The ERC32 is a custom SPARC V7 implementation based on the Cypress * 601/602 chipset. This CPU has a number of on-board peripherals and * was developed by the European Space Agency to target space applications. * * NOTE: Other than where absolutely required, this version currently * supports only the peripherals and bits used by the basic board * support package. This includes at least significant pieces of * the following items: * * + UART Channels A and B * + General Purpose Timer * + Real Time Clock * + Watchdog Timer (so it can be disabled) * + Control Register (so powerdown mode can be enabled) * + Memory Control Register * + Interrupt Control * * COPYRIGHT (c) 1989-1999. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.com/license/LICENSE. * * Ported to ERC32 implementation of the SPARC by On-Line Applications * Research Corporation (OAR) under contract to the European Space * Agency (ESA). * * ERC32 modifications of respective RTEMS file: COPYRIGHT (c) 1995. * European Space Agency. * * $Id: erc32.h,v 1.2.4.1 2003/09/04 18:45:36 joel Exp $ */ #ifndef _INCLUDE_ERC32_h#define _INCLUDE_ERC32_h#include <rtems/score/sparc.h> #ifdef __cplusplusextern "C" {#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 ERC32_INTERRUPT_MASKED_ERRORS 1#define ERC32_INTERRUPT_EXTERNAL_1 2#define ERC32_INTERRUPT_EXTERNAL_2 3#define ERC32_INTERRUPT_UART_A_RX_TX 4#define ERC32_INTERRUPT_UART_B_RX_TX 5#define ERC32_INTERRUPT_CORRECTABLE_MEMORY_ERROR 6#define ERC32_INTERRUPT_UART_ERROR 7#define ERC32_INTERRUPT_DMA_ACCESS_ERROR 8#define ERC32_INTERRUPT_DMA_TIMEOUT 9#define ERC32_INTERRUPT_EXTERNAL_3 10#define ERC32_INTERRUPT_EXTERNAL_4 11#define ERC32_INTERRUPT_GENERAL_PURPOSE_TIMER 12#define ERC32_INTERRUPT_REAL_TIME_CLOCK 13#define ERC32_INTERRUPT_EXTERNAL_5 14#define ERC32_INTERRUPT_WATCHDOG_TIMEOUT 15#ifndef ASM/* * 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 ERC32_TRAP_TYPE( _source ) SPARC_ASYNCHRONOUS_TRAP((_source) + 0x10)#define ERC32_TRAP_SOURCE( _trap ) ((_trap) - 0x10)#define ERC32_Is_MEC_Trap( _trap ) \ ( (_trap) >= ERC32_TRAP_TYPE( ERC32_INTERRUPT_MASKED_ERRORS ) && \ (_trap) <= ERC32_TRAP_TYPE( ERC32_INTERRUPT_WATCHDOG_TIMEOUT ) )/* * Structure for ERC32 memory mapped registers. * * Source: Section 3.25.2 - Register Address Map * * NOTE: There is only one of these structures per CPU, its base address * is 0x01f80000, and the variable MEC is placed there by the * linkcmds file. */typedef struct { volatile unsigned32 Control; /* offset 0x00 */ volatile unsigned32 Software_Reset; /* offset 0x04 */ volatile unsigned32 Power_Down; /* offset 0x08 */ volatile unsigned32 Unimplemented_0; /* offset 0x0c */ volatile unsigned32 Memory_Configuration; /* offset 0x10 */ volatile unsigned32 IO_Configuration; /* offset 0x14 */ volatile unsigned32 Wait_State_Configuration; /* offset 0x18 */ volatile unsigned32 Unimplemented_1; /* offset 0x1c */ volatile unsigned32 Memory_Access_0; /* offset 0x20 */ volatile unsigned32 Memory_Access_1; /* offset 0x24 */ volatile unsigned32 Unimplemented_2[ 7 ]; /* offset 0x28 */ volatile unsigned32 Interrupt_Shape; /* offset 0x44 */ volatile unsigned32 Interrupt_Pending; /* offset 0x48 */ volatile unsigned32 Interrupt_Mask; /* offset 0x4c */ volatile unsigned32 Interrupt_Clear; /* offset 0x50 */ volatile unsigned32 Interrupt_Force; /* offset 0x54 */ volatile unsigned32 Unimplemented_3[ 2 ]; /* offset 0x58 */ /* offset 0x60 */ volatile unsigned32 Watchdog_Program_and_Timeout_Acknowledge; volatile unsigned32 Watchdog_Trap_Door_Set; /* offset 0x64 */ volatile unsigned32 Unimplemented_4[ 6 ]; /* offset 0x68 */ volatile unsigned32 Real_Time_Clock_Counter; /* offset 0x80 */ volatile unsigned32 Real_Time_Clock_Scalar; /* offset 0x84 */ volatile unsigned32 General_Purpose_Timer_Counter; /* offset 0x88 */ volatile unsigned32 General_Purpose_Timer_Scalar; /* offset 0x8c */ volatile unsigned32 Unimplemented_5[ 2 ]; /* offset 0x90 */ volatile unsigned32 Timer_Control; /* offset 0x98 */ volatile unsigned32 Unimplemented_6; /* offset 0x9c */ volatile unsigned32 System_Fault_Status; /* offset 0xa0 */ volatile unsigned32 First_Failing_Address; /* offset 0xa4 */ volatile unsigned32 First_Failing_Data; /* offset 0xa8 */ volatile unsigned32 First_Failing_Syndrome_and_Check_Bits;/* offset 0xac */ volatile unsigned32 Error_and_Reset_Status; /* offset 0xb0 */ volatile unsigned32 Error_Mask; /* offset 0xb4 */ volatile unsigned32 Unimplemented_7[ 2 ]; /* offset 0xb8 */ volatile unsigned32 Debug_Control; /* offset 0xc0 */ volatile unsigned32 Breakpoint; /* offset 0xc4 */ volatile unsigned32 Watchpoint; /* offset 0xc8 */ volatile unsigned32 Unimplemented_8; /* offset 0xcc */ volatile unsigned32 Test_Control; /* offset 0xd0 */ volatile unsigned32 Test_Data; /* offset 0xd4 */ volatile unsigned32 Unimplemented_9[ 2 ]; /* offset 0xd8 */ volatile unsigned32 UART_Channel_A; /* offset 0xe0 */ volatile unsigned32 UART_Channel_B; /* offset 0xe4 */ volatile unsigned32 UART_Status; /* offset 0xe8 */} ERC32_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 MEC * into a register and then use these as displacements from * that register. */#ifdef ASM#define ERC32_MEC_CONTROL_OFFSET 0x00#define ERC32_MEC_SOFTWARE_RESET_OFFSET 0x04#define ERC32_MEC_POWER_DOWN_OFFSET 0x08#define ERC32_MEC_UNIMPLEMENTED_0_OFFSET 0x0C#define ERC32_MEC_MEMORY_CONFIGURATION_OFFSET 0x10#define ERC32_MEC_IO_CONFIGURATION_OFFSET 0x14#define ERC32_MEC_WAIT_STATE_CONFIGURATION_OFFSET 0x18#define ERC32_MEC_UNIMPLEMENTED_1_OFFSET 0x1C#define ERC32_MEC_MEMORY_ACCESS_0_OFFSET 0x20#define ERC32_MEC_MEMORY_ACCESS_1_OFFSET 0x24#define ERC32_MEC_UNIMPLEMENTED_2_OFFSET 0x28#define ERC32_MEC_INTERRUPT_SHAPE_OFFSET 0x44#define ERC32_MEC_INTERRUPT_PENDING_OFFSET 0x48#define ERC32_MEC_INTERRUPT_MASK_OFFSET 0x4C#define ERC32_MEC_INTERRUPT_CLEAR_OFFSET 0x50#define ERC32_MEC_INTERRUPT_FORCE_OFFSET 0x54#define ERC32_MEC_UNIMPLEMENTED_3_OFFSET 0x58#define ERC32_MEC_WATCHDOG_PROGRAM_AND_TIMEOUT_ACKNOWLEDGE_OFFSET 0x60#define ERC32_MEC_WATCHDOG_TRAP_DOOR_SET_OFFSET 0x64#define ERC32_MEC_UNIMPLEMENTED_4_OFFSET 0x6C#define ERC32_MEC_REAL_TIME_CLOCK_COUNTER_OFFSET 0x80#define ERC32_MEC_REAL_TIME_CLOCK_SCALAR_OFFSET 0x84#define ERC32_MEC_GENERAL_PURPOSE_TIMER_COUNTER_OFFSET 0x88#define ERC32_MEC_GENERAL_PURPOSE_TIMER_SCALAR_OFFSET 0x8C#define ERC32_MEC_UNIMPLEMENTED_5_OFFSET 0x90#define ERC32_MEC_TIMER_CONTROL_OFFSET 0x98#define ERC32_MEC_UNIMPLEMENTED_6_OFFSET 0x9C#define ERC32_MEC_SYSTEM_FAULT_STATUS_OFFSET 0xA0#define ERC32_MEC_FIRST_FAILING_ADDRESS_OFFSET 0xA4#define ERC32_MEC_FIRST_FAILING_DATA_OFFSET 0xA8#define ERC32_MEC_FIRST_FAILING_SYNDROME_AND_CHECK_BITS_OFFSET 0xAC#define ERC32_MEC_ERROR_AND_RESET_STATUS_OFFSET 0xB0#define ERC32_MEC_ERROR_MASK_OFFSET 0xB4#define ERC32_MEC_UNIMPLEMENTED_7_OFFSET 0xB8#define ERC32_MEC_DEBUG_CONTROL_OFFSET 0xC0#define ERC32_MEC_BREAKPOINT_OFFSET 0xC4#define ERC32_MEC_WATCHPOINT_OFFSET 0xC8#define ERC32_MEC_UNIMPLEMENTED_8_OFFSET 0xCC#define ERC32_MEC_TEST_CONTROL_OFFSET 0xD0#define ERC32_MEC_TEST_DATA_OFFSET 0xD4#define ERC32_MEC_UNIMPLEMENTED_9_OFFSET 0xD8#define ERC32_MEC_UART_CHANNEL_A_OFFSET 0xE0#define ERC32_MEC_UART_CHANNEL_B_OFFSET 0xE4#define ERC32_MEC_UART_STATUS_OFFSET 0xE8#endif/* * The following defines the bits in the Configuration Register. */#define ERC32_CONFIGURATION_POWER_DOWN_MASK 0x00000001#define ERC32_CONFIGURATION_POWER_DOWN_ALLOWED 0x00000001#define ERC32_CONFIGURATION_POWER_DOWN_DISABLED 0x00000000#define ERC32_CONFIGURATION_SOFTWARE_RESET_MASK 0x00000002#define ERC32_CONFIGURATION_SOFTWARE_RESET_ALLOWED 0x00000002#define ERC32_CONFIGURATION_SOFTWARE_RESET_DISABLED 0x00000000#define ERC32_CONFIGURATION_BUS_TIMEOUT_MASK 0x00000004#define ERC32_CONFIGURATION_BUS_TIMEOUT_ENABLED 0x00000004#define ERC32_CONFIGURATION_BUS_TIMEOUT_DISABLED 0x00000000#define ERC32_CONFIGURATION_ACCESS_PROTECTION_MASK 0x00000008#define ERC32_CONFIGURATION_ACCESS_PROTECTION_ENABLED 0x00000008#define ERC32_CONFIGURATION_ACCESS_PROTECTION_DISABLED 0x00000000/* * The following defines the bits in the Memory Configuration Register. */#define ERC32_MEMORY_CONFIGURATION_RAM_SIZE_MASK 0x00001C00#define ERC32_MEMORY_CONFIGURATION_RAM_SIZE_256K ( 0 << 10 )#define ERC32_MEMORY_CONFIGURATION_RAM_SIZE_512K ( 1 << 10 )#define ERC32_MEMORY_CONFIGURATION_RAM_SIZE_1MB ( 2 << 10 )#define ERC32_MEMORY_CONFIGURATION_RAM_SIZE_2MB ( 3 << 10 )#define ERC32_MEMORY_CONFIGURATION_RAM_SIZE_4MB ( 4 << 10 )#define ERC32_MEMORY_CONFIGURATION_RAM_SIZE_8MB ( 5 << 10 )#define ERC32_MEMORY_CONFIGURATION_RAM_SIZE_16MB ( 6 << 10 )#define ERC32_MEMORY_CONFIGURATION_RAM_SIZE_32MB ( 7 << 10 )#define ERC32_MEMORY_CONFIGURATION_PROM_SIZE_MASK 0x001C0000#define ERC32_MEMORY_CONFIGURATION_PROM_SIZE_128K ( 0 << 18 )#define ERC32_MEMORY_CONFIGURATION_PROM_SIZE_256K ( 1 << 18 )#define ERC32_MEMORY_CONFIGURATION_PROM_SIZE_512K ( 2 << 18 )#define ERC32_MEMORY_CONFIGURATION_PROM_SIZE_1M ( 3 << 18 )#define ERC32_MEMORY_CONFIGURATION_PROM_SIZE_2M ( 4 << 18 )#define ERC32_MEMORY_CONFIGURATION_PROM_SIZE_4M ( 5 << 18 )#define ERC32_MEMORY_CONFIGURATION_PROM_SIZE_8M ( 6 << 18 )#define ERC32_MEMORY_CONFIGURATION_PROM_SIZE_16M ( 7 << 18 ) /* * The following defines the bits in the Timer Control Register. */#define ERC32_MEC_TIMER_CONTROL_GCR 0x00000001 /* 1 = reload at 0 */ /* 0 = stop at 0 */#define ERC32_MEC_TIMER_CONTROL_GCL 0x00000002 /* 1 = load and start */ /* 0 = no function */#define ERC32_MEC_TIMER_CONTROL_GSE 0x00000004 /* 1 = enable counting */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -