MSP430 Daten über SPI senden

#661360
Lesenswert?

Z.B. 3 Bytes an den AD DAC schicken:
1
unsigned char SetExtDAC(unsigned char num, unsigned int data)
2
{
3
  
4
  //AD5663 Command Byte zusammen bauen:
5
  
6
  if(num == 0)Byte2 = AD5663_Command3 + AD5663_Address0;
7
  if(num == 1)Byte2 = AD5663_Command3 + AD5663_Address1;
8
  if(num > 1)return STATUS_ERROR;
9
  
10
  
11
  Byte1 = ((data >> 8) & 0xFF);      //High-Byte
12
  Byte0 = (data & 0xFF);          //LOw-Byte
13
  
14
  
15
  SPI1WaitForComplete();          //Senden bereit?
16
  
17
  ResetDevCSA;              //Chip-Select
18
  TXBUF1 = Byte2;              //Command-Byte absetzen
19
  SPI1WaitForComplete();
20
  asm("nop");
21
  asm("nop");
22
      
23
  TXBUF1 = Byte1;              //Highbyte senden
24
  SPI1WaitForComplete();
25
  asm("nop");
26
  asm("nop");
27
  
28
  TXBUF1 = Byte0;
29
  SPI1WaitForComplete();
30
  asm("nop");
31
  asm("nop");
32
  SetDevCSA;
33

34
  return STATUS_SUCCESS;
35
}
36

37
void SPI1WaitForComplete(void)
38
{
39
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
40
  do
41
  {
42
    IFG2 &= ~URXIFG1;
43
  }
44
  while (URXIFG1 & IFG2); 
45
}
Gast #661364
Lesenswert?

Hallo,
vielen Dank für die Antwort.
Gibt es Erfahrungen ob man die Datenbytes auf diese Weise
unmittelbar aneinander hängen kann,
das nach dem letzten Bit vom ersten DatenByte
unmittelbar mit dem nächsten Clock-Signal
das erste Bit des zweiten DatenBytes gesendet wird?

Moritz
Gast #661381
Lesenswert?

Hallo Christian,
vielen Dank für deine ausführliche Antwort.
Nachdem ich das Datenblatt von meinem EEPROM AT25010A gelesen hatte,
glaubte ich, die Bytes müssten unmittelbar aufeinander folgen.
Aber vielleicht ist das gar nicht nötig.
Ausprobieren kann ich es leider erst später,
da ich im Moment programmiere ohne Hardware zum testen.

Moritz

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren