diff options
Diffstat (limited to 'nuttx/arch/arm/src/sam34/sam_spi.c')
-rw-r--r-- | nuttx/arch/arm/src/sam34/sam_spi.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/nuttx/arch/arm/src/sam34/sam_spi.c b/nuttx/arch/arm/src/sam34/sam_spi.c index 35160ff04..7582e9495 100644 --- a/nuttx/arch/arm/src/sam34/sam_spi.c +++ b/nuttx/arch/arm/src/sam34/sam_spi.c @@ -547,7 +547,15 @@ static void spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode) if (mode != priv->mode) { #endif - /* Yes... Set the mode appropriately */ + /* Yes... Set the mode appropriately: + * + * SPI CPOL NCPHA + * MODE + * 0 0 1 + * 1 0 0 + * 2 1 1 + * 3 1 0 + */ regaddr = g_csraddr[priv->cs]; regval = getreg32(regaddr); @@ -555,19 +563,19 @@ static void spi_setmode(FAR struct spi_dev_s *dev, enum spi_mode_e mode) switch (mode) { - case SPIDEV_MODE0: /* CPOL=0; NCPHA=0 */ + case SPIDEV_MODE0: /* CPOL=0; NCPHA=1 */ + regval |= SPI_CSR_NCPHA; break; - case SPIDEV_MODE1: /* CPOL=0; NCPHA=1 */ - regval |= SPI_CSR_NCPHA; + case SPIDEV_MODE1: /* CPOL=0; NCPHA=0 */ break; - case SPIDEV_MODE2: /* CPOL=1; NCPHA=0 */ - regval |= SPI_CSR_CPOL; + case SPIDEV_MODE2: /* CPOL=1; NCPHA=1 */ + regval |= (SPI_CSR_CPOL | SPI_CSR_NCPHA); break; - case SPIDEV_MODE3: /* CPOL=1; NCPHA=1 */ - regval |= (SPI_CSR_CPOL|SPI_CSR_NCPHA); + case SPIDEV_MODE3: /* CPOL=1; NCPHA=0 */ + regval |= SPI_CSR_CPOL; break; default: |