Guten Tag, hat hier jemand Erfahrung mit dem TMS320LF2407 und dem CCStudio? Ich versuche mich in diesen Controller einzuarbeiten und bin über alle Informationen, Hinweise, Beispielcodes in C, sehr dankbar. Freue mich auf eure Beiträge Friz
Arbeite mit der TMS320LF24xxx Familie, welche Art von Informationen brauchst Du denn ??? Beispielcodes für was, welche Anwendung??? Genaugenommen ist der TMS320LF24xxx eine Kombination aus Microcontroller mit DSP Eigenschaften.
Hallo Dirk, würde dich gerne folgendes fragen: Code Composer: Ich arbeite mit dem CC4.12 und habe dort das entsprechende GEL File installiert um beim Debuggen Registerinhalte im Blick zu haben, nun zeigt mir aber das Watchwindow föllig unerwartete Registerwerte an. Z.B. Nachdem man im Programm REGISTERx= 0x04000; geschrieben hat steht im Watch Window REGISTERx= 0x52340 usw. Was mach ich falsch? Beispielcode ADC: Deshalb würde ich mich über Beispielcode freuen, speziell solchen der den ADC mit der höchst möglichen Samplingrate konfiguriert um ein Signal am ADC einzulesen und am DAC wider Ausgeben zu können(Grundfunktionalität testen). C oder Assembler?: Sind C Kenntnisse für diesen Controller ausreichend oder lässt sich das volle Leistungspotential nur mit Assembler erschließen? Vielen Dank für deine Schnelle Antwort! freundliche Grüße Friz
schick mir mal dein GEL-File. Kann das hier nicht nachvollziehen. Was passiert, wenn Du in REGISTERx = 0x00000 schreibst, bzw. 0x0FFFF Was zeigt Dir dann Dein Watch Fenster?
Hallo Dirk, der Controller befindet sich übrigens in einem EVM von Spectrum Digital und ist mit einem XDS510PP an dem PC angebunden. Nach dem Schreiben von 0xffff zeigt das WW zB 0x5400 an. Im Anhang ist das GEL File
Ich habe auch ein Board von Spectrum Digital, allerdings für den TMS320F2812. Das GEL-File fehlt aber. Bleibt der Wert im Watch Fenster konstant auf 0x5400 wenn du mehrmals 0xFFFF schreibst ??
Sorry, hab vergessen das GEl File hinzuzufügen. Beispielsweise möchte ich möchte ich das Register *ADCTRL2 = 0x4504; initialisieren und danach mit *ADCTRL2 |=0x4000; das reset Bit schreiben. Doch auch nach mehrmaligem Versuch Steht im WW ADCTRL2 = 0x0504; Oder hab ich da etwas Grundsätzliches falsch verstanden? Manchmal muss man auch den CC neu starten und das DSP Board ein- ausschalten bevor ein Programm korrekt ausgeführt wird. Sind dir vielleicht ähnliche Sachen aufgefallen oder liegt es einfach nur an falscher Bedienung des CC?
Friz wrote: > Sorry, > hab vergessen das GEl File hinzuzufügen. > Beispielsweise möchte ich möchte ich das Register *ADCTRL2 = 0x4504; > initialisieren und danach mit *ADCTRL2 |=0x4000; das reset Bit > schreiben. > Doch auch nach mehrmaligem Versuch Steht im WW ADCTRL2 = 0x0504; > Oder hab ich da etwas Grundsätzliches falsch verstanden? > Manchmal muss man auch den CC neu starten und das DSP Board ein- > ausschalten bevor ein Programm korrekt ausgeführt wird. > Sind dir vielleicht ähnliche Sachen aufgefallen oder liegt es einfach > nur an falscher Bedienung des CC? Hallo Friz, Schau Dir die Verwendung der Bits von ADCCTRL2 noch mal genau an. "ADCTRL2 = 0x4504" Dies ist der Wert, den Du aus dem Register liesst. "ADCTRL2 |=0x4000" Du machst eine oder Verknüpfung, dabei soll Bit 14 gesetzt werden Bit 14 ist aber "calibration mode" ???? Um die conversation zu starten mußte Du 0x2000 verwenden. Außerdem solltest Du bei diesen Registern das "ReadModifyWrite" beachten. Im Register sind auch Statusbits, die sich nicht einfach beeinflussen lassen durch setzen und rücksetzen. Schau Dir mal das Beispiel im PDF ab Seite 27 an. Gruß Dirk
Hallo Dirk, vielen Dank für das PDF, genau so ein Beispiel habe ich gesucht und es ist beruhigend zu hören dass andere Menschen ähnliche Probleme mit diesem Controller haben. Was mich nur ein wenig verwirrt, ist dass sich deine Beschreibung des ADCTR2 Registers nicht mit denen der mir vorliegenden Datenblätter decken. Auf Seite 116 des beiliegenden Datenblatts ist Bit 14 des ADCTRL2 Registers RESETSEQ1? Wo gibt es den nun die richtigen Daten für den Controller TMS320LF2407PGEA ? Wichtig war auf jedem Fall die Information dass man de Controller vor dem Programm Download reseten muss. Viele Grüße Friz
Hallo Friz, das Original PDF (Shortform !?!?!) sagt ja nichts zur genaueren Beschreibung der Bits aus. Schau nochmal in das angehängte PDF auf Seite 4, "start a conversion" Denk auch immer dran, die Erratasheets vom Hersteller zu lesen. Das Original Datenblatt find ich sowieso total konfus. Gruß Dirk
Hallo Dirk, die Beispiel Programme haben mir sehr geholfen. Da ich mit dem Controller ein Filter realisieren möchte suche ich noch nach Beispielcode in dem beschrieben ist wie man genügend Speicher für einen Buffer reserviert und effizient Filterroutinen implementiert.(typische DSP Aufgabe: Audiosignal ->DSP-> bearbeitetes Audiosignal ) Könntest du mir einen Tip geben wo man da am besten sucht? Vielen Dank für Deine Hilfe Friz
Hallo Dirk, hab versucht eine ADC mittels GPT 1 zu triggern um eine Feste Samplingrate zu generieren. Dabei wird GPT 1 mit einem Comparewert initialisiert und Maxcon auf 0 gesetzt. Nun soll ein Compare Ereignis eintreten,das die ADC Sequenz triggert, um danach in einer ISR den Wert aus RESULT0 einzulesen. Leider ist die sich einstellende Samplingfrequenz nicht gleich der Frequenz der Timerinterrupts. Beispiel: CPU Frequenz 30MHZ Timer = 0x02EE; soll den ADC alle 25µs triggern und damit eine Samplingfrequenz von ungefähr 40kHz erzeugen. Leider ist die resultierende Frequenz um Dekaden kleiner. Beim Debuggen im Singelstepmode wird zwar beim Erreichen des Comparewerts das INT Flag (Bit9) des ADCTRL2 gesetzt, doch leider verzweigt das Programm dann nicht in die ISR, sonder zählt das AUTO_SEQ_SR weiter hoch. Der ADC arbeitet im Interrupt Mode1. Was mache ich falsch?
Arbeite mit C und dem CCS. Hab ein paar Filter Bibliotheken von Ti installiert. Die Funktionen sind in Assembler geschrieben, bieten aber eine Schnittstelle zu C Programmen. Dort wird in einer Timer ISR der ADC „manuell“ getriggert, vielleicht kann man das kopieren.
Friz wrote: > Arbeite mit C und dem CCS. > Hab ein paar Filter Bibliotheken von Ti installiert. > Die Funktionen sind in Assembler geschrieben, bieten aber eine > Schnittstelle zu C Programmen. > Dort wird in einer Timer ISR der ADC „manuell“ getriggert, vielleicht > kann man das kopieren. Da liegst Du richtig, er samplet alle Kanäle durch. Wenn Du es über den Timereinterrupt machst (polling bzw. triggern) dann kannst Du hier den letzte Wert auslesen, neues sampling triggern und sofort eine evtl. Vorverarbeitung und Übergabe in einem definiertem Zeitfenster auslösen. 40Khz dürften kein Problem sein. In Assembler hat man natürlich ne gute zeitliche Kontrolle über den Ablauf. Folgender Vorteil würde sich ebenfalls ergeben. Solltest Du mal versch. Kanäle durcheinander abscannen wollen, wäre die Interruptroutine die flexibelste. Man muß halt immer beachten, daß es hier einen AD mit gemultiplexten Eingängen gibt. Also alle nacheinander. Du solltest Dir mal ausrechnen lassen, wieviel Zeit Dir abzgl. der AD-Timerroutine zwischen den samplings übrig bleibt. Ich kenne ja den restlichen Zeitbedarf deiner Routine nicht. Gruß Dirk
Beim Versuch einen Simplen FIR Filter in C auf einem fixpoint Rechner zu programmieren habe ich das Problem dass nach der sequentiellen Multiplikation des Eingangssignal mit dem Filterkernel das Resultat Null ist. Ist die Handhabung der beiden signed ints richtig? Muss man Spezialitäten des Compilers beachten? @ Dirk wie kann man sich im CC die Zeit bzw Takte für mehrere Befehle ausrechnen lassen? Freue mich auf Tipps und Tricks
Hat hier jemand ein Beispiel für eine einfache, mit C aufrufbare Assemblerfunktion für den TMS320LF2407? Kann man aus einem 16Bit unsigned Wert durch folgende Manipulation: signed int x; unsigned y; x=(y^0x8000); in ein signed integer umwandel oder ist noch ein cast erforderlich? x=(unsigned int)(y^0x8000); vielen Dank!
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.