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***..