Hallo Freunde der Frickelei!
Ich beschäftige mich momentan mit einem MSP430 und würde gernen über die
eingebaute SPI-Schnitstelle ein Kontollwort(16bit bzw 32bit) an einen
anderen Chip senden.
Ebenfalls über SPI kommt die Antwort.
In diesem Fall ein Messwert eines ADC(16bit).
Das "SPI-Schieberegister" ist ja nun nur 8bit groß ... also muss ich es
"in Häppchen" verschicken, bzw empfangen.
Hier erstmal mein Code:
1 | uint16_t ADC_Wert(uint8_t Messpunkt)
|
2 | {
|
3 | uint16_t Wert=0x0000;
|
4 | uint8_t LS8bit = 0x00;
|
5 | uint8_t MS8bit = 0x00;
|
6 |
|
7 |
|
8 | ADC_SPI_Init();
|
9 |
|
10 | //ChipSelect@LOW
|
11 | ADC_SPI_CS_LOW;
|
12 |
|
13 | ADC_Kanal(Messpunkt);
|
14 |
|
15 | MS8bit = ADC_SPI_Lesen();
|
16 | LS8bit = ADC_SPI_Lesen();
|
17 |
|
18 | //Nun werden die 2*8bit zu einem 16bit-Wort zusammengesetzt:
|
19 | Wert = (ADC_Wert & LS8bit);
|
20 | Wert = (ADC_Wert << 8);
|
21 | Wert = (ADC_Wert & MS8bit);
|
22 |
|
23 | ADC_Sleep();
|
24 |
|
25 | //ChipSelect@HIGH
|
26 | ADC_SPI_CS_HIGH;
|
27 |
|
28 | return Wert;
|
29 | }
|
Leider wehrt sich der Compiler (IAR) ...
"expression must have integral type" kommentiert er bei diesen 3 Zeilen:
1 | Wert = (ADC_Wert & LS8bit);
|
2 | Wert = (ADC_Wert << 8);
|
3 | Wert = (ADC_Wert & MS8bit);
|
Hab mittlerweile herausgefunden, daß es offenbar an der Zwangsheirat
eines 8bit mit einem 16bit Wert liegt ... wie bekomm ich das in den
Griff?
Vielen Dank,
Crash