Forum: Mikrocontroller und Digitale Elektronik ESP32C3 > SPI > Datenpakete durcheinander


von Jan H. (janiiix3)


Angehängte Dateien:

Lesenswert?

Hallo Community,

gerade komme ich mal wieder nicht weiter.
8 Bytes werden pro Datenpaket versendet.
Das sieht so aus:
1
void max7219_set_scan_limit( uint8_t _limit )
2
{                              
3
  uint8_t *pData, buffer[ DISPLAY_SIZE * 2 ];
4
  pData = buffer; 
5
6
  for (uint8_t i = 0; i < DISPLAY_SIZE; i++)
7
  {
8
    *pData++ = REG_SCAN_LIMIT;
9
    *pData++ = _limit;
10
  } 
11
  spi_write_bytes( buffer, (DISPLAY_SIZE * 2) );  
12
}
13
[c]
14
15
Führe ich nur diese Funktion aus, so werden die Daten auch einwandfrei gesendet (siehe Foto > LA).
16
17
Kommt nach der Funktion noch eine andere dazu, die eigentlich genau das gleiche macht nur mit anderen Parametern, wird das letzte Byte von der ersten Übertragung ersetzt durch die danach folgende Übertragung.
18
19
[c]
20
void max7219_set_decode( uint8_t _decode )
21
{                              
22
  uint8_t *pData, buffer[ DISPLAY_SIZE * 2 ];
23
  pData = buffer; 
24
25
  for (uint8_t i = 0; i < DISPLAY_SIZE; i++)
26
  {
27
    *pData++ = REG_DECODE;
28
    *pData++ = _decode;
29
  } 
30
  spi_write_bytes( buffer, (DISPLAY_SIZE * 2) );  
31
}

So werden die Funktionen aufgerufen, einfach in der while(1)
1
    while (1)
2
    {    
3
      max7219_set_decode( 0x01 );
4
      max7219_set_scan_limit( 0x02 );
5
    }

Die Funktion die die Daten auf den Bus knallt ist folgende:
1
void spi_write_bytes( uint8_t *_data, uint8_t _length )
2
{
3
  if( _length > 16 ) _length = 16;
4
5
  REG_WRITE( SPI_MS_DLEN_REG, ( 8 * _length ) -1 );
6
7
  spi_write_buffer( (uint32_t*)_data, _length );
8
9
  REG_SET_BIT( SPI_CMD_REG, SPI_UPDATE_bm );
10
  while ( REG_READ( SPI_CMD_REG ) & SPI_UPDATE_bm );
11
12
  REG_SET_BIT( SPI_CMD_REG, SPI_USR_bm );
13
  while ( REG_READ( SPI_CMD_REG ) & SPI_USR_bm );  
14
}

Jemand eine Idee? Meine Vermutung liegt bei der Funktion die die Daten 
übertragen soll spi_write***..

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.