Hallo Martin,
also ich habe die Module ans laufen bekommen und muss sagen, dass alles
sauber funktioniert. Ich habe als Grundlage auch den TI-Code verwendet.
Allerdings benutzte ich einen ATMega und habe den Code auch neu
aufgebaut. Ich würde Dir gerne helfen, allerdings kenne ich die
MSP-spezifischen Begriffe leider nicht. Und Du hast recht, dass mit den
defines im TI Code ist zum lernen und verstehen ein absoluter Krampf.
Also ich gehe so vor, zunächste Resete ich den CC2500 und schalte dann
den SPI-Bus am AVR frei. Den Interrupt vom SPI nutze ich(bisher) nicht.
Dann setze ich alle notwendigen Parameter im CC2500 und dann kann es
losgehen mit senden oder empfangen.
Hier mal meine Reset Funktion :
1 | PORTB|=(1<<5); //CLK Pin (SCKL)
|
2 | PORTB &=~(1<<3); //MOSI Pin (SI)
|
3 | _delay_us(10);
|
4 | PORTB |=(1<<2); //CS High
|
5 | _delay_us(30);
|
6 | PORTB &=~(1<<2); //CS Low
|
7 | _delay_us(30);
|
8 | // disable device and wait at least 40 microseconds
|
9 | PORTB |=(1<<2); //CS High
|
10 | _delay_us(45);
|
11 | PORTB &=~(1<<2); //CS Low
|
12 | // wait for device
|
13 | while((PINB&0x10)!=0); //Wait for SO-Pin goes High
|
14 | //Activate SPI
|
15 | SPCR=0x52; //Hier habe ich den SPI Prescaler relativ hoch eingestellt, also den SPI Takt recht langsam. Hat sich bei schlecher Verkabelung auf Lochraster als besser herausgestellt. Hier irgendwas um 125kHz. Später habe ich auf 4MHz erhöht.
|
16 | SPSR=0x00;
|
17 | // send reset command (SRES)
|
18 | spiTransfer(0x30);
|
19 | // disable device
|
20 | PORTB |=(1<<2); //CS High
|
Was bei mir vorallem bei hohen SPI Takt geholfen hat, ist nachdem man
den CS-Pin auf Low-Pegel gezogen hat ein kleines sleep einzubauen. So
ca. 10µs. Damit vorm SPI Tranfer der CC2500 auch sicher erkannt hat, das
er nun enabled ist.
Ich hoffe diese hilft Dir etwas weiter. Leider habe ich vom MSP keine
Ahnung. Aber ich denke das ist leicht übertragbar.
Gruß,
Frederik