mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 & CC1100 Problem mit RxFIFO


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Problem beim empfangen mit dem CC1100 von Chipcon und dem 
MSP430F149.

Was bereits geht:
nach empfang des SyncWords löst mir GDO2 einen Interrupt aus (IOCFG2 
0x06)
nun möchte ich die meine Nutzdaten (2 Bytes nach dem SyncWord), aus dem 
RxFIFO über die SPI Schnittstelle SO auslesen. folgender Code ist in der 
InterruptRoutine drin
#pragma vector=PORT2_VECTOR
__interrupt void P2_ISR (void) 
{
   P1OUT &= ~0x02; // /CS enable
   U1TXBUF = 0xFF;  // Send address
   while (!(IFG2&UTXIFG1));      // Wait for TXBUF ready
   U1TXBUF = 0;                  // Dummy write to read 1st data byte
// Addr byte is now being TX'ed, with dummy byte to follow immediately 
// after
   while (!(IFG2&URXIFG1));      // Wait for end of addr byte TX
        IFG2 &= ~URXIFG1;        // Clear flag
        while (!(IFG2&URXIFG1)); // Wait for end of 1st data byte TX
        
   // First data byte now in RXBUF
   for (i = 0; i < (len-1); i++)
   {
    U1TXBUF = 0;           //Initiate next data RX, meanwhile..
    rxBuffer[i] = U1RXBUF;         // Store data from last data RX
    while (!(IFG2&URXIFG1));       // Wait for end of data RX
   }
    rxBuffer[len-1] = U1RXBUF      // Store last RX byte in buffer
               
    U1TXBUF = 0x3A;                         // Send strobe
    // Strobe addr is now being TX'ed
    IFG2 &= ~URXIFG1;                       // Clear flag
    while (!(IFG2&URXIFG1));                // Wait for end of addr TX
    
    P1OUT |= 0x02;// /CS disable
}

Den Code habe ich aus einem Beispiel von TI.
Die Daten, welche jetzt auf dem SO Pin ausgegeben werden, sind alles 
andere als jene, welche ich sende. Was da ausgegeben wird ist rein 
zufällig.

Kennt sich jemand mit dem Modul aus und hat schon mal eine 
Empfangssoftware geschrieben?

Dank Euch und Gruß

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich arbeite mit einem CC2500 und einem CC1101, ich empfehle dir die 
MSP430-CC1100 Interface Bibliotheken von der TI-Homepage. Einfach den 
Suchbegriff "slaa325" eingeben, da kannst du dir die Sachen runterladen. 
Das hat den Vorteil, das vieles von deinem gezeigten Programmcode 
entfällt. Bei mir löst GDO0=0x06 ebenfalls einen Interrupt aus, 
allerdings auf der fallenden Flanke, wenn das Paket empfangen wurde. 
Erst dann macht es Sinn, dieses Paket aus dem RX-FIFO zu lesen.
Meine ISR sieht folgendermaßen aus:
#pragma vector=PORT1_VECTOR
__interrupt void port1_ISR (void)

{
  if((GDO_PxIFG & GDO0_PIN) && (GDO_PxIE & GDO0_PIN))
  {
    LED(GREEN,ON);
    char length = 64;

    if(RFReceivePacket(rxBuffer, &length));

    {
      if(!(strncmp(rxBuffer, ser_nr, 64)))
        {
          LED(GREEN,OFF);
        }

  }

  GDO0_FLAG;
}


Das Abholen des Paketes aus dem FIFO übernimmt die Funktion 
RFReceivePacket. Die erste if-Abfrage wird wahr, wenn der CRC ok ist, 
andernfalls wird das Paket verworfen und der FIFO gelöscht. Diese 
Funktion ist in der Bibliothek enthalten. Die zweite if-Abfrage 
vergleicht eigentlich nur den Inhalt des FIFO's mit einer von mir vorher 
gespeicherten Variablen ser_nr auf Gleichheit. Nicht zu vergessen, das 
das Flag, welches den Interrupt ausgelöst hat, wieder zu löschen.
Dieses Beispiel funktioniert aber nur für Pakete <64 Byte.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, in meiner ISR fehlt noch eine geschweifte "}" -Klammer

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.