summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/arm/at91rm9200/include/at91rm9200_mem.h
blob: 236a2a85fe1ae95afdc33ce4666fbf0e0b66e178 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
 * AT91RM9200 Memory Controller definitions
 *
 * Copyright (c) 2002 by Cogent Computer Systems
 * Written by Mike Kelly <mike@cogcomp.com>
 *      
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *
 *  http://www.OARcorp.com/rtems/license.html.
 *
 *  $Id$
 */
#ifndef AT91RM9200_MEM_H
#define AT91RM9200_MEM_H

// *****************************************************************************
// External Bus Interface Unit
// *****************************************************************************
#define EBI_CSA                                 0x00    // Chip Select Assignment Register
#define EBI_CFGR                                0x04    // Configuration Register

// Bit Defines
// EBI_CSA - Chip Select Assignment Register
#define EBI_CSA_CS4_CF                  BIT4    // 1 = CS4-6 are assigned to Compact Flash, 0 = Chip Selects
#define EBI_CSA_CS3_SMM                 BIT3    // 1 = CS3 is assigned to SmartMedia, 0 = Chip Select
#define EBI_CSA_CS1_SDRAM               BIT1    // 1 = CS1 is assigned to SDRAM, 0 = Chip Select
#define EBI_CSA_CS0_BF                  BIT0    // 1 = CS0 is assigned to Burst Flash, 0 = Chip Select

// EBI_CFGR     - Configuration Register
#define EBI_CFGR_DBPU                   BIT0    // 1 = Disable D0-15 pullups                            

// *****************************************************************************
// Static Memory Interface Unit
// *****************************************************************************
#define SMC_CSR0                                0x00    // Chip Select Register 0 
#define SMC_CSR1                                0x04    // Chip Select Register 1 
#define SMC_CSR2                                0x08    // Chip Select Register 2 
#define SMC_CSR3                                0x0C    // Chip Select Register 3 
#define SMC_CSR4                                0x10    // Chip Select Register 4 
#define SMC_CSR5                                0x14    // Chip Select Register 5 
#define SMC_CSR6                                0x18    // Chip Select Register 6 
#define SMC_CSR7                                0x1C    // Chip Select Register 7 

// Bit Defines
// SMC_CSR0 -7 - Chip Selects 0 - 7 Register
#define SMC_CSR_RWHOLD(_x_)             ((_x_ & 0x3) << 28)     // Hold CS after R/W strobes
#define SMC_CSR_RWSETUP(_x_)    ((_x_ & 0x3) << 24)     // Setup CS before R/W strobes
#define SMC_CSR_ACSS_0                  (0 << 16)                               // Setup/Hold Address 0 clocks before/after CS
#define SMC_CSR_ACSS_1                  (1 << 16)                               // Setup/Hold Address 1 clock before/after CS
#define SMC_CSR_ACSS_2                  (2 << 16)                               // Setup/Hold Address 2 clocks before/after CS
#define SMC_CSR_ACSS_3                  (3 << 16)                               // Setup/Hold Address 3 clocks before/after CS
#define SMC_CSR_DRP_NORMAL              0                                               // 0 = normal read protocol
#define SMC_CSR_DRP_EARLY               BIT15                                   // 1 = early read protocol
#define SMC_CSR_DBW_16                  (1 << 13)                               // CS DataBus Width = 16-Bits
#define SMC_CSR_DBW_8                   (2 << 13)                               // CS DataBus Width = 8 Bits
#define SMC_CSR_BAT_16_1                0                                               // Single 16-Bit device (when DBW is 16)
#define SMC_CSR_BAT_16_2                BIT12                                   // Dual 8-Bit devices (when DBW is 16)
#define SMC_CSR_TDF(_x_)                ((_x_ & 0xf) << 8)              // Intercycle Data Float Time
#define SMC_CSR_WSEN                    BIT7                                    // 1 = wait states are enabled
#define SMC_CSR_NWS(_x_)                ((_x_ & 0x7f) << 0)     // Wait States + 1

// *****************************************************************************
// SDRAM Memory Interface Unit
// *****************************************************************************
#define SDRC_MR                                 0x00            // Mode Register
#define SDRC_TR                                 0x04            // Refresh Timer Register
#define SDRC_CR                                 0x08            // Configuration Register
#define SDRC_SRR                                0x0C            // Self Refresh Register
#define SDRC_LPR                                0x10            // Low Power Register
#define SDRC_IER                                0x14            // Interrupt Enable Register
#define SDRC_IDR                                0x18            // Interrupt Disable Register
#define SDRC_IMR                                0x1C            // Interrupt Mask Register
#define SDRC_ISR                                0x20            // Interrupt Status Register

// Bit Defines
// SDRC_MR - Mode Register
#define SDRC_MR_DBW_16                  BIT4            // 1 = SDRAM is 16-bits wide, 0 = 32-bits
#define SDRC_MR_NORM                    (0 << 0)        // Normal Mode - All accesses to SDRAM are decoded normally
#define SDRC_MR_NOP                             (1 << 0)        // NOP Command is sent to SDRAM
#define SDRC_MR_PRE                             (2 << 0)        // Precharge All Command is sent to SDRAM
#define SDRC_MR_MRS                             (3 << 0)        // Mode Register Set Command is sent to SDRAM
#define SDRC_MR_REF                             (4 << 0)        // Refresh Command is sent to SDRAM

// SDRC_TR - Refresh Timer Register
#define SDRC_TR_COUNT(_x_)              ((_x_ & 0xfff) << 0)

// SDRC_CR - Configuration Register
#define SDRC_CR_TXSR(_x_)               ((_x_ & 0xf) << 27)     // CKE to ACT Time
#define SDRC_CR_TRAS(_x_)               ((_x_ & 0xf) << 23)     // ACT to PRE Time
#define SDRC_CR_TRCD(_x_)               ((_x_ & 0xf) << 19)     // RAS to CAS Time
#define SDRC_CR_TRP(_x_)                ((_x_ & 0xf) << 15)     // PRE to ACT Time
#define SDRC_CR_TRC(_x_)                ((_x_ & 0xf) << 11)     // REF to ACT Time
#define SDRC_CR_TWR(_x_)                ((_x_ & 0xf) << 7)      // Write Recovery Time
#define SDRC_CR_CAS_2                   (2 << 5)        // Cas Delay = 2, this is the only supported value
#define SDRC_CR_NB_2                    0                       // 2 Banks per device
#define SDRC_CR_NB_4                    BIT4            // 4 Banks per device
#define SDRC_CR_NR_11                   (0 << 2)        // Number of rows = 11
#define SDRC_CR_NR_12                   (1 << 2)        // Number of rows = 12
#define SDRC_CR_NR_13                   (2 << 2)        // Number of rows = 13
#define SDRC_CR_NC_8                    (0 << 0)        // Number of columns = 8
#define SDRC_CR_NC_9                    (1 << 0)        // Number of columns = 9
#define SDRC_CR_NC_10                   (2 << 0)        // Number of columns = 10
#define SDRC_CR_NC_11                   (3 << 0)        // Number of columns = 11

// SDRC_SRR - Self Refresh Register
#define SDRC_SRR_SRCB                   BIT0            // 1 = Enter Self Refresh

// SDRC_LPR - Low Power Register
#define SDRC_LPR_LPCB                   BIT0            // 1 = De-assert CKE between accesses

// SDRC_IER - Interrupt Enable Register
// SDRC_IDR - Interrupt Disable Register
// SDRC_ISR - Interrupt Mask Register
// SDRC_IMR - Interrupt Mask Register
#define SDRC_INT_RES                    BIT0            // Refresh Error Status

#endif