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:
1 | #pragma vector=PORT1_VECTOR
|
2 | __interrupt void port1_ISR (void)
|
3 |
|
4 | {
|
5 | if((GDO_PxIFG & GDO0_PIN) && (GDO_PxIE & GDO0_PIN))
|
6 | {
|
7 | LED(GREEN,ON);
|
8 | char length = 64;
|
9 |
|
10 | if(RFReceivePacket(rxBuffer, &length));
|
11 |
|
12 | {
|
13 | if(!(strncmp(rxBuffer, ser_nr, 64)))
|
14 | {
|
15 | LED(GREEN,OFF);
|
16 | }
|
17 |
|
18 | }
|
19 |
|
20 | GDO0_FLAG;
|
21 | }
|
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.