Register ansprechen

Gast #2348480
Lesenswert?
• ▲
▼
Moin!
Ich habe ein ziemlich doofes Problem.
Ich habe ein simples Programm geschrieben, in dem ich LEDs leuten lasse 
oder ausschalte. Also bin noch totaler Neuling.
Jetzt setze ich mich gerade damit auseinander, wie eigentlich die 
Register und so in meinem Microblaze angeordnet sind und so.
Also:

Mein "LED_8BIT_REGISTER":

Baseaddress: 0x81440000
Highadress:  0x8144FFFF
Channel 1 offset: 0x0
Tri 1 offset: 0x4
Channel 2 offset: 0x8
Tri 2 offset 0xC

Dann habe ich gelesen das das General Purpose Register 32x32bit groß 
sein soll.

Also ich denke die offsets sind immer in Byte angegeben (sonst passst 
das ja nich).

Dann wunder ich mich aber das das Register 16Byte groß sein müsste
(0000-FFFF)
Wenn das general Purpose Register nur 32 x 32 BIT groß ist, oder hat das 
mit den Adressen nix zu tun? Was sind dann aber die 32x32bit?

Hoffe mir kann jemand helfen!

Grüße Jan
Gast #2348504
Lesenswert?
• ▲
▼
Und was sagt mir das jetzt? 32 x 32Bit ist doch das gleiche wie 32 
Register á 32 bit. Dadurch komme ich trotzdem nich mal ansatzweise auf 
16 byte pro register. 32 bit sind ja gerade mal 4 Byte. Und ich glaub 
nicht das man 4 von den 32 registern vollschreibt um 8 LEDs leuchten zu 
lassen... Oder bring ich da ganz was durcheinander???
Gast #2348544
Lesenswert?
• ▲
▼
Das heißt ich hab nur Daten und Adressen durcheinander geschmissen? Hat 
jedes dieser Bits in dem 32x32bit register eine Adresse?

Aber wie kann ich mir dann diese Anweisung erklären:

XGpio_WriteReg(XPAR_LEDS_8BIT_BASEADDR,XGPIO_TRI_OFFSET,0x0000);

Also WriteReg is ja selbsterklärend,
XPAR_LEDS_8BIT_BASEADDR (0x81440000) is halt die Base adresse von diesem 
krams
XGPIO_TRI_OFFSET (0x4) lässt mich an die adresse der Tri_state treiber 
springen (Base + 0x4) = 0x81440004, richtig?
Aber wo wird das 0x0000 (0 = Ausgang, 1 = Eingang) dann hingeschrieben? 
So wie ich das sehe, hat man ja 4 Bit reserviert weil Tri 1 ja von 
0x81440004 bis 0x81440008 geht, oder? Werden an diese 4 stellen dann die 
4 Nullen geschrieben?
Die Höchste Adresse die ich dann sinnvoll beschreiben könnte wäre dann 
ja 0x8144000F, oder? Und die restlichen Adressen von 0x8144000F bis zur 
Highadresse 0x8144FFFF werden in jeden Fall einfach weggeschmissen?
Also im Klartext: Von meinen 32x32bit werden 4 bit genutzt, und 12 bit 
weggeworfen?
Hoffe ich hab meine Frage nich zu wirr beschrieben...
Gast #2348677
Lesenswert?
• ▲
▼
Aufbau Microblaze architecture schrieb:
> XPAR_LEDS_8BIT_BASEADDR (0x81440000) is halt die Base adresse von diesem
> krams
ja

> XGPIO_TRI_OFFSET (0x4) lässt mich an die adresse der Tri_state treiber
> springen (Base + 0x4) = 0x81440004, richtig?
springen = kommen

> Aber wo wird das 0x0000 (0 = Ausgang, 1 = Eingang) dann hingeschrieben?
das sagt dir das Datenblatt

> So wie ich das sehe, hat man ja 4 Bit reserviert weil Tri 1 ja von
> 0x81440004 bis 0x81440008 geht, oder? Werden an diese 4 stellen dann die
bis 0x81440007
> 4 Nullen geschrieben?
unwahrscheinlich, eher an nur eine der Adressen

> Die Höchste Adresse die ich dann sinnvoll beschreiben könnte wäre dann
> ja 0x8144000F, oder? Und die restlichen Adressen von 0x8144000F bis zur
> Highadresse 0x8144FFFF werden in jeden Fall einfach weggeschmissen?
ja sieht so aus

> Also im Klartext: Von meinen 32x32bit werden 4 bit genutzt, und 12 bit
nicht 32x32bit sondern nur 32bit Adresse

> weggeworfen?
jein die ersten 16 bit sind auch relevant

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren