www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP µC - XINTF - TMS320F28335 Anbindung


Autor: Tim R. (mugen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seit einigen Monaten habe ich einen asynchronen SRAM über den parallelen 
Bus XINTF angebunden und dieser funktioniert einwandfrei. Über eine 
weitere Zone wollte ich nun ein Ethernet Modul ansteuern. Allerdings 
muss ich über bestimmte Adressen Daten lesen oder schreiben und ich weiß 
absolut nicht wie ich sowas hinbekommen soll. Im Linker könnte ich die 
Adressen hübsch aufteilen, löst aber letztendlich nicht mein Problem.
Gibt es eine Möglichkeit in C++ direkt Adressen anzusteuern?
Eine Idee wäre es, wenn ich mehrere große Arrays einzeln in 
Speicherblöcke aufteile und somit letztendlich die Adresse direkt zu 
fassen bekomme. Aber ich bin nun mal ganz ehrlich zu mir selbst, die 
Lösung scheint nicht wirklich gescheit zu sein.

Ps. Eine weitere Anfängerfrage ;)

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Gibt es eine Möglichkeit in C++ direkt Adressen anzusteuern?
In C gibt es die durchaus - und damit vermutlich auch in C++. Das geht 
ganz einfach über Zeiger. Ich habe das bei einem, am XINTF des 2812 
angeschlossenen LCD folgendermaßen gemacht:

LCD.h
//...
#define LCD_BASE_POINTER   0x2000    // define base address
#define LCD_KS0066         ((volatile Uint16 *)LCD_BASE_POINTER)
//...
LCD.c
//...
*LCD_KS0066 = cmd;         // write command to display
//...
data_in = *LCD_KS0066;     // read data from display
//...
Den Base-Pointer wählst du entsprechend der gewünschten 
Chip-Select-Zone. Und wenn du das Ganze ein wenig anpasst, kannst du 
mittels, z.B., LCD_KS0066[x] auf entsprechende Register zugreifen, wobei 
x dann der "Offset" ist.

Autor: Franz G. (jogl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tim R.

In Deinem Post vom 27.01.2009 schreibst Du, dass Du ein asynchrones SRAM 
per XINTF an deinen TMS320F28335 erfolgreich angebunden hast. Ich stehe 
vor der selben Aufgabe und komme nicht weiter.

Ich muss die XINTF-Funktion in einem bestehenden Projekt einbinden, 
welches über das .cmd-file den Flash als Speicher nutzt. Das 
Beispielprogramm für XINTF nutzt jedoch RAM. Kann ich einfach die 
SECTION "xintffuncs" aus dem .cmd-File (siehe unten) in das 
Flash-basierende .cmd-File einfügen?

Zudem ist mir nicht klar, wie ich später die Daten in das SRAM schreibe.

Danke Jogl
SECTIONS
{
   /* Setup for "boot to SARAM" mode: 
      The codestart section (found in DSP28_CodeStartBranch.asm)
      re-directs execution to the start of user code.  */
   codestart        : > BEGIN,     PAGE = 0
   ramfuncs         : > RAML0,     PAGE = 0  
   .text            : > RAML1,     PAGE = 0
   .cinit           : > RAML0,     PAGE = 0
   .pinit           : > RAML0,     PAGE = 0
   .switch          : > RAML0,     PAGE = 0

   xintffuncs       : LOAD = RAML1, 
                      RUN = ZONE7A, 
                      LOAD_START(_XintffuncsLoadStart),
                      LOAD_END(_XintffuncsLoadEnd),
                      RUN_START(_XintffuncsRunStart),
                      PAGE = 0
   
   .stack           : > RAMM1,     PAGE = 1
   .ebss            : > RAML4,     PAGE = 1
   .econst          : > RAML5,     PAGE = 1      
   .esysmem         : > RAMM1,     PAGE = 1
   IQmath           : > RAML1,     PAGE = 0
   IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD 
   IQmathTables2    : > IQTABLES2, PAGE = 0, TYPE = NOLOAD 
   FPUmathTables    : > FPUTABLES, PAGE = 0, TYPE = NOLOAD       
   DMARAML4         : > RAML4,     PAGE = 1
   DMARAML5         : > RAML5,     PAGE = 1
   DMARAML6         : > RAML6,     PAGE = 1
   DMARAML7         : > RAML7,     PAGE = 1
   ZONE7DATA        : > ZONE7B,    PAGE = 1  

   .reset           : > RESET,     PAGE = 0, TYPE = DSECT /* not used   */
   csm_rsvd         : > CSM_RSVD   PAGE = 0, TYPE = DSECT /* not used for SARAM examples */
   csmpasswds       : > CSM_PWL    PAGE = 0, TYPE = DSECT /* not used for SARAM examples */
   
   /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */
   .adc_cal     : load = ADC_CAL,   PAGE = 0, TYPE = NOLOAD
     
}

Autor: Tim R. (mugen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Franz G.

   xintffuncs       : LOAD = RAML1, 
                      RUN = ZONE7A, 
                      LOAD_START(_XintffuncsLoadStart),
                      LOAD_END(_XintffuncsLoadEnd),
                      RUN_START(_XintffuncsRunStart),
                      PAGE = 0
Diese Anweisung ist nur dafür da, dass Funktionen aus dem externen RAM 
ausgeführt werden können. Sie Beschreibt letztendlich den Startpunkt und 
den Endpunkt für memcopy. memcopy muss innerhalb der Initialisierung, 
also vor der Endlosschleife in main ausgeführt werden.
Ich selber benutze den externen Speicher nur für Statusdaten, ARRAYs und 
Variablen. Dann ist diese Code-Schnipsel nicht notwendig, sondern:
  .extern_prog  : >  ZONE7A  PAGE = 0
  .extern_data  : >  ZONE7B  PAGE = 1

MEMORY
{
PAGE 0:    
    ZONE7A     : origin = 0x200000, length = 0x00FC00

PAGE 1 : 
    ZONE7B     : origin = 0x20FC00, length = 0x000400 
}


Im Code selber muss die Variable, bzw. Array einfach per Pragma in den 
Speicher zugewiesen werden:
#pragma DATA_SECTION(ARRAY_NAME, ".extern_data")  

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.