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?
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
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.
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
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.