AT32UC3B SPI Chip Select Polarität ändern?

Gast #3563184
Lesenswert?
• ▲
▼
Hallo,

ich habe hier einen AT32UC3B und will den Chip im Master Mode von SPI in 
Betrieb nehmen. Das funktioniert alles soweit nur benötigt mein Slave 
beim Chip Select ein active=high Signal. Der AT32 benutzt aber 
standardmäßig active=low. In welchem Register kann ich die CS Polarität 
einstellen?

Hier ist der Quelltext der SPI Initialisierung. Ich benutze den CS0 als 
Chip Select für den Slave.
1
    //SPI Konfig  
2
    io_setup(AVR32_PIN_PA25,FUNCTION_A,PULLUP_EN); // MISO
3
    io_setup(AVR32_PIN_PA14,FUNCTION_A,PULLUP_DIS); // MOSI
4
    io_setup(AVR32_PIN_PA15,FUNCTION_A,PULLUP_DIS); // SCK
5
    io_setup(AVR32_PIN_PA16,FUNCTION_A,PULLUP_DIS); // CS
6

7
    AVR32_SPI.mr = 1 << AVR32_SPI_MR_MSTR_OFFSET |    // SPI0 mode 0 = slave  1 = master
8
    1 << AVR32_SPI_MR_MODFDIS_OFFSET ;          // SPI0 mode fault detection  0 = enable  1 = disable
9

10

11
    int  csr =   0 << AVR32_SPI_CSR0_CPOL_OFFSET |    // inactive clock is 0;
12
    1 << AVR32_SPI_CSR0_NCPHA_OFFSET |          // Active Edge == rising
13
    0 << AVR32_SPI_CSR0_CSAAT_OFFSET |          // deselect device
14
    0 << AVR32_SPI_CSR0_CSNAAT_OFFSET |          // CS not active after transfer
15
    8 << AVR32_SPI_CSR0_BITS_OFFSET |          // (8BITS+8)Bits per transfer
16
    32 << AVR32_SPI_CSR0_SCBR_OFFSET |          // clk == MCLK / scbr;
17
    0 << AVR32_SPI_CSR0_DLYBS_OFFSET |          // 0 = 1 clk delay when chip selected
18
    0 << AVR32_SPI_CSR0_DLYBCT_OFFSET;          // 0 = No delay between 2 transfers.AVR32_SPI.csr0 = csr;
19

20
    AVR32_SPI.csr0 = csr;
21
    AVR32_SPI.csr1 = csr;
22
    AVR32_SPI.csr2 = csr;
23
    AVR32_SPI.csr3 = csr;
24

25
    AVR32_SPI.MR.ps = 0;
26
    AVR32_SPI.MR.pcsdec= 0;
27
    AVR32_SPI.MR.pcs= 0b1110;  //CS0

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