SAMV7 QSPI: Use of CPHA in mode settings was inverted

This commit is contained in:
Gregory Nutt 2015-08-31 10:05:41 -06:00
parent 4b738ba7cc
commit 4f87a71e6d
2 changed files with 18 additions and 19 deletions

View File

@ -182,7 +182,7 @@
/* Serial Clock Register */ /* Serial Clock Register */
#define QSPI_SCR_CPOL (1 << 0) /* Bit 0: Clock Polarity */ #define QSPI_SCR_CPOL (1 << 0) /* Bit 0: Clock Polarity */
#define QSPI_SCR_NCPHA (1 << 1) /* Bit 1: Clock Phase */ #define QSPI_SCR_CPHA (1 << 1) /* Bit 1: Clock Phase */
#define QSPI_SCR_SCBR_SHIFT (8) /* Bits 8-15: Serial Clock Baud Rate */ #define QSPI_SCR_SCBR_SHIFT (8) /* Bits 8-15: Serial Clock Baud Rate */
#define QSPI_SCR_SCBR_MASK (0xff << QSPI_SCR_SCBR_SHIFT) #define QSPI_SCR_SCBR_MASK (0xff << QSPI_SCR_SCBR_SHIFT)
# define QSPI_SCR_SCBR(n) ((uint32_t)(n) << QSPI_SCR_SCBR_SHIFT) # define QSPI_SCR_SCBR(n) ((uint32_t)(n) << QSPI_SCR_SCBR_SHIFT)

View File

@ -1155,7 +1155,7 @@ static uint32_t qspi_setfrequency(struct qspi_dev_s *dev, uint32_t frequency)
/* Calculate the new actual frequency */ /* Calculate the new actual frequency */
actual = SAM_QSPI_CLOCK / scbr; actual = SAM_QSPI_CLOCK / scbr;
qspivdbg("SCR=%08x actual=%d\n", regval, actual); qspivdbg("SCBR=%d actual=%d\n", scbr, actual);
/* Save the frequency setting */ /* Save the frequency setting */
@ -1194,34 +1194,34 @@ static void qspi_setmode(struct qspi_dev_s *dev, enum qspi_mode_e mode)
{ {
/* Yes... Set the mode appropriately: /* Yes... Set the mode appropriately:
* *
* QSPI CPOL NCPHA * QSPI CPOL CPHA
* MODE * MODE
* 0 0 1 * 0 0 0
* 1 0 0 * 1 0 1
* 2 1 1 * 2 1 0
* 3 1 0 * 3 1 1
*/ */
regval = qspi_getreg(priv, SAM_QSPI_SCR_OFFSET); regval = qspi_getreg(priv, SAM_QSPI_SCR_OFFSET);
regval &= ~(QSPI_SCR_CPOL | QSPI_SCR_NCPHA); regval &= ~(QSPI_SCR_CPOL | QSPI_SCR_CPHA);
switch (mode) switch (mode)
{ {
case QSPIDEV_MODE0: /* CPOL=0; NCPHA=1 */ case QSPIDEV_MODE0: /* CPOL=0; CPHA=0 */
regval |= QSPI_SCR_NCPHA;
break; break;
case QSPIDEV_MODE1: /* CPOL=0; NCPHA=0 */ case QSPIDEV_MODE1: /* CPOL=0; CPHA=1 */
regval |= QSPI_SCR_CPHA;
break; break;
case QSPIDEV_MODE2: /* CPOL=1; NCPHA=1 */ case QSPIDEV_MODE2: /* CPOL=1; CPHA=0 */
regval |= (QSPI_SCR_CPOL | QSPI_SCR_NCPHA);
break;
case QSPIDEV_MODE3: /* CPOL=1; NCPHA=0 */
regval |= QSPI_SCR_CPOL; regval |= QSPI_SCR_CPOL;
break; break;
case QSPIDEV_MODE3: /* CPOL=1; CPHA=1 */
regval |= (QSPI_SCR_CPOL | QSPI_SCR_CPHA);
break;
default: default:
DEBUGASSERT(FALSE); DEBUGASSERT(FALSE);
return; return;
@ -1527,12 +1527,11 @@ static int qspi_hw_initialize(struct sam_qspidev_s *priv)
/* Set up the initial QSPI clock mode: /* Set up the initial QSPI clock mode:
* *
* Mode 0: CPOL=0; NCPHA=1 * Mode 0: CPOL=0; CPHA=0
*/ */
regval = qspi_getreg(priv, SAM_QSPI_SCR_OFFSET); regval = qspi_getreg(priv, SAM_QSPI_SCR_OFFSET);
regval &= ~QSPI_SCR_CPOL; regval &= ~(QSPI_SCR_CPOL | QSPI_SCR_CPHA);
regval |= QSPI_SCR_NCPHA;
qspi_putreg(priv, regval, SAM_QSPI_SCR_OFFSET); qspi_putreg(priv, regval, SAM_QSPI_SCR_OFFSET);
regval |= QSPI_SCR_SCBR(1); regval |= QSPI_SCR_SCBR(1);