summaryrefslogtreecommitdiffstats
path: root/bsps/arm/csb337/include/at91rm9200.h
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2017-12-23 18:18:56 +1100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-01-25 08:45:26 +0100
commit2afb22b7e1ebcbe40373ff7e0efae7d207c655a9 (patch)
tree44759efe9374f13200a97e96d91bd9a2b7e5ce2a /bsps/arm/csb337/include/at91rm9200.h
parentMAINTAINERS: Add myself to Write After Approval. (diff)
downloadrtems-2afb22b7e1ebcbe40373ff7e0efae7d207c655a9.tar.bz2
Remove make preinstall
A speciality of the RTEMS build system was the make preinstall step. It copied header files from arbitrary locations into the build tree. The header files were included via the -Bsome/build/tree/path GCC command line option. This has at least seven problems: * The make preinstall step itself needs time and disk space. * Errors in header files show up in the build tree copy. This makes it hard for editors to open the right file to fix the error. * There is no clear relationship between source and build tree header files. This makes an audit of the build process difficult. * The visibility of all header files in the build tree makes it difficult to enforce API barriers. For example it is discouraged to use BSP-specifics in the cpukit. * An introduction of a new build system is difficult. * Include paths specified by the -B option are system headers. This may suppress warnings. * The parallel build had sporadic failures on some hosts. This patch removes the make preinstall step. All installed header files are moved to dedicated include directories in the source tree. Let @RTEMS_CPU@ be the target architecture, e.g. arm, powerpc, sparc, etc. Let @RTEMS_BSP_FAMILIY@ be a BSP family base directory, e.g. erc32, imx, qoriq, etc. The new cpukit include directories are: * cpukit/include * cpukit/score/cpu/@RTEMS_CPU@/include * cpukit/libnetworking The new BSP include directories are: * bsps/include * bsps/@RTEMS_CPU@/include * bsps/@RTEMS_CPU@/@RTEMS_BSP_FAMILIY@/include There are build tree include directories for generated files. The include directory order favours the most general header file, e.g. it is not possible to override general header files via the include path order. The "bootstrap -p" option was removed. The new "bootstrap -H" option should be used to regenerate the "headers.am" files. Update #3254.
Diffstat (limited to 'bsps/arm/csb337/include/at91rm9200.h')
-rw-r--r--bsps/arm/csb337/include/at91rm9200.h344
1 files changed, 344 insertions, 0 deletions
diff --git a/bsps/arm/csb337/include/at91rm9200.h b/bsps/arm/csb337/include/at91rm9200.h
new file mode 100644
index 0000000000..3ed64c7073
--- /dev/null
+++ b/bsps/arm/csb337/include/at91rm9200.h
@@ -0,0 +1,344 @@
+/*
+ * Atmel AT91RM9200 Register definitions, used in KIT637_V6 (CSB637)
+ *
+ * Copyright (c) 2003 by Cogent Computer Systems
+ * Written by Mike Kelly <mike@cogcomp.com>
+ *
+ * Modified by Fernando Nicodemos <fgnicodemos@terra.com.br>
+ * from NCB - Sistemas Embarcados Ltda. (Brazil)
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+*/
+
+
+#ifndef __AT91RM9200_H__
+#define __AT91RM9200_H__
+
+#include "bits.h"
+
+typedef volatile unsigned long vulong;
+
+/* Source Mode Register - 32 of them */
+#define AIC_SMR_BASE 0xFFFFF000
+#define AIC_SMR_REG(_x_) *(vulong *)(AIC_SMR_BASE + (_x_ & 0x7c))
+
+/* Source Vector Register - 32 of them */
+#define AIC_SVR_BASE 0xFFFFF080
+#define AIC_SVR_REG(_x_) *(vulong *)(AIC_SVR_BASE + (_x_ & 0x7c))
+
+/* Control Register - 32 of them */
+#define AIC_CTL_BASE 0xFFFFF100
+#define AIC_CTL_REG(_x_) *(vulong *)(AIC_CTL_BASE + (_x_ & 0x7f))
+
+/* Register Offsets */
+/* offsets from AIC_SMR_BASE and AIC_SVR_BASE */
+#define AIC_SMR_FIQ 0x00 /* Advanced Interrupt Controller FIQ */
+#define AIC_SMR_SYSIRQ 0x04 /* Advanced Interrupt Controller SYSIRQ */
+#define AIC_SMR_PIOA 0x08 /* Parallel I/O Controller A */
+#define AIC_SMR_PIOB 0x0c /* Parallel I/O Controller B */
+#define AIC_SMR_PIOC 0x10 /* Parallel I/O Controller C */
+#define AIC_SMR_PIOD 0x14 /* Parallel I/O Controller D */
+#define AIC_SMR_US0 0x18 /* USART 0 */
+#define AIC_SMR_US1 0x1c /* USART 1 */
+#define AIC_SMR_US2 0x20 /* USART 2 */
+#define AIC_SMR_US3 0x24 /* USART 3 */
+#define AIC_SMR_MCI 0x28 /* Multimedia Card Interface */
+#define AIC_SMR_UDP 0x2c /* USB Device Port */
+#define AIC_SMR_TWI 0x30 /* Two-wire Interface */
+#define AIC_SMR_SPI 0x34 /* Serial Peripheral Interface */
+#define AIC_SMR_SSC0 0x38 /* Synchronous Serial Controller 0 */
+#define AIC_SMR_SSC1 0x3c /* Synchronous Serial Controller 1 */
+#define AIC_SMR_SSC2 0x40 /* Synchronous Serial Controller 2 */
+#define AIC_SMR_TC0 0x44 /* Timer/Counter 0 */
+#define AIC_SMR_TC1 0x48 /* Timer/Counter 1 */
+#define AIC_SMR_TC2 0x4c /* Timer/Counter 2 */
+#define AIC_SMR_TC3 0x50 /* Timer/Counter 3 */
+#define AIC_SMR_TC4 0x54 /* Timer/Counter 4 */
+#define AIC_SMR_TC5 0x58 /* Timer/Counter 5 */
+#define AIC_SMR_UHP 0x5c /* USB Host Port */
+#define AIC_SMR_EMAC 0x60 /* Ethernet MAC */
+#define AIC_SMR_IRQ0 0x64 /* Advanced Interrupt Controller IRQ0 */
+#define AIC_SMR_IRQ1 0x68 /* Advanced Interrupt Controller IRQ1 */
+#define AIC_SMR_IRQ2 0x6c /* Advanced Interrupt Controller IRQ2 */
+#define AIC_SMR_IRQ3 0x70 /* Advanced Interrupt Controller IRQ3 */
+#define AIC_SMR_IRQ4 0x74 /* Advanced Interrupt Controller IRQ4 */
+#define AIC_SMR_IRQ5 0x78 /* Advanced Interrupt Controller IRQ5 */
+#define AIC_SMR_IRQ6 0x7c /* Advanced Interrupt Controller IRQ6 */
+
+/* from AIC_CTL_BASE */
+#define AIC_IVR 0x00 /* IRQ Vector Register */
+#define AIC_FVR 0x04 /* FIQ Vector Register */
+#define AIC_ISR 0x08 /* Interrupt Status Register */
+#define AIC_IPR 0x0C /* Interrupt Pending Register */
+#define AIC_IMR 0x10 /* Interrupt Mask Register */
+#define AIC_CISR 0x14 /* Core Interrupt Status Register */
+#define AIC_IECR 0x20 /* Interrupt Enable Command Register */
+#define AIC_IDCR 0x24 /* Interrupt Disable Command Register */
+#define AIC_ICCR 0x28 /* Interrupt Clear Command Register */
+#define AIC_ISCR 0x2C /* Interrupt Set Command Register */
+#define AIC_EOICR 0x30 /* End of Interrupt Command Register */
+#define AIC_SPU 0x34 /* Spurious Vector Register */
+#define AIC_DCR 0x38 /* Debug Control Register (Protect) */
+#define AIC_FFER 0x40 /* Fast Forcing Enable Register */
+#define AIC_FFDR 0x44 /* Fast Forcing Disable Register */
+#define AIC_FFSR 0x48 /* Fast Forcing Status Register */
+
+/* Bit Defines */
+/* AIC_ISR - Interrupt Status Register */
+#define AIC_ISR_IRQID_MASK 0x1f /* current interrupt ID */
+
+/* AIC_CISR - Core Interrupt Status Register */
+#define AIC_CISR_IRQ BIT1 /* 1 = Core IRQ is active */
+#define AIC_CISR_FIQ BIT0 /* 1 = Core FIQ is active */
+
+/* AIC_DCR - Debug Control Register (Protect) */
+#define AIC_DCR_GMSK BIT1 /* 0 = AIC controls IRQ and FIQ */
+#define AIC_DCR_PROT BIT0 /* 1 = enable protection mode */
+
+/* AIC_SMR */
+#define AIC_SMR_PRIOR(_x_) ((_x_ & 0x07) << 0)
+#define AIC_SMR_SRC_LVL_LOW (0 << 5) /* Are these right? docs don't say which is high/low */
+#define AIC_SMR_SRC_EDGE_LOW (1 << 5)
+#define AIC_SMR_SRC_LVL_HI (2 << 5)
+#define AIC_SMR_SRC_EDGE_HI (3 << 5)
+
+/**************************************************************************/
+/* Debug Unit */
+/**************************************************************************/
+#define DBGU_BASE 0xFFFFF200
+#define DBGU_REG(_x_) *(vulong *)(DBGU_BASE + _x_)
+
+/* Register Offsets */
+#define DBGU_CR 0x00 /* Control Register */
+#define DBGU_MR 0x04 /* Mode Register */
+#define DBGU_IER 0x08 /* Interrupt Enable Register */
+#define DBGU_IDR 0x0C /* Interrupt Disable Register */
+#define DBGU_IMR 0x10 /* Interrupt Mask Register */
+#define DBGU_CSR 0x14 /* Channel Status Register */
+#define DBGU_RHR 0x18 /* Receiver Holding Register */
+#define DBGU_THR 0x1C /* Transmitter Holding Register */
+#define DBGU_BRGR 0x20 /* Baud Rate Generator Register */
+#define DBGU_C1R 0x40 /* Chip ID1 Register */
+#define DBGU_C2R 0x44 /* Chip ID2 Register */
+#define DBGU_FNTR 0x48 /* Force NTRST Register */
+
+/**************************************************************************/
+/* USART 0-3 */
+/**************************************************************************/
+#define USART0_BASE 0xFFFC0000
+#define USART1_BASE 0xFFFC4000
+#define USART2_BASE 0xFFFC8000
+#define USART3_BASE 0xFFFCC000
+/*
+ * WARNING: The USART3_BASE at the AT91RM9200 Manual is wrong!!!
+ * Manual revision: Rev. 1768H-ATARM–16-Jun-09
+ * USART3_BASE is NOT 0xFFECC000
+ */
+
+/****************/
+/* System Timer */
+/****************/
+#define ST_BASE 0xFFFFFD00
+#define ST_REG(_x_) *(vulong *)(ST_BASE + _x_)
+
+/* Register Offsets */
+#define ST_CR 0x00 /* Control Register */
+#define ST_PIMR 0x04 /* Period Interval Mode Register */
+#define ST_WDMR 0x08 /* Watchdog Mode Register */
+#define ST_RTMR 0x0C /* Real-time Mode Register */
+#define ST_SR 0x10 /* Status Register */
+#define ST_IER 0x14 /* Interrupt Enable Register */
+#define ST_IDR 0x18 /* Interrupt Disable Register */
+#define ST_IMR 0x1C /* Interrupt Mask Register */
+#define ST_RTAR 0x20 /* Real-time Alarm Register */
+#define ST_CRTR 0x24 /* Current Real-time Register */
+
+/* Bit Defines */
+/* ST_CR - Control Register */
+#define ST_CR_WDRST BIT0 /* write 1 to reload WD counter */
+
+/* ST_PIMR - Period Interval Mode Register */
+#define ST_PIMR_PIV_MASK 0x0000ffff
+
+/* ST_WDMR - Watchdog Mode Register */
+#define ST_WDMR_EXTEN BIT17 /* WDOVF is not implemented on AT91RM9200 */
+#define ST_WDMR_RSTEN BIT16 /* 1 = reset the AT91RM9200 when WD overflows */
+#define ST_WDMR_WDV_MASK 0x0000ffff /* WD counter is in the lower 16-bits */
+
+/* ST_RTMR - Real-time Mode Register */
+#define ST_RTMR_RTPRES_MASK 0x0000ffff /* Real-Time Prescaler */
+
+/* ST_SR - Status Register - Read Only */
+/* ST_IER - Interrupt Enable Register - Write Only */
+/* ST_IDR - Interrupt Disable Register - Write Only */
+/* ST_IMR - Interrupt Mask Register - Read Only */
+#define ST_SR_ALMS BIT3
+#define ST_SR_RTTINC BIT2
+#define ST_SR_WDOVF BIT1
+#define ST_SR_PITS BIT0
+
+/* ST_RTAR - Real-time Alarm Register */
+#define ST_RTAR_ALMV_MASK 0x000fffff
+
+/* ST_CRTR - Current Real-time Register */
+#define ST_CRTR_CRTV_MASK 0x000fffff
+
+
+/**************************************************************************
+ * Peripheral Data Control (DMA)
+ * Note that each of the following peripherals has it's own
+ * set of these registers starting at offset 0x100 from it's
+ * base address: DBGU, SPI, USART and SSC
+ * To access the DMA for a peripheral, use the macro for that
+ * peripheral but with these register offsets
+ **************************************************************************/
+/* Register Offsets */
+#define PDC_RPR 0x100 /* Receive Pointer Register */
+#define PDC_RCR 0x104 /* Receive Counter Register */
+#define PDC_TPR 0x108 /* Transmit Pointer Register */
+#define PDC_TCR 0x10c /* Transmit Counter Register */
+#define PDC_RNPR 0x110 /* Receive Next Pointer Register */
+#define PDC_RNCR 0x114 /* Receive Next Counter Register */
+#define PDC_TNPR 0x118 /* Transmit Next Pointer Register */
+#define PDC_TNCR 0x11c /* Transmit Next Counter Register */
+#define PDC_PTCR 0x120 /* PDC Transfer Control Register */
+#define PDC_PTSR 0x124 /* PDC Transfer Status Register */
+
+/**************************************************************************
+ * Parallel I/O Unit
+ * There are four PIO blocks - A, B, C and D. They all have the
+ * same register set, but different base addresses
+ **************************************************************************/
+/* Port A */
+#define PIOA_BASE 0xFFFFF400
+#define PIOA_REG(_x_) *(vulong *)(PIOA_BASE + _x_)
+
+/* Port B */
+#define PIOB_BASE 0xFFFFF600
+#define PIOB_REG(_x_) *(vulong *)(PIOB_BASE + _x_)
+
+/* Port C */
+#define PIOC_BASE 0xFFFFF800
+#define PIOC_REG(_x_) *(vulong *)(PIOC_BASE + _x_)
+
+/* Port D */
+#define PIOD_BASE 0xFFFFFA00
+#define PIOD_REG(_x_) *(vulong *)(PIOD_BASE + _x_)
+
+/**************************************************************************
+ * Power Management and Clock Control
+ *************************************************************************/
+#define PMC_BASE 0xFFFFFC00
+#define PMC_REG(_x_) *(vulong *)(PMC_BASE + _x_)
+
+/**************************************************************************
+ * MAC Unit
+ *************************************************************************/
+#define EMAC_BASE 0xFFFBC000
+#define EMAC_REG(_x_) *(vulong *)(EMAC_BASE + _x_)
+
+/**************************************************************************
+ * Timer/Counter Unit
+ **************************************************************************/
+#define TC_BASE 0xFFFA0000
+#define TC_REG(_x_) *(vulong *)(TC_BASE + 0x00 + _x_)
+#define TC_TC0_REG(_x_) *(vulong *)(TC_BASE + 0x00 + _x_)
+#define TC_TC1_REG(_x_) *(vulong *)(TC_BASE + 0x40 + _x_)
+#define TC_TC2_REG(_x_) *(vulong *)(TC_BASE + 0x80 + _x_)
+
+/* Offsets from TC_TC?_REG */
+#define TC_CCR 0x00 /* Channel Control Register */
+#define TC_CMR 0x04 /* Channel Mode Register */
+#define TC_CV 0x10 /* Counter Value */
+#define TC_RA 0x14 /* Register A */
+#define TC_RB 0x18 /* Register B */
+#define TC_RC 0x1C /* Register C */
+#define TC_SR 0x20 /* Status Register */
+#define TC_IER 0x24 /* Interrupt Enable Register */
+#define TC_IDR 0x28 /* Interrupt Disable Register */
+#define TC_IMR 0x2C /* Interrupt Mask Register */
+
+/* Offsets from TC_BASE */
+#define TC_BCR 0xc0 /* Channel Control Register */
+#define TC_BMR 0xc4 /* Channel Control Register */
+
+/* Block control register */
+#define TC_BCR_SYNC BIT1 /* Set to syncronize channels */
+
+/* Block mode register */
+#define TC_BMR_TC0(_x_) ((_x_ & 0x3) << 0) /* TC0 clock source */
+#define TC_BMR_TC1(_x_) ((_x_ & 0x3) << 2) /* TC1 clock source */
+#define TC_BMR_TC2(_x_) ((_x_ & 0x3) << 4) /* TC2 clock source */
+
+/* Channel Control register */
+#define TC_CCR_CLKEN BIT0 /* Enable clock */
+#define TC_CCR_CLKDIS BIT1 /* Disable clock */
+#define TC_CCR_SWTRG BIT2 /* Software trigger command */
+
+/* Channel mode register */
+#define TC_CMR_TCCLKS(_x_) ((_x_ & 0x7) << 0) /* Clock source */
+#define TC_CMR_CLKI BIT3 /* Clock invert */
+#define TC_BURST(_x_) ((_x_ & 0x3 << 4) /* Burst signal selection */
+#define TC_WAVE BIT15 /* 0 for catpure, 1 for wave */
+
+/* Channel mode register - capture mode (TC_WAVE = 0) */
+#define TC_CMR_LDBSTOP BIT6 /* Set to stop clock when RB loads */
+#define TC_CMR_LDBDIS BIT7 /* Set to disable clock when RB loads */
+#define TC_CMR_ETRGEDG(_x_) ((_x_ & 0x3) << 8) /* Select edge triggering mode */
+#define TC_CMR_ABETRG BIT10 /* Select ext trigger source */
+#define TC_CMR_CPCTRG BIT14 /* RC Compare trigger enable */
+#define TC_CMR_LDRA(_x_) ((_x_ & 0x3) << 16) /* RA loading selection */
+#define TC_CMR_LDRB(_x_) ((_x_ & 0x3) << 18) /* RB loading selection */
+
+/* Channel mode register - wave mode (TC_WAVE = 1) */
+#define TC_CMR_CPCSTOP BIT6 /* Clock stopped w/ RC compare */
+#define TC_CMR_CPCDIS BIT7 /* Clock disabled w/ RC compare */
+#define TC_CMR_EEVTEDG(_x_) ((_x_ & 0x3) << 8) /* Ext event edge selection */
+#define TC_CMR_EEVT(_x_) ((_x_ & 0x3) << 10) /* Ext event selection */
+#define TC_CMR_ENETRG BIT12 /* Ext event trigger enable */
+#define TC_CMR_WAVESEL(_x_) ((_x_ & 0x3) << 13) /* Waveform selection */
+#define TC_CMR_ACPA(_x_) ((_x_ & 0x3) << 16) /* RA compare effect on TIOA */
+#define TC_CMR_ACPC(_x_) ((_x_ & 0x3) << 18) /* RC compare effect on TIOA */
+#define TC_CMR_AEEVT(_x_) ((_x_ & 0x3) << 20) /* Ext event effect on TIOA */
+#define TC_CMR_ASWTRG(_x_) ((_x_ & 0x3) << 22) /* SW trigger effect on TIOA */
+#define TC_CMR_BCPB(_x_) ((_x_ & 0x3) << 24) /* RB compare effect on TIOB */
+#define TC_CMR_BCPC(_x_) ((_x_ & 0x3) << 26) /* RC compare effect on TIOB */
+#define TC_CMR_BEEVT(_x_) ((_x_ & 0x3) << 28) /* Ext event effect on TIOB */
+#define TC_CMR_BSWTRG(_x_) ((_x_ & 0x3) << 30) /* SW trigger effect on TIOB */
+
+/* Counter value */
+#define TC_CV_MASK 0xffff /* Timer counter mask */
+
+/* Status, Interrupt enable, Interrupt disable, and Interrupt mask registers */
+#define TC_SR_COVFS BIT0 /* Counter overflow status */
+#define TC_SR_LOVRS BIT1 /* Load overrun status */
+#define TC_SR_CPAS BIT2 /* RA compare status */
+#define TC_SR_CPBS BIT3 /* RB compare status */
+#define TC_SR_CPCS BIT4 /* RC compare status */
+#define TC_SR_LDRAS BIT5 /* RA loading status */
+#define TC_SR_LDRBS BIT6 /* RB loading status */
+#define TC_SR_ETRGS BIT7 /* External trigger status */
+#define TC_SR_CLKSTA BIT16 /* Clock enabling status */
+#define TC_SR_MTIOA BIT17 /* TIOA Mirror */
+#define TC_SR_MTIOB BIT18 /* TIOB Mirror */
+
+/***************************************************************************
+ * External Bus Interface Unit
+ **************************************************************************/
+#define EBI_BASE 0xFFFFFF60
+#define EBI_REG(_x_) *(vulong *)(EBI_BASE + _x_)
+
+/***************************************************************************
+ * Static Memory Interface Unit
+ ***************************************************************************/
+#define SMC_REG(_x_) *(vulong *)(EBI_BASE + 0x10 + _x_)
+
+/**************************************************************************
+ * SDRAM Memory Interface Unit
+ **************************************************************************/
+#define SDRC_REG(_x_) *(vulong *)(EBI_BASE + 0x30 + _x_)
+
+#endif /* __AT91RM9200_H__ */
+