Funktion über SPI senden

Gast #4771010
Lesenswert?

Hallo zusammen,

ich möchte eine Funktion über meinem SPI senden und ich weiß nicht wie 
bzw. wo ich meine Funktion im SPI übergeben kann, damit die Daten 
gesendet werden. Theoretisch müsste man sie dem FIFO übergeben oder soll 
man sie nach der Initialisierung vom SPI in der main.c erst aufrufen? Es 
geht nämlich darum über SPI einen Treiber zu steuern der LEDs ansteuern 
soll.

Danke Euch.
Gast #4771018
Lesenswert?

#define BLUE  1
#define GREEN 1
#define RED   1

struct TLC5971 {
  uint16_t GS[4][3];
  uint8_t BCB:7;
  uint8_t BCG:7;
  uint8_t BCR:7;
  uint8_t BLANK:1;
  uint8_t DSPRPT:1;
  uint8_t TMGRST:1;
  uint8_t EXTGCK:1;
  uint8_t OUTTMG:1;
  uint8_t cmd:6;
} tlc5971;

void tlc5971_init()
{
  tlc5971.BLANK = 1;
  tlc5971.DSPRPT = 0;
  tlc5971.TMGRST = 1;
  tlc5971.EXTGCK = 1;
  tlc5971.OUTTMG = 0;
  tlc5971.BCR = 127;
  tlc5971.BCG = 127;
  tlc5971.BCB = 127;
}
void sendBits()
{
  uint8_t n;
  uint8_t  *p = (uint8_t*)&tlc5971;

  for (n = 28; n-- > 0; )
  {
    SPI_Send(p[n]);
  }
  delay_us(3);
}

void writeSPIFIFO(){

  tlc5971_init();
  tlc5971.cmd = 0x25;
  tlc5971.TMGRST = 1;
  tlc5971.DSPRPT = 1;
  tlc5971.BCR = 127;
  tlc5971.BCR = 0;
  tlc5971.BCB = 20;

  tlc5971.GS[0][BLUE] = 0xAAAA;  // 1010 1010 1010 1010
  tlc5971.GS[3][RED] = 0x5555;
    while(1)
        {
          //CS_lo();
          sendBits();
          //CS_hi();
        }
}

Würde gerne die writeSPIFIFO() funktion senden.
Gast #4771033
Lesenswert?

Peter S. schrieb:

> Würde gerne die writeSPIFIFO() funktion senden.

Du möchtest nicht die Funktion selbst senden, oder? Weil man kann 
natürlich mit malloc Speicher reservieren, da Programmcode hinterlegen 
und den dann aufrufen. In der Regel geht davon alles kaputt.

Du möchtest eigentlich gewisse Bytes mittels sendBits (warum heisst die 
nicht sendBytes?) senden. Und zwar genaugenommen alle Bytes in deinem 
TLC... struct.

Dann würde ich zuallererst mal über while(1) nachdenken.
#4771059
Lesenswert?

Sascha_ schrieb:
> Dann würde ich zuallererst mal über while(1) nachdenken.

und dann vielleicht auch über

> #define BLUE  1
> #define GREEN 1
> #define RED   1

Was du vermutlich willst, ist writeSPIFIFO() ausführen

Dazu schreibst du eine funktion main(), initialisiert SPI und darin 
rufst du dann

writeSPIFIFO();

auf.

Copy&Paste von Code aus dem Netz 
(http://cboard.cprogramming.com/c-programming/167080-simple-structure-array-issue.html), 
ohne die Programmiersprache auch nur im Ansatz verstanden zu haben, hat 
noch niemanden weitergebracht.
Lerne doch erstmal C.
Gast #4771137
Lesenswert?

Joe F. schrieb:
> Dieses ewige "Das-ist-doch-ein-Troll"-getrolle nervt.

Interessant auch mit welcher Vehemenz die Trollung hier
vom Initator abgestritten wird.

Das sollte einem zu denken geben. Aber es geht ja nichts
über ein bisschen sich selbst produzieren, da lassen sich
solche waghalsigen Behauptungen von mir leicht über Bord
werfen.

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