Fix the nxlines configuration for the zp214xpa board

git-svn-id: http://svn.code.sf.net/p/nuttx/code/trunk@5467 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2012-12-30 21:12:43 +00:00
parent e1eacb2254
commit e88ff3cdfa
7 changed files with 68 additions and 44 deletions

View File

@ -191,6 +191,7 @@ static inline int nxlines_initialize(void)
g_nxlines.code = NXEXIT_NXOPEN; g_nxlines.code = NXEXIT_NXOPEN;
return ERROR; return ERROR;
} }
return OK; return OK;
} }

View File

@ -3843,6 +3843,6 @@
* configs/sim/nxlines: Add an nxlines configuration for the * configs/sim/nxlines: Add an nxlines configuration for the
simulator. simulator.
* configs/zp214xpa/nxlines: Add an nxlines configuration for the * configs/zp214xpa/nxlines: Add an nxlines configuration for the
ZP213x/4xPA (with the LPC2148 and the UG_2864AMBAG01). As of this ZP213x/4xPA (with the LPC2148 and the UG_2864AMBAG01). Working
writing (2012-12-30), I see only garbage on the display each time as of 2012-12-30.
the display is updated.

View File

@ -85,20 +85,16 @@
* Definitions * Definitions
****************************************************************************/ ****************************************************************************/
/* Enables debug output from this file (needs CONFIG_DEBUG too) */ /* Enables debug output from this file */
#undef SPI_DEBUG /* Define to enable debug */ #ifdef CONFIG_DEBUG_SPI
#undef SPI_VERBOSE /* Define to enable verbose debug */
#ifdef SPI_DEBUG
# define spidbg lldbg # define spidbg lldbg
# ifdef SPI_VERBOSE # ifdef CONFIG_DEBUG_VERBOSE
# define spivdbg lldbg # define spivdbg lldbg
# else # else
# define spivdbg(x...) # define spivdbg(x...)
# endif # endif
#else #else
# undef SPI_VERBOSE
# define spidbg(x...) # define spidbg(x...)
# define spivdbg(x...) # define spivdbg(x...)
#endif #endif
@ -125,17 +121,17 @@
****************************************************************************/ ****************************************************************************/
#ifndef CONFIG_SPI_OWNBUS #ifndef CONFIG_SPI_OWNBUS
static int spi_lock(FAR struct spi_dev_s *dev, bool lock); static int spi_lock(FAR struct spi_dev_s *dev, bool lock);
#endif #endif
static void spi_select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool selected); static void spi_select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool selected);
static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev, uint32_t frequency); static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev, uint32_t frequency);
static uint8_t spi_status(FAR struct spi_dev_s *dev, enum spi_dev_e devid); static uint8_t spi_status(FAR struct spi_dev_s *dev, enum spi_dev_e devid);
#ifdef CONFIG_SPI_CMDDATA #ifdef CONFIG_SPI_CMDDATA
static int spi_cmddata(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool cmd); static int spi_cmddata(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool cmd);
#endif #endif
static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t ch); static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t ch);
static void spi_sndblock(FAR struct spi_dev_s *dev, FAR const void *buffer, size_t nwords); static void spi_sndblock(FAR struct spi_dev_s *dev, FAR const void *buffer, size_t nwords);
static void spi_recvblock(FAR struct spi_dev_s *dev, FAR void *buffer, size_t nwords); static void spi_recvblock(FAR struct spi_dev_s *dev, FAR void *buffer, size_t nwords);
/**************************************************************************** /****************************************************************************
* Private Data * Private Data
@ -224,14 +220,14 @@ static void spi_select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool sel
{ {
/* Enable slave select (low enables) */ /* Enable slave select (low enables) */
spidbg("CD asserted\n"); spidbg("CS asserted\n");
putreg32(bit, CS_CLR_REGISTER); putreg32(bit, CS_CLR_REGISTER);
} }
else else
{ {
/* Disable slave select (low enables) */ /* Disable slave select (low enables) */
spidbg("CD de-asserted\n"); spidbg("CS de-asserted\n");
putreg32(bit, CS_SET_REGISTER); putreg32(bit, CS_SET_REGISTER);
/* Wait for the TX FIFO not full indication */ /* Wait for the TX FIFO not full indication */

View File

@ -338,3 +338,5 @@ Configurations:
CONFIG_HOST_LINUX=y : Linux (Cygwin under Windows okay too). CONFIG_HOST_LINUX=y : Linux (Cygwin under Windows okay too).
CONFIG_ARM_TOOLCHAIN_GNU_EABI=y : Buildroot (arm-nuttx-elf-gcc) CONFIG_ARM_TOOLCHAIN_GNU_EABI=y : Buildroot (arm-nuttx-elf-gcc)
CONFIG_RAW_BINARY=y : Output formats: ELF and raw binary CONFIG_RAW_BINARY=y : Output formats: ELF and raw binary
3. Verified as of this writing (2012-12-30).

View File

@ -86,20 +86,16 @@
* Definitions * Definitions
****************************************************************************/ ****************************************************************************/
/* Enables debug output from this file (needs CONFIG_DEBUG too) */ /* Enables debug output from this file */
#undef SPI_DEBUG /* Define to enable debug */ #ifdef CONFIG_DEBUG_SPI
#undef SPI_VERBOSE /* Define to enable verbose debug */
#ifdef SPI_DEBUG
# define spidbg lldbg # define spidbg lldbg
# ifdef SPI_VERBOSE # ifdef CONFIG_DEBUG_VERBOSE
# define spivdbg lldbg # define spivdbg lldbg
# else # else
# define spivdbg(x...) # define spivdbg(x...)
# endif # endif
#else #else
# undef SPI_VERBOSE
# define spidbg(x...) # define spidbg(x...)
# define spivdbg(x...) # define spivdbg(x...)
#endif #endif
@ -112,10 +108,12 @@
/* Use either FIO or legacy GPIO */ /* Use either FIO or legacy GPIO */
#ifdef CONFIG_LPC214x_FIO #ifdef CONFIG_LPC214x_FIO
# define CS_PIN_REGISTER (LPC214X_FIO0_BASE+LPC214X_FIO_PIN_OFFSET)
# define CS_SET_REGISTER (LPC214X_FIO0_BASE+LPC214X_FIO_SET_OFFSET) # define CS_SET_REGISTER (LPC214X_FIO0_BASE+LPC214X_FIO_SET_OFFSET)
# define CS_CLR_REGISTER (LPC214X_FIO0_BASE+LPC214X_FIO_CLR_OFFSET) # define CS_CLR_REGISTER (LPC214X_FIO0_BASE+LPC214X_FIO_CLR_OFFSET)
# define CS_DIR_REGISTER (LPC214X_FIO0_BASE+LPC214X_FIO_DIR_OFFSET) # define CS_DIR_REGISTER (LPC214X_FIO0_BASE+LPC214X_FIO_DIR_OFFSET)
#else #else
# define CS_PIN_REGISTER (LPC214X_GPIO0_BASE+LPC214X_GPIO_PIN_OFFSET)
# define CS_SET_REGISTER (LPC214X_GPIO0_BASE+LPC214X_GPIO_SET_OFFSET) # define CS_SET_REGISTER (LPC214X_GPIO0_BASE+LPC214X_GPIO_SET_OFFSET)
# define CS_CLR_REGISTER (LPC214X_GPIO0_BASE+LPC214X_GPIO_CLR_OFFSET) # define CS_CLR_REGISTER (LPC214X_GPIO0_BASE+LPC214X_GPIO_CLR_OFFSET)
# define CS_DIR_REGISTER (LPC214X_GPIO0_BASE+LPC214X_GPIO_DIR_OFFSET) # define CS_DIR_REGISTER (LPC214X_GPIO0_BASE+LPC214X_GPIO_DIR_OFFSET)
@ -130,7 +128,7 @@ static int spi_lock(FAR struct spi_dev_s *dev, bool lock);
#endif #endif
static void spi_select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool selected); static void spi_select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool selected);
static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev, uint32_t frequency); static uint32_t spi_setfrequency(FAR struct spi_dev_s *dev, uint32_t frequency);
static uint8_t spi_status(FAR struct spi_dev_s *dev, enum spi_dev_e devid); static uint8_t spi_status(FAR struct spi_dev_s *dev, enum spi_dev_e devid);
#ifdef CONFIG_SPI_CMDDATA #ifdef CONFIG_SPI_CMDDATA
static int spi_cmddata(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool cmd); static int spi_cmddata(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool cmd);
#endif #endif
@ -193,7 +191,7 @@ static struct spi_dev_s g_spidev = { &g_spiops };
#ifndef CONFIG_SPI_OWNBUS #ifndef CONFIG_SPI_OWNBUS
static int spi_lock(FAR struct spi_dev_s *dev, bool lock) static int spi_lock(FAR struct spi_dev_s *dev, bool lock)
{ {
/* Not implemented */ /* Not implemented -- the UG_2864AMBAG01 is the only device on SPI1 */
return -ENOSYS; return -ENOSYS;
} }
@ -219,25 +217,32 @@ static int spi_lock(FAR struct spi_dev_s *dev, bool lock)
static void spi_select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool selected) static void spi_select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool selected)
{ {
#ifdef CONFIG_DEBUG_SPI
uint32_t regval;
#endif
uint32_t bit = 1 << 20; uint32_t bit = 1 << 20;
/* We do not bother to check if devid == SPIDEV_DISPLAY because that is the /* We do not bother to check if devid == SPIDEV_DISPLAY because that is the
* only thing on the bus. * only thing on the bus.
*/ */
#ifdef CONFIG_DEBUG_SPI
regval = getreg32(CS_PIN_REGISTER);
#endif
if (selected) if (selected)
{ {
/* Enable slave select (low enables) */ /* Enable slave select (low enables) */
spidbg("CD asserted\n");
putreg32(bit, CS_CLR_REGISTER); putreg32(bit, CS_CLR_REGISTER);
spidbg("CS asserted: %08x->%08x\n", regval, getreg32(CS_PIN_REGISTER));
} }
else else
{ {
/* Disable slave select (low enables) */ /* Disable slave select (low enables) */
spidbg("CD de-asserted\n");
putreg32(bit, CS_SET_REGISTER); putreg32(bit, CS_SET_REGISTER);
spidbg("CS de-asserted: %08x->%08x\n", regval, getreg32(CS_PIN_REGISTER));
/* Wait for the TX FIFO not full indication */ /* Wait for the TX FIFO not full indication */
@ -345,6 +350,9 @@ static uint8_t spi_status(FAR struct spi_dev_s *dev, enum spi_dev_e devid)
#ifdef CONFIG_SPI_CMDDATA #ifdef CONFIG_SPI_CMDDATA
static int spi_cmddata(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool cmd) static int spi_cmddata(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool cmd)
{ {
#ifdef CONFIG_DEBUG_SPI
uint32_t regval;
#endif
uint32_t bit = 1 << 23; uint32_t bit = 1 << 23;
/* We do not bother to check if devid == SPIDEV_DISPLAY because that is the /* We do not bother to check if devid == SPIDEV_DISPLAY because that is the
@ -358,19 +366,23 @@ static int spi_cmddata(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool cmd
* A0 = L: the inputs at D0 to D7 are transferred to the command registers." * A0 = L: the inputs at D0 to D7 are transferred to the command registers."
*/ */
#ifdef CONFIG_DEBUG_SPI
regval = getreg32(CS_PIN_REGISTER);
#endif
if (cmd) if (cmd)
{ {
/* L: the inputs at D0 to D7 are transferred to the command registers */ /* L: the inputs at D0 to D7 are transferred to the command registers */
spidbg("Command\n");
putreg32(bit, CS_CLR_REGISTER); putreg32(bit, CS_CLR_REGISTER);
spidbg("Command: %08x->%08x\n", regval, getreg32(CS_PIN_REGISTER));
} }
else else
{ {
/* H: the inputs at D0 to D7 are treated as display data. */ /* H: the inputs at D0 to D7 are treated as display data. */
spidbg("CD de-asserted\n");
putreg32(bit, CS_SET_REGISTER); putreg32(bit, CS_SET_REGISTER);
spidbg("Data: %08x->%08x\n", regval, getreg32(CS_PIN_REGISTER));
} }
return OK; return OK;
@ -606,11 +618,15 @@ FAR struct spi_dev_s *up_spiinitialize(int port)
* for commands (also low) * for commands (also low)
*/ */
regval32 = (1 << 20) || (1 << 23); regval32 = (1 << 20) | (1 << 23);
putreg32(regval32, CS_SET_REGISTER); putreg32(regval32, CS_SET_REGISTER);
regval32 |= getreg32(CS_DIR_REGISTER); regval32 |= getreg32(CS_DIR_REGISTER);
putreg32(regval32, CS_DIR_REGISTER); putreg32(regval32, CS_DIR_REGISTER);
spidbg("CS Pin Config: PINSEL1: %08x PIN: %08x DIR: %08x\n",
getreg32(LPC214X_PINSEL1), getreg32(CS_PIN_REGISTER),
getreg32(CS_DIR_REGISTER));
/* Enable peripheral clocking to SPI1 */ /* Enable peripheral clocking to SPI1 */
regval32 = getreg32(LPC214X_PCON_PCONP); regval32 = getreg32(LPC214X_PCON_PCONP);

View File

@ -85,13 +85,15 @@
/* Use either FIO or legacy GPIO */ /* Use either FIO or legacy GPIO */
#ifdef CONFIG_LPC214x_FIO #ifdef CONFIG_LPC214x_FIO
# define CS_SET_REGISTER (LPC214X_FIO0_BASE+LPC214X_FIO_SET_OFFSET) # define RESET_PIN_REGISTER (LPC214X_FIO0_BASE+LPC214X_FIO_PIN_OFFSET)
# define CS_CLR_REGISTER (LPC214X_FIO0_BASE+LPC214X_FIO_CLR_OFFSET) # define RESET_SET_REGISTER (LPC214X_FIO0_BASE+LPC214X_FIO_SET_OFFSET)
# define CS_DIR_REGISTER (LPC214X_FIO0_BASE+LPC214X_FIO_DIR_OFFSET) # define RESET_CLR_REGISTER (LPC214X_FIO0_BASE+LPC214X_FIO_CLR_OFFSET)
# define RESET_DIR_REGISTER (LPC214X_FIO0_BASE+LPC214X_FIO_DIR_OFFSET)
#else #else
# define CS_SET_REGISTER (LPC214X_GPIO0_BASE+LPC214X_GPIO_SET_OFFSET) # define RESET_PIN_REGISTER (LPC214X_GPIO0_BASE+LPC214X_GPIO_PIN_OFFSET)
# define CS_CLR_REGISTER (LPC214X_GPIO0_BASE+LPC214X_GPIO_CLR_OFFSET) # define RESET_SET_REGISTER (LPC214X_GPIO0_BASE+LPC214X_GPIO_SET_OFFSET)
# define CS_DIR_REGISTER (LPC214X_GPIO0_BASE+LPC214X_GPIO_DIR_OFFSET) # define RESET_CLR_REGISTER (LPC214X_GPIO0_BASE+LPC214X_GPIO_CLR_OFFSET)
# define RESET_DIR_REGISTER (LPC214X_GPIO0_BASE+LPC214X_GPIO_DIR_OFFSET)
#endif #endif
/* Debug ********************************************************************/ /* Debug ********************************************************************/
@ -136,14 +138,21 @@ FAR struct lcd_dev_s *up_nxdrvinit(unsigned int devno)
/* Set the RESET line low, putting the OLED into the reset state. */ /* Set the RESET line low, putting the OLED into the reset state. */
bits32 = (1 << 18); bits32 = (1 << 18);
putreg32(bits32, CS_CLR_REGISTER); putreg32(bits32, RESET_CLR_REGISTER);
regval32 = getreg32(CS_DIR_REGISTER); regval32 = getreg32(RESET_DIR_REGISTER);
putreg32(regval32 | bits32, CS_DIR_REGISTER); putreg32(regval32 | bits32, RESET_DIR_REGISTER);
lcdvdbg("RESET Pin Config: PINSEL1: %08x PIN: %08x DIR: %08x\n",
getreg32(LPC214X_PINSEL1), getreg32(RESET_PIN_REGISTER),
getreg32(RESET_DIR_REGISTER));
/* Wait a bit then release the OLED from the reset state */ /* Wait a bit then release the OLED from the reset state */
up_mdelay(20); up_mdelay(20);
putreg32(bits32, CS_SET_REGISTER); putreg32(bits32, RESET_SET_REGISTER);
lcdvdbg("RESET release: PIN: %08x DIR: %08x\n",
getreg32(RESET_PIN_REGISTER), getreg32(RESET_DIR_REGISTER));
/* Get the SPI1 port interface */ /* Get the SPI1 port interface */

View File

@ -1148,8 +1148,8 @@ void ug2864ambag01_fill(FAR struct lcd_dev_s *dev, uint8_t color)
/* Transfer one page of the selected color */ /* Transfer one page of the selected color */
(void)SPI_SNDBLOCK(priv->spi, &priv->fb[page * UG2864AMBAG01_XRES], (void)SPI_SNDBLOCK(priv->spi, &priv->fb[page * UG2864AMBAG01_XRES],
UG2864AMBAG01_XRES); UG2864AMBAG01_XRES);
} }
/* De-select and unlock the device */ /* De-select and unlock the device */