das Schreiben und Lesen der Enc-Register funktioniert jetzt zuverlässig,
d.h. die Übertragung einzelner Bytes mit dem Stm-lib-spi-code
funktioniert.
Mein Stack-code funktioniert nicht. manchmal werden einzelne frames vom
uc richtig empfangen und gesendet. Aber nicht mehrere frames
hintereinander.
Ich vermute den Fehler beim verwendeten STM-spi-code / Behandlung des
Fifo beim Senden mehrerer Bytes:
1 | uint8_t txSPI(SPI_TypeDef* SPIx,uint8_t wert){
|
2 | uint16_t ret_wert=0;
|
3 | // warte bis senden fertig
|
4 | while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
|
5 | // byte senden
|
6 | SPI_I2S_SendData(SPIx, wert);
|
7 | // warte bis empfang fertig
|
8 | while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);
|
9 | // Daten einlesen
|
10 | ret_wert=SPI_I2S_ReceiveData(SPIx);
|
11 | return(ret_wert);
|
12 | }
|
13 |
|
14 | static void enc_write_buf( uint8_t *buf, uint16_t len )
|
15 | {
|
16 | enc_select();
|
17 | spi_put( ENC_SPI_OP_WBM );
|
18 | for(; len > 0; len--, buf++ ) {
|
19 | spi_put( *buf );
|
20 | }
|
21 | enc_deselect();
|
22 | }
|
23 | static void enc_read_buf( uint8_t *buf, uint16_t len )
|
24 | {
|
25 | enc_select();
|
26 | spi_put( ENC_SPI_OP_RBM );
|
27 | for(; len > 0; len--, buf++ ) {
|
28 | // spi_put( 0x00 );//kk anpassung an arm
|
29 | *buf = spi_get();
|
30 | }
|
31 | enc_deselect();
|
32 | }
|
spi_put, get verweist auf txSPI. Für mich ist der Stm-lib-code
hinsichtlich der behandlung des fifo nicht wirklich nachvollziehbar.
Hat jemand brauchbaren Code für die Übertragung mehrerer Bytes oder kann
mit einer Erklärung weiterhelfen?