PSoC 4 24-Bit Daten am Stück per SPI senden

Gast #4556180
Lesenswert?
• ▲
▼
Hallo zusammen,

Ich möchte mit dem PSoC 4200L 24-Bit Daten per SPI (SCB Block) senden.
Mein Problem ist, dass der PSoC nur 16 Bits am Stück senden will.
Ich muss aber, wegen der SS Leitung, alle 24 am Stück senden.
Muss doch irgendwie gehen.

Hat hier Jemand Erfahrung mit dem uC?
Danke
Angehängte Dateien:
Gast #4556193
Lesenswert?
• ▲
▼
Daran habe ich natürlich als erstes gedacht.
Das klingt jetzt etwas doof, aber ich kann dieses "SS low" und "ss high" 
in den ganzen verschachtelten Funktionen nicht finden.
Ich kann mal ein Codeschnipsel posten:
1
    /*******************************************************************************
2
    * Function Name: SPI_SpiUartWriteTxData
3
    ********************************************************************************
4
    *
5
    * Summary:
6
    *  Places a data entry into the transmit buffer to be sent at the next available
7
    *  bus time.
8
    *  This function is blocking and waits until there is space available to put the
9
    *  requested data in the transmit buffer.
10
    *
11
    * Parameters:
12
    *  txDataByte: the data to be transmitted.
13
    *
14
    * Return:
15
    *  None
16
    *
17
    *******************************************************************************/
18
    void SPI_SpiUartWriteTxData(uint32 txData)
19
    {
20
    #if (SPI_INTERNAL_TX_SW_BUFFER_CONST)
21
        uint32 locHead;
22
    #endif /* (SPI_INTERNAL_TX_SW_BUFFER_CONST) */
23

24
        #if (SPI_CHECK_TX_SW_BUFFER)
25
        {
26
            /* Put data directly into the TX FIFO */
27
            if ((SPI_txBufferHead == SPI_txBufferTail) &&
28
                (SPI_SPI_UART_FIFO_SIZE != SPI_GET_TX_FIFO_ENTRIES))
29
            {
30
                /* TX software buffer is empty: put data directly in TX FIFO */
31
                SPI_TX_FIFO_WR_REG = txData;
32
            }
33
            /* Put data into TX software buffer */
34
            else
35
            {
36
                /* Head index to put data */
37
                locHead = (SPI_txBufferHead + 1u);
38

39
                /* Adjust TX software buffer index */
40
                if (SPI_TX_BUFFER_SIZE == locHead)
41
                {
42
                    locHead = 0u;
43
                }
44

45
                /* Wait for space in TX software buffer */
46
                while (locHead == SPI_txBufferTail)
47
                {
48
                }
49

50
                /* TX software buffer has at least one room */
51

52
                /* Clear old status of INTR_TX_NOT_FULL. It sets at the end of transfer when TX FIFO is empty. */
53
                SPI_ClearTxInterruptSource(SPI_INTR_TX_NOT_FULL);
54

55
                SPI_PutWordInTxBuffer(locHead, txData);
56

57
                SPI_txBufferHead = locHead;
58

59
                /* Check if TX Not Full is disabled in interrupt */
60
                if (0u == (SPI_INTR_TX_MASK_REG & SPI_INTR_TX_NOT_FULL))
61
                {
62
                    /* Enable TX Not Full interrupt source to transmit from software buffer */
63
                    SPI_INTR_TX_MASK_REG |= (uint32) SPI_INTR_TX_NOT_FULL;
64
                }
65
            }
66
        }
67
        #else
68
        {
69
            /* Wait until TX FIFO has space to put data element */
70
            while (SPI_SPI_UART_FIFO_SIZE == SPI_GET_TX_FIFO_ENTRIES)
71
            {
72
            }
73

74
            SPI_TX_FIFO_WR_REG = txData;
75
        }
76
        #endif
77
    }

hinter dem "SPI_TX_FIFO_WR_REG" verbirgt sich die physikalishe 
Registeradresse.
Ich sehe hier keinen Hinweis auf SS low :(
Gast #4556208
Lesenswert?
• ▲
▼
Wenn ich SS Leitung im SPI Block deaktiviere und das vor dem Senden per 
Hand auf Masse ziehe, dann fehlt mir logischerweise der SPI Clock.
SS und SPI Clock gehören aber zusammen.
Hm, was machen?
Gast #4556546
Lesenswert?
• ▲
▼
Also ich kenn das nur vom PSOC4200, sollte aber ähnlich sein. Wenn du 
Daten in den Tx Speicher schreibts wird ss auf low gezogen, wenn der 
Transfer beendet ist wieder auf high. D.h wenn du schnell genug deine 
Daten in den Tx Speicher legst sollte das funktionieren. Meistens sind 4 
oder 8 Byte Hardware Speicher vorhanden, sollte bei 3 Byte also 
problemlos gehen. Evt die PutArray Funktion benutzen (im Datenblatt 
beschrieben).

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.