Hallo zusammen, ich bin gerade dabei die Möglichkeiten der Digitalen Eingänge an dem Evaluation Board von Spectrum Digital mit dem dem TI-Prozessor TMS320F2812 zu erforschen. Leider kann ich kaum Dokumentationsmaterial finden. Auch nicht auf der "übersichtlichen" TI-Homepage. Kann mir da jemand weiterhelfen? Danke Euch...
Hallo Johannes, ich bin auch nicht wirklich glücklich geworden mit der TI homepage. Aber schau Dir doch mal das Beispiel "gpio_toggle" an. Damit kann man etwas anfangen. Du musst Dir nur das Projekt File "gpio_toggle.ptj" laden. Und Load Programm ausführen und anschließend auf Run drücken. Dann sollten ein paar ports getoggelt werden. Michael
Hallo Danke für den Hinweis. Leider kann ich das Beispiel nicht finden. Ist das auf der CD auf der TI-Homepage oder wo finde ich das? Danke schonmal, Johannes
Hallo Johannes, es sollte eigentlich auf einer der mitgelieferten CD's drauf sein. Bzw. wenn Du CCS komplett installiert hast, dann sollte irgendow ein Ordner tidcs sein: C:\tidcs\c28\dsp281x\v100\DSP281x_examples\gpio_toggle Dort solltes Du was finden... Ich glaube der Pfad ist auch vollständig auf einer CD drauf: D:\tidcs\c28\dsp281x\v100\DSP281x_examples\gpio_toggle Ich hoffe Du kommst weiter, wenn nicht dann schreib nochmal.... Michael
Ja Danke, habs quasi gerade eben parallel mit Deiner Antwort gefunden. Kannst Du mir noch sagen, wo man noch ein paar kleine Erklärungen (Außer den Kommentaren im Quellcode) finden kann? Wie zum Beispiel kann man sich das Example 1 erklären: while(1) { GpioDataRegs.GPADAT.all =0xAAAA; GpioDataRegs.GPBDAT.all =0xAAAA; GpioDataRegs.GPDDAT.all =0x0022; GpioDataRegs.GPEDAT.all =0x0002; GpioDataRegs.GPFDAT.all =0xAAAA; GpioDataRegs.GPGDAT.all =0x0020; delay_loop(); GpioDataRegs.GPADAT.all =0x5555; GpioDataRegs.GPBDAT.all =0x5555; GpioDataRegs.GPDDAT.all =0x0041; // Four I/Os only GpioDataRegs.GPEDAT.all =0x0005; // ThreeI/Os only GpioDataRegs.GPFDAT.all =0x5555; GpioDataRegs.GPGDAT.all =0x0010; // Two I/Os only delay_loop(); } Danke für Hilfe, Johannes
Mit einer Erklärung finden wird schwer.... Das ganze beruht auf einer Header Library. Diese beinhaltet Strukturen und Unions.Mit diesen kann dann ganz elegant über Zeiger auf alle Ports bziehungsweise auf einzelne Bits zugriffen werden. Übrigens das ist die schnellste Zugriffsweise überhaupt. Michael
Ja, das dachte ich mir schon, aber von welchem Datentyp sind die einzelnen Variablen in diesen Strukturen bzw. Unions? Und vor allem: was soll passieren, wenn ich so pioDataRegs.GPADAT.all =0xAAAA; zuweise? Was bedeutet der Wert 0xAAAA? Dachte Digitale Eingänge kann man nur auf 1 oder 0 setzen.... ???
T'schuldige Johannes für die Frage. Hast Du schon mal uC programmiert? Aber ich erkläre es natürlich gern: GpioDataRegs.GPADAT.all GpioDataRegs ist eine Struktur die alle General Purpose I/O's verwaltet. Innerhalb davon findest Du wieder eine Struktur die dann die Pins des Ports A (GP A DAT) beinhaltet. all bedeutet das Du nun alle 16 Pins des Ports auf einmal ansprichst. Du kannst auch schreiben: GpioDataRegs.GPADAT.bit.GPIOA0 = 1; Damit tust Du in der Tat nur den Pin 0 des Ports A auf eins setzen... Ich hoffe damit kommst Du weiter, Michael PS: Schau Dir doch mal das File DSP281x_Gpio.h dazu an.
Hallo Danke erstmal für die Antwort. Ich habe zwar schonmal µC programmiert, ist aber schon lange her. Leider hast Du mich falsch verstanden. Die Sache mit der Struktur ist mir klar. und das mit ".all" Alle 16 Pins angesprochen werden, auch. Meine Frage zielte eher auf die Zuweisung. Ich würde verstehen, wenn ich (angenommen ich wollte alle 16 Pins auf eins setzen) folgendes implementiere: GpioDataRegs.GPADAT.all = 1; In diesem Bsp wird aber nicht 1 sondern die Hex-Zahl 0xAAAA zugewiesen. Aus welchem Grund? Eine zweite Frage wäre: Ich habe nun eine Dokumentation von TI gefunden, die etwas über GP-IO's erklärt: spru078c.pdf Leider fehlt mir noch eine "Art" Schnittstelle: Ich kann sowas wie einen Port A, B, ... (bzw. einzelne Pins auf 1 oder 0 setzen) Auf meinem Board (TMS320F2812 Board von Spectrum Digital) werden die digitalen Ein-Ausgabe-Ports aber mit Port4, Port7 und Port8 angegeben. Wie müßte eine Programmzeile aussehen, wenn ich z.B. Pin 4 von Port8 auf 1 setzen möchte? @Michael: Puh, gar nicht so einfach zu erklären, was man nicht versteht. Aber ich hoffe, ich konnte es deutlich machen. Würde mich ein weiteres Mal sehr freuen, wenn Du mir nochmal schnell helfen könntest :)
Oh Alter ich dachte Du hast das mit den Strukturen verstanden.... Also Crashcourse: struct GPAMUX_BITS { // bits description Uint16 PWM1_GPIOA0:1; // 0 Belegt ein Bit im Speicher/Register Uint16 PWM2_GPIOA1:1; // 1 Belegt ein Bit im Speicher/Register Uint16 PWM3_GPIOA2:1; // 2 Belegt ein Bit im Speicher/Register Uint16 PWM4_GPIOA3:1; // 3 Uint16 PWM5_GPIOA4:1; // 4 Uint16 PWM6_GPIOA5:1; // 5 Uint16 T1PWM_GPIOA6:1; // 6 Uint16 T2PWM_GPIOA7:1; // 7 Uint16 CAP1Q1_GPIOA8:1; // 8 Uint16 CAP2Q2_GPIOA9:1; // 9 Uint16 CAP3QI1_GPIOA10:1; // 10 Uint16 TDIRA_GPIOA11:1; // 11 Uint16 TCLKINA_GPIOA12:1; // 12 Uint16 C1TRIP_GPIOA13:1; // 13 Uint16 C2TRIP_GPIOA14:1; // 14 Uint16 C3TRIP_GPIOA15:1; // 15 }; union GPAMUX_REG { Uint16 all; struct GPAMUX_BITS bit; }; Jetzt kannst Du über diese union auf die Register folgendemaßen zugreifen: 1.) GPAMUX_REG.all = 0xAAAA; // Da "all" eine Uint16 Variable ist. 2.) GPAMUX_REG.GPAMUX_BITS.PWM1_GPIOA0 = 1; // Da es ein Bit im Register/Speicher anspricht. Konkret zu Deiner Frage ( solltest Du jetzt selber lösen können), aber sicherheitshalber: GpioDataRegs.GPBDAT.bit.GPIOB4 = 1; // Pin4 von PortB Ach jetzt verstehe ich Dein Problem ;-)....Ahhhh.... Port8 ja welcher Port vom F2812. Da mußt Du in die TechRef_A_ schauen und Dir das raussuchen....Wie genau das Dokument heißt muss ich morgen mal gucken. Hab' ich gerade nicht zur Hand. Michael
Ja, genau. DAS ist mein Problem. Meinst Du die Datei: 2812_ezdsp_TechRef_B.pdf? (Ich habe Revision B) Da konnte ich nichts finden, hab die schon den ganzen Tag vor mir. Aber wenn Du mir dieses Problem noch erklären oder lösen könntest, bin ich ein großes Stück weiter.... Danke, Danke, Danke!!!
Ja jetzt ja, habs jetzt hin bekommen! Wenn man beide Dateien 2812_ezdsp_Schem_B.pdf und 2812_ezdsp_TechRef_B.pdf anschaut, dann wird es klar :) Habe jetzt - bis auf Weiteres - keine Fragen mehr! Danke nochmal für die großartige Unterstützung :)
Freut mich das Du weitergekommen bist. Nur noch so, mit dem Appnote 2812_ezdsp_Schem_A.pdf findest Du die Pinbelegungen am leichtesten.... Michael
- Bis auf Weiteres - hatte ich in meinem letzten Beitrag geschrieben :)
Hat schonmal jemand versucht, das Beispiel gpio_toggle in ein
bestehendes Projekt zu integrieren? Bei mir klappt das eigentlich nicht
:(
aktuelle Fehlermeldung:
>> error: symbol referencing errors - './Debug/volume.out' not
built
darüber werden bestimmt 50 Symbole angezeigt, die nicht erkannt
wurden.
Kann mir da jemand weiterhelfen, oder ist es nicht empfehlenswert,
dieses Bsp-Programm in ein bestehendes Projekt zu integrieren?
Grüße, Johannes
Also ich weiß nicht was Du mit dem Beispiel in einem bestehenden Projekt willst. Das Beispiel ist doch sehr primitiv. Besser fände ich die Frage, kann mann aus dem Beispiel ein neues Projekt erzeugen? Man könnte das ganze Gerümpel rausschmeisen und man hat ein schönes "leeres" Projekt mit dem man sofort loslegen kann. Michael >>- Bis auf Weiteres - hatte ich in meinem letzten Beitrag geschrieben >>:) War doch noch ein guter Tip mit dem 2812_ezdsp_Schem_A.pdf. Ich hoffe Du hast in noch "rechtzeitig" gelesen....
Naja, ok dann will ich es mal anders formulieren: Ich habe ein Projekt, da läuft schon ziemlich viel... und in dieses Projekt möchte ich nun auch noch die Möglichkeit einfügen über die digitale I/O-Schnittstelle Daten "rein" bzw. "raus" zu befördern (einlesen / auslesen). Das war eigentlich alles. Ich habe eben vresucht Teile aus dem Beispiel zu übernehmen. Aber das geht so nicht. Hier stehe ich und komme nicht weiter. Gruß, Johannes
.... Du mußt doch nur zwei Register einstellen. GPxMUX & GPxDIR und anschließend kannst Du das Register GPIOx ganz normal verwenden... Michael
Hallo ich gerade das probleme mit dem einlesen und auslesen der Daten. ich habe das Programm bis da wo ihr seid geschrieben und jetzt weiss ich nicht wie ich den code zum einlesen bzw. auslesen der Daten weiter schreiben soll. Könntet ihr mir vielleicht helfen ? das wäre sehr nett. Gruß, Marcus
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.