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
|