Forum: Mikrocontroller und Digitale Elektronik NDS (Lite) I/O Pins nutzen (GBA-Port/Slot-2)


von Florian (Gast)


Lesenswert?

Hallo

Ich habe mir PAlib und devkitPro installiert und auch schon mein erstes 
Hello World fertig. Ich würde aber gerne ein paar I/O Pins nutzen, um so 
externe Hardware zu steuern. Der GBA Port ist ja eigentlich ein 
Datenbus, kann man da irgendwie was machen? Ich finde leider keinen 
Ansatz, wie ich den mit o.g. Tools ansteuern kann.
http://nocash.emubase.de/gbatek.htm#auxgbagamepakbus
http://www.palib.info/wiki_ger/doku.php?id=homepage

von someone (Gast)


Lesenswert?

Es ist ein Datenbus. Einfach auf den entsprechende Speicheradresse 
lesend oder schreibend zugreifen. Tipp: Klopp PALib in die Tonne. Das 
ist nett um sich was flottes zusammenzuklauben aber bei allem anderen 
kommt es sich mit Bibliotheken zu schnell in die Quere. installiert u.A. 
auch gerne mal eine alte Version der Toolchain über eine bestehende 
Neuere...

Auf No$Cash findest du das komplette Timing für den Slot.

von Florian (Gast)


Lesenswert?

someone schrieb:
> Es ist ein Datenbus. Einfach auf den entsprechende Speicheradresse
> lesend oder schreibend zugreifen.

So weit dachte ich es mir auch. Die Adressen sind auch klar. Aber ich 
finde nicht, wie ich die beschreibe.
08000000h  GBA Slot ROM (max. 32MB)
0A000000h  GBA Slot RAM (max. 64KB)

someone schrieb:
> Tipp: Klopp PALib in die Tonne.

Gibt's einen Alternativvorschlag?

Danke.

von someone (Gast)


Lesenswert?

Jo. Die Toolchain direkt. Such mal nach DevKitPro, da ist die Toolchain 
für den ARM mit dabei und dort findest du auch die libs und header für 
den NDS verlinkt.

Naja, wenn du z.B. einfach in C die Addresse direkt beschreibst aka
1
*(volatile unsigned short *)0x08000000 = 0x1234 ;

Wirst du halt direkt den Datanbus ansprechen. Der wird zuerst die 
Adresse 0 und dann die Daten (0x1234) mit jeweils passenden 
Steuersignalen auflegen. Die Adresse sicherst und dekodierst du, die 
Daten greifst du anschliessend ab und speicherst bzw verwendest du 
direkt.

(Vorsicht: Die ROM Adresse ist keine Byte- sondern Wortadresse)

von Florian (Gast)


Lesenswert?

Leider habe ich noch keinen Erfolg.
Mit dem Scope kann ich leider keinerlei Signaländerungen am Port messen, 
wenn ich das folgende Programm laufen lasse. Auch nicht an der /WR 
Leitung
1
#include <PA9.h>
2
#include <stdio.h>
3
#include <nds.h>
4
5
int main()
6
{
7
// Infinite loop to keep the program running
8
while (1)
9
{
10
  //*(volatile unsigned short *)0x08000000 = 0x0000 ;
11
  //*SRAM = (uint8)0xff;
12
  *(volatile unsigned short *)0x0AFFFFFF = 0xFFFF ;
13
  swiDelay(610000);
14
  //*SRAM = (uint8)0x00;
15
  *(volatile unsigned short *)0x0AFFFFFF = 0x0000 ;
16
  swiDelay(610000);
17
}
18
}

von someone (Gast)


Lesenswert?

Versuch mal
1
  sysSetCartOwner(BUS_OWNER_ARM9);

Schau dir mal die Sources zu libnds/rumble an. Da hängen einige Arten 
direkt an den Pins.

http://devkitpro.svn.sourceforge.net/viewvc/devkitpro/trunk/libnds/source/arm9/rumble.c?revision=4529&view=markup

von Florian (Gast)


Lesenswert?

someone schrieb:
> Versuch mal  sysSetCartOwner(BUS_OWNER_ARM9);

Danke, das hilft. Auch wenn ich nirgends eine aussagekräftige Doku dazu 
finde :-(
Mal sehen, wie ich jetzt weiterkomme. Ich werde dann berichten.

von someone (Gast)


Lesenswert?

Die Doku findest du bei EXMEMCNT.

Sind halt alles reverse-engeneered Infos von Hobbyisten. Da ist viel 
unvollständig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.