Hallo,
ich bin gerade dabei den SMC (Static Memory Controller) für den AVR32
einzubinden, der bereits fertig im ASF von Atmel angeboten wird.
Anhand des nachfolgenden Code Ausschnitts aus der header-Datei, wird der
SMC für jeden externen Chip, bzw. dessen Chip_Select configuriert:
1 | #ifndef SMC_COMPONENT_CS0
|
2 | #ifndef SMC_COMPONENT_CS1
|
3 | #ifndef SMC_COMPONENT_CS2
|
4 | #ifndef SMC_COMPONENT_CS3
|
5 | #ifndef SMC_COMPONENT_CS4
|
6 | #ifndef SMC_COMPONENT_CS5
|
7 |
|
8 | #warning SMC default configuration is missing.
|
9 | //! SMC Peripheral Memory Size in log2(Bytes)
|
10 | #define EXT_SM_SIZE 17
|
11 |
|
12 | //! SMC Data Bus Width
|
13 | #define SMC_DBW 16
|
14 |
|
15 | //! Whether 8-bit SM chips are connected on the SMC
|
16 | #define SMC_8_BIT_CHIPS false
|
17 |
|
18 | // NWE setup length = (128* NWE_SETUP[5] + NWE_SETUP[4:0])
|
19 | //! Unit: ns.
|
20 | #define NWE_SETUP 0
|
21 |
|
22 | // NCS setup length = (128* NCS_WR_SETUP[5] + NCS_WR_SETUP[4:0])
|
23 | //! Unit: ns.
|
24 | #define NCS_WR_SETUP 0
|
25 |
|
26 | // .....
|
27 | // ..... viele, viele Einstellungen
|
28 | // .....
|
29 |
|
30 | #endif
|
31 | #endif
|
32 | #endif
|
33 | #endif
|
34 | #endif
|
35 | #endif
|
Wie im nachfolgenden Ausschnitt werden diese Einstellungen dann genutzt,
um den entsprechenden Code auszuführen.
1 | //! Whether to use the NCS0 pin
|
2 | #ifdef SMC_USE_NCS0
|
3 | #include SMC_COMPONENT_CS0 // <---------- zu dem hier habe ich meine Frage
|
4 |
|
5 | //...
|
6 | //... Einstellung der Register
|
7 | //...
|
8 |
|
9 | #undef EXT_SM_SIZE
|
10 | #undef SMC_DBW
|
11 | #undef SMC_8_BIT_CHIPS
|
12 | #undef NWE_SETUP
|
13 | #undef NCS_WR_SETUP
|
14 | #undef NRD_SETUP
|
15 | #undef NCS_RD_SETUP
|
16 | #undef NCS_WR_PULSE
|
17 | #undef NWE_PULSE
|
18 | #undef NCS_RD_PULSE
|
19 | #undef NRD_PULSE
|
20 | #undef NCS_WR_HOLD
|
21 | #undef NWE_HOLD
|
22 | #undef NWE_CYCLE
|
23 | #undef NCS_RD_HOLD
|
24 | #undef NRD_CYCLE
|
25 | #undef TDF_CYCLES
|
26 | #undef TDF_OPTIM
|
27 | #undef PAGE_MODE
|
28 | #undef PAGE_SIZE
|
29 | #undef NCS_CONTROLLED_READ
|
30 | #undef NCS_CONTROLLED_WRITE
|
31 | #undef NWAIT_MODE
|
32 | #endif
|
33 |
|
34 |
|
35 | //! Whether to use the NCS1 pin
|
36 | #ifdef SMC_USE_NCS1
|
37 | #include SMC_COMPONENT_CS1 // <---------- zu dem hier habe ich meine Frage
|
38 |
|
39 | //...
|
40 | //... das ganze noch mal für SMC_COMPONENT_CS1, SMC_COMPONENT_CS2, SMC_COMPONENT_CS3, SMC_COMPONENT_CS4 und SMC_COMPONENT_CS5
|
41 | //...
|
Compiliere ich das ganze dann, erhalte ich die Fehlermeldung:
1 | Error: #include expects "FILENAME" or <FILENAME>
|
Die Fehlermeldung kommt natürlich zu Recht, da die Zeile
1 | #include SMC_COMPONENT_CS1
|
das Einbinden einer Header-Datei verlangt. Lösche ich diese Zeile, läuft
der Speicher wie gewollt.
Was ich hier nur nicht verstehe ist, wie das ganze eigentlich gedacht
gewesen sein soll. Die vielen "#undef"-Befehle deuten ja schon darauf
hin, dass die definierten Werte immer wieder neu eingebunden werden
sollen.
Aber ich kann doch so nicht die ganzen #define-Zeilen (von der
Header-Datei) per #include einbinden. Oder?