Datum: 17.04.2008 09:41
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.
Datum: 17.04.2008 14:15
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.
Datum: 17.04.2008 14:33
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
Datum: 17.04.2008 15:58
Hallo, alles klar. Geht doch. Danke.
Datum: 17.04.2008 16:13
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?
Datum: 18.04.2008 09:04
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.
Datum: 22.04.2008 18:42
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.
Datum: 22.04.2008 20:15
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.
Datum: 22.04.2008 20:25
Es handelt sich uebrigens hierbei um ein bitweises UND und kein logisches UND. Vielleicht bist Du deshalb etwas irritiert.
Datum: 22.04.2008 21:50
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 Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel



