Hi,
hab grad ein etwas merkwürdiges Problem mit dem at91sam9260 controller.
Die beiden Adresslines A0 und A1 verändern ihren Level (high / low) beim
Anlegen einer entsprechenden Adresse nicht - im Gegensatz zu allen
anderen Adresslinien.
1 | #define WRITE_DATA8(dataAddress, data) \
|
2 | {(*((volatile unsigned char *) dataAddress)) = (unsigned char)
|
3 | data;}
|
4 |
|
5 | void SMC_Init(void)
|
6 | {
|
7 |
|
8 | AT91C_BASE_SMC->SMC_SETUP2 = 0x00000001;
|
9 | AT91C_BASE_SMC->SMC_PULSE2 = 0x07070703;
|
10 | AT91C_BASE_SMC->SMC_CYCLE2 = 0x00070007;
|
11 | AT91C_BASE_SMC->SMC_CTRL2 = (AT91C_SMC_READMODE
|
12 | | AT91C_SMC_WRITEMODE
|
13 | | AT91C_SMC_NWAITM_NWAIT_DISABLE
|
14 | | ((0x1 << 16) & AT91C_SMC_TDF));
|
15 |
|
16 | AT91C_BASE_SMC->SMC_CTRL2 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
|
17 | }
|
18 |
|
19 |
|
20 | int main(void)
|
21 | {
|
22 |
|
23 | SMC_Init();
|
24 |
|
25 | //hier sind beide Adresslinies auf low level -> solange bis zum ersten
|
26 | //mal auf den bus zugegriffen wird
|
27 |
|
28 | WRITE_DATA8(0x30000000 + 0x00, 0x45);
|
29 | WRITE_DATA8(0x30000000 + 0xFF, 0x45);
|
30 | WRITE_DATA8(0x30000000 + 0x00, 0x45);
|
31 | //-> hier verändern sich die beiden Adresslinien nicht mehr - bleiben
|
32 | //die ganze zeit auf high
|
33 |
|
34 |
|
35 | while(1)
|
36 | {
|
37 | WRITE_DATA8(0x30000000 + 0x00, 0x45);
|
38 | //-> diese while-schleife führt zu einem togglen von A0 und A1
|
39 | }
|
40 | }
|
Vielleicht kennt einer dieses Phänomen bei den SAM controllern. Im
Datenblatt hat mich leider nichts angesprochen...
Gruß
Bernd