Gast
#147565
Hallo!
Ich teste gerade einen ARM7-Prozessor.
Prompt stehe ich vor meinem ersten Problem:
Ich möchte ein Grafikdisplay ansteuern, von dem ich den 8-Bit Datenport
auf z.B. P1.16 bis P1.23 gelegt habe .
Kann ich diese 8 Bits mit einem einzelnen Befehl setzen?
Der gesamte Port1 wird nornmalerweise über folgendes Register
beschrieben:
#define IOPIN1 (*((volatile unsigned long *) 0xE0028010L))
Folgendes habe ich nun gestestet:
#define IOPIN1A (*((volatile unsigned char *) 0xE0028010L))
#define IOPIN1B (*((volatile unsigned char *) 0xE0028011L))
#define IOPIN1C (*((volatile unsigned char *) 0xE0028012L))
#define IOPIN1D (*((volatile unsigned char *) 0xE0028013L))
while(1)
{
IOPIN1C = i++;
wait (); /* call wait function */
}
... wie erwartet zählt auf dem Eva-Board der Port mit den LEDs hoch.
(Die LEDs hängen an P1.16-P1.23)
Aber bei:
while(1)
{
IOPIN1A = i++;
wait (); /* call wait function */
}
Zählt der Port mit den LEDs ebenfalls hoch, was er nicht machen dürfte.
Hier sollten nur die unteren acht Bits klappern.
Das gleich auch bei IOPIN1D und IOPIN1B
Was ist die Erklärung dafür?
Kann ich das Problem anders (elegant) lösen, oder muss ich die
Read-Modyfy-Write-Lösung mit schieben usw. machen?
Gruss,
Holger