mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP eZdspF28335 SPI


Autor: K. A. (k-a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Ich möchte auf dem eZdsp Board zwei SPI generieren und diese über eine 
Leitung miteinander kommunizieren lassen.

Ich habe auch die Register nach den Angaben im Datenblatt vom McBSP 
Modul gesetzt. Jeweils einmal für Slave und einmal für Master.

//McBSP-A register settings MASTER
  McbspaRegs.SPCR2.all = 0x0000;
  McbspaRegs.SPCR1.all = 0x0000;

  McbspaRegs.SPCR1.bit.CLKSTP = 2;
  McbspaRegs.PCR.bit.CLKXP = 0;
  McbspaRegs.PCR.bit.CLKRP = 0;

  McbspaRegs.SPCR1.bit.DLB = 1;

  McbspaRegs.PCR.bit.CLKXM = 1;

  McbspaRegs.PCR.bit.SCLKME = 0;
  McbspaRegs.SRGR2.bit.CLKSM = 1;

  McbspaRegs.SRGR1.bit.CLKGDV = 16;
  McbspaRegs.PCR.bit.FSXM = 1;
  McbspaRegs.SRGR2.bit.FSGM = 0;
  McbspaRegs.PCR.bit.FSXP = 1;
  McbspaRegs.XCR2.bit.XDATDLY = 01;
  McbspaRegs.RCR2.bit.RDATDLY = 01;

  McbspbRegs.XCR1.bit.XWDLEN1=2;
  delay_loop();
  McbspaRegs.SPCR2.bit.GRST = 1;
  McbspaRegs.SPCR2.bit.XRST = 1;
  McbspaRegs.SPCR1.bit.RRST = 1;
  McbspaRegs.SPCR2.bit.FRST = 1;


//McBSP-B register settings SLAVE
  McbspaRegs.SPCR2.all = 0x0000;
  McbspaRegs.SPCR1.all = 0x0000;

  McbspaRegs.SPCR1.bit.CLKSTP = 2;
  McbspaRegs.PCR.bit.CLKXP = 0;
  McbspaRegs.PCR.bit.CLKRP = 0;

  McbspaRegs.PCR.bit.CLKXM = 0;

  McbspaRegs.PCR.bit.SCLKME = 0;
  McbspaRegs.SRGR2.bit.CLKSM = 1;

  McbspaRegs.SRGR1.bit.CLKGDV = 16;
  McbspaRegs.PCR.bit.FSXM = 1;

  McbspaRegs.PCR.bit.FSXP = 1;
  McbspaRegs.XCR2.bit.XDATDLY = 00;
  McbspaRegs.RCR2.bit.RDATDLY = 00;

  McbspbRegs.RCR1.bit.RWDLEN1=2;
  delay_loop();
  McbspaRegs.SPCR2.bit.GRST = 1;
  McbspaRegs.SPCR2.bit.XRST = 1;
  McbspaRegs.SPCR1.bit.RRST = 1;

Allerdings hab ich jetzt das Problem, dass ich mit dem Osziloskop keine 
DX Signal am Ausgang des Master messen kann.

Ich habe auch dem DX Register die Werte reingeschrieben, die ich 
versenden will und zwar:

McbspaRegs.DXR1.all=a;

a ist hier frei wählbar bis 16bit. Ansonsten muss ich das DXR2 Register 
noch zusätzlich benutzen.

Kann mir jemand weiter helfen?

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du auch in den SysCtrlRegs den Takt für die beiden Module 
eingeschaltet?


   SysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK = 1;
   SysCtrlRegs.PCLKCR0.bit.MCBSPBENCLK = 1;

Und dann solltest du mal alle deine Registerbezeichnungen nachprüfen.

//McBSP-B register settings SLAVE
  McbspaRegs.SPCR2.all = 0x0000;
  McbspaRegs.SPCR1.all = 0x0000;

Du willst laut Kommentar McBSP-B einstellen, stellst aber an McBSP-A.
Das ist in deinem ganzen Code durcheinander geraten, nicht nur in diesen 
beiden Zeilen.

Grüße,

Peter

Autor: K. A. (k-a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort

Ja die sind auf eins gesetzt.

Hab das mit McBSP-A und B jetzt richtig gemacht, aber wenn ich die dann 
über eine Leitung verbinden möchte, sehe ich nichts am scope.

Hier nochmal die Register Einstellungen. Habe jetzt B als Master und A 
als Slave.

void init_mcbsp_spi()
{

     // McBSP-B register settings MASTER
    McbspbRegs.SPCR2.all=0x0000;
    McbspbRegs.SPCR1.all=0x0000;
    McbspbRegs.PCR.all=0x0A08;
    McbspbRegs.SPCR1.bit.CLKSTP = 2;
    McbspbRegs.PCR.bit.CLKXP = 0;
    McbspbRegs.PCR.bit.CLKRP = 0;
    McbspbRegs.RCR2.bit.RDATDLY=01;
    McbspbRegs.XCR2.bit.XDATDLY=01;
    McbspbRegs.RCR1.bit.RWDLEN1=2;
    McbspbRegs.XCR1.bit.XWDLEN1=2;

    McbspbRegs.SRGR2.all=0x2000;
    McbspbRegs.SRGR1.all= 0x000F;
    McbspbRegs.SPCR2.bit.GRST=1;
    delay_loop();                        // Wait at least 2 SRG clock 
cycles
    McbspbRegs.SPCR2.bit.XRST=1;         // Release TX from Reset
    McbspbRegs.SPCR1.bit.RRST=1;         // Release RX from Reset
    McbspbRegs.SPCR2.bit.FRST=1;         // Frame Sync Generator reset


    // McBSP-A register settings SLAVE
    McbspaRegs.SPCR2.all=0x0000;
    McbspaRegs.SPCR1.all=0x0000;
    McbspaRegs.PCR.all=0x0008;
    McbspaRegs.SPCR1.bit.CLKSTP = 2;
    McbspaRegs.PCR.bit.CLKXP = 0;
    McbspaRegs.PCR.bit.CLKRP = 0;
    McbspaRegs.RCR2.bit.RDATDLY=01;
    McbspaRegs.XCR2.bit.XDATDLY=01;

    McbspaRegs.RCR1.bit.RWDLEN1=2;
    McbspaRegs.XCR1.bit.XWDLEN1=2;

    McbspaRegs.SRGR2.all=0x2000;
    McbspaRegs.SRGR1.all= 0x000F;
    McbspaRegs.SPCR2.bit.GRST=1;
    delay_loop();
    McbspaRegs.SPCR2.bit.XRST=1;         // Release TX from Reset
    McbspaRegs.SPCR1.bit.RRST=1;         // Release RX from Reset
}

Hab ich eventuell die GPIO falsch gesetzt?

Hier die GPIOs:

void InitMcbspaGpio(void)
{
  EALLOW;

/* Configure McBSP-A pins using GPIO regs*/
// This specifies which of the possible GPIO pins will be McBSP 
functional pins.
// Comment out other unwanted lines.
  GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 2;  // GPIO20 is MDXA pin
  GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 2;  // GPIO21 is MDRA pin
    GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 2;  // GPIO22 is MCLKXA pin
    GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 2;    // GPIO7 is MCLKRA pin 
(Comment as needed)
  //GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 1;  // GPIO58 is MCLKRA pin 
(Comment as needed)
    GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 2;  // GPIO23 is MFSXA pin
    GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 2;    // GPIO5 is MFSRA pin 
(Comment as needed)
  //GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 1;  // GPIO59 is MFSRA pin 
(Comment as needed)

/* Enable internal pull-up for the selected pins */
// Pull-ups can be enabled or disabled by the user.
// This will enable the pullups for the specified pins.
// Comment out other unwanted lines.

  GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0;     // Enable pull-up on GPIO20 
(MDXA)
    GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0;     // Enable pull-up on GPIO21 
(MDRA)
  GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0;     // Enable pull-up on GPIO22 
(MCLKXA)
  GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0;      // Enable pull-up on GPIO7 
(MCLKRA) (Comment as needed)
  //GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;   // Enable pull-up on GPIO58 
(MCLKRA) (Comment as needed)
  GpioCtrlRegs.GPAPUD.bit.GPIO23 = 0;     // Enable pull-up on GPIO23 
(MFSXA)
  GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0;      // Enable pull-up on GPIO5 
(MFSRA) (Comment as needed)
  //GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;   // Enable pull-up on GPIO59 
(MFSRA) (Comment as needed)

/* Set qualification for selected input pins to asynch only */
// This will select asynch (no qualification) for the selected pins.
// Comment out other unwanted lines.


    GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 0;   // Asynch input GPIO21 
(MDRA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 0;   // Asynch input GPIO22 
(MCLKXA)
    GpioCtrlRegs.GPAQSEL1.bit.GPIO7 = 0;    // Asynch input GPIO7 
(MCLKRA) (Comment as needed)
    //GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3; // Asynch input 
GPIO58(MCLKRA) (Comment as needed)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 0;   // Asynch input GPIO23 
(MFSXA)
    GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 0;    // Asynch input GPIO5 
(MFSRA) (Comment as needed)
    //GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3; // Asynch input GPIO59 
(MFSRA) (Comment as needed)

  EDIS;
}

Wäre super, wenn ihr mir weiter helfen könntet.

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt gerade nicht genug Zeit, um das alles nachzuvollziehen.

Ich kann nur empfehlen, unter folgendem Link (ab Seite 65) mal alles 
nachzuprüfen:

http://focus.ti.com/lit/ug/sprufb0c/sprufb0c.pdf

Und dann würde ich erstmal versuchen, ein Modul alleine dazu zu bringen, 
dass es etwas sendet. Ohne elektrische Verbindung zu dem anderen und 
ohne das andere überhaupt zu konfigurieren.

Grüße,

Peter

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.