mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430F2013 - SPI Signalproblem


Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Problem mit den SPI Signalen von meinem MSP430F2013.

Im Anhang ist ein Bild von den Signalen.

Gelb: SCLK
Blau: SDO
Rosa: /CS

Das Problem ist, dass mein CS Signal nicht sofort nach dem Abschluss des 
Sendevorgangs auf high geht, sondern erst später.

Wie kann ich das besser machen ?
#include <msp430x20x3.h>

void spi_init(void);

void spi_write(unsigned int, unsigned int);

void wait(unsigned int);


void main(void)
{

  WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer
  P1DIR = 0x10;                         // P1.4 output-FSYNC
  spi_init();
  
  while(1) 
  
  {
  wait(0x01);
                           
  spi_dds_write(0x21,0x00);     //Send 16 Bit 0x2100
  }
                         
}


void spi_init(void)
{
  
USICTL0 |= USISWRST;                        // Set USI Reset-Bit for Config
USICTL0 |= USIPE6 + USIPE5 + USIMST + USIOE;  // Ports, SPI master
USICKCTL = USIDIV_1 + USISSEL_2 + USICKPL;    // 400kHz SCLK, CLK idle high
USICTL0 &= ~USISWRST;                         // USI released for operation

}

void spi_write(unsigned int high, unsigned int low)
{
           
  USISRL = low;                        
  USISRH = high;
  P1OUT &=~ 0x10;        //CS low
  USICNT = 80;  // Counter=16,  16 Bit Operation //Start des Sendevorgangs
  while(!(USIIFG & USICTL1)); //Warten bis Sendevorgang beendet ist
  P1OUT |= 0x10;       //CS high
     
}

void wait(unsigned int cycles)
{
  volatile unsigned int i;
  for(i=0;i<cycles;i++);
}

Danke.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter wrote:
> Hallo,
>
> ich habe ein Problem mit den SPI Signalen von meinem MSP430F2013.

Wirklich?

> Das Problem ist, dass mein CS Signal nicht sofort nach dem Abschluss des
> Sendevorgangs auf high geht, sondern erst später.

Wo ist da das Problem? Das ist völlig normal und interessiert den 
SPI-Slave nicht im geringsten.

> Wie kann ich das besser machen ?

Wozu? Ist doch alles OK mit dem Signal.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

dem DDS-IC, den ich seit einer Woche nicht zum Laufen bekomme, ist es 
nicht egal. Er verlangt, dass CS spätetens eine Periode von SCLK wieder 
high ist.

Und das dauert bei mir wesentlich länger.

Peter

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

alles klar.
Geht doch.

Danke.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seltsamer Chip. Welcher genau ist das denn? Und wie hast du es jetzt zum 
laufen bekommen? Mit Nops und ohne Abfrage des Status-Registers? Oder 
wie?

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das ist ein AD9834.

Laut Timing-Diagramm sollte FSYNC spätestens eine Periode von SCLK 
später wieder auf High gehen.

Ich habe es so gelassen, wie oben, und es geht trotzdem.

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ein Frage noch:

Was soll eigentlich die Verknüpfung von USIIFG & USICTL1 und brungen ?
Ich meine man bildet das logische UND zwischen einem Bit (USIIFG) und 
einem Byte (USICTL1) !

Kann man nicht nur USIIFG abfragen ?

Wieso diese Verknüpfung ?

Danke.

Autor: S. Z. (szimmi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst doch wissen, ob das entsprechende Bit in dem Control-Register 
gesetzt ist oder nicht. Wenn die UND-Verknüpfung > 0 ist, dann ist es 
gesetzt, ansonsten nicht. Das Bit allein abfragen nuetzt Dir nichts, 
diese Bedingung ist immer erfüllt.

Autor: S. Z. (szimmi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es handelt sich uebrigens hierbei um ein bitweises UND und kein 
logisches UND. Vielleicht bist Du deshalb etwas irritiert.

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wird dann also bei allen Statusbits so gemacht ?

Also bitweise "und" zwischen Statusbit und entsprechendem Register ?

Ich danke euch.

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.