//-----------------------------------------------------------------------------
// \brief   initialize the lcd controller for raster use.
//
// \param   none.
//
// \return  uint32_t
//    ERR_NO_ERROR - everything is ok...lcdc ready to use.
//    ERR_INIT_FAIL - something happened during initialization.
//-----------------------------------------------------------------------------
uint32_t LIDD_init(void)
{
   uint32_t rtn = ERR_NO_ERROR;

	/* Enable the LCD Hardware */
	EVMOMAPL138_lpscTransition(PSC1, DOMAIN0, LPSC_LCDC, PSC_ENABLE);

	/* Set MUX_MODE on UI GPIO expander to LCD */
	EVMOMAPL138_pinmuxConfig(PINMUX_LCD_D_BUS_0_REG, PINMUX_LCD_D_BUS_0_MASK, PINMUX_LCD_D_BUS_0_VALUE);
	EVMOMAPL138_pinmuxConfig(PINMUX_LCD_D_BUS_1_REG, PINMUX_LCD_D_BUS_1_MASK, PINMUX_LCD_D_BUS_1_VALUE);
	EVMOMAPL138_pinmuxConfig(PINMUX_LCD_D_BUS_2_REG, PINMUX_LCD_D_BUS_2_MASK, PINMUX_LCD_D_BUS_2_VALUE);
	EVMOMAPL138_pinmuxConfig(PINMUX_LCD_CONTROL_0_REG, PINMUX_LCD_CONTROL_0_MASK, PINMUX_LCD_CONTROL_0_VALUE);
	EVMOMAPL138_pinmuxConfig(PINMUX_LCD_CONTROL_1_REG, PINMUX_LCD_CONTROL_1_MASK, PINMUX_LCD_CONTROL_1_VALUE);

	/*
	 *  LCD Panel
	 *  8.824 MHz, raster mode pixel clock, 480-272 viewable frame
	 */
	LCD_RASTER_CTRL			&= 0xfffffffe;		// Turn raster controller off

	LCD_LIDD_CTRL			= 0x0000000C;		// LIDD mode 0x4

	LCD_LCD_STAT			= 0x000003ff;		// Clear status bits
    LCD_LCD_CTRL			= 0x00002500;		// PCLK = 150MHz / 37 = 4.054 MHz, LIDD mode

	LCD_LIDD_CS0_CONF		= 0xF7DCE3BA;
							//F     7   D     C   E    3    B     A
						    //1111 0111 1101 1100 1110 0011 1011 1010
							//gggg gfff fffe eeed dddd cccc ccbb bbaa


	//////////////////////////////////////////////////
	// Enable the Char LCD
	//////////////////////////////////////////////////
	// enable video (active low) via gpio expander and disable rmii phy to
	// ensure we have exclusive access to the bus.
	// TODO: need to update for new board rev.
	rtn = I2CGPIO_init(I2C_ADDR_GPIO_UI);
	if (rtn != ERR_NO_ERROR)
		return (ERR_NO_UI_BOARD);
/*
	rtn = EMAC_init(EMAC_INTERFACE_RMII);
	rtn |= EMAC_phyPowerDown();
	if (rtn != ERR_NO_ERROR)
		return (rtn);
*/
	// make sure we are getting a 27MHz clock.
	rtn = CDCE913_init();

	rtn |= I2CGPIO_setOutput(I2C_ADDR_GPIO_UI, I2C_GPIO_UI_ETHER_PGM_ENn, 1);
	rtn |= I2CGPIO_setOutput(I2C_ADDR_GPIO_UI, I2C_GPIO_UI_SELA, 0);
	rtn |= I2CGPIO_setOutput(I2C_ADDR_GPIO_UI, I2C_GPIO_UI_SELB, 0);
	rtn |= I2CGPIO_setOutput(I2C_ADDR_GPIO_UI, I2C_GPIO_UI_SELC, 0);

	return (rtn);
}
Beispiel #2
0
void SetGpio(void)
{
	uint32_t	errchk;

	EVMOMAPL138_pinmuxConfig(PINMUX_MCASP_REG_17,PINMUX_MCASP_MASK_17,PINMUX_MCASP_VAL_17);
	errchk=GPIO_setDir(GPIO_BANK7,GPIO_PIN7,GPIO_OUTPUT);

}
//-----------------------------------------------------------------------------
// \brief   initialize the given spi port.
//
// \param   spi_regs_t *spi - pointer to reg struct for the desired spi port.
//
// \param   spi_config_t *in_config - desired spi configuration.
//
// \return  uint32_t
//    ERR_NO_ERROR - everything is ok...spi ready to use.
//    ERR_INIT_FAIL - something happened during initialization.
//-----------------------------------------------------------------------------
uint32_t SPI_init(spi_regs_t *spi, spi_config_t *in_config)
{
   uint32_t rtn = ERR_INIT_FAIL;
   
   // enable the psc and config pinmux for the given spi port.
   switch ((uint32_t)spi)
   {
      case SPI0_REG_BASE:
         EVMOMAPL138_lpscTransition(PSC0, DOMAIN0, LPSC_SPI0, PSC_ENABLE);
         EVMOMAPL138_pinmuxConfig(PINMUX_SPI0_REG_0, PINMUX_SPI0_MASK_0, PINMUX_SPI0_VAL_0);
         EVMOMAPL138_pinmuxConfig(PINMUX_SPI0_REG_1, PINMUX_SPI0_MASK_1, PINMUX_SPI0_VAL_1);
         break;
         
      case SPI1_REG_BASE:
         EVMOMAPL138_lpscTransition(PSC1, DOMAIN0, LPSC_SPI1, PSC_ENABLE);
         EVMOMAPL138_pinmuxConfig(PINMUX_SPI1_REG, PINMUX_SPI1_MASK, PINMUX_SPI1_VAL);
         break;
      
      default:
         return (ERR_INIT_FAIL);
   }

   if (in_config != NULL)
   {
      uint32_t prescaler;
      
      // reset spi port.
      spi->SPIGCR0 = 0;
      USTIMER_delay(5);
      SETBIT(spi->SPIGCR0, RESET);
      
      // config master/slave mode.
      if (SPI_MODE_MASTER == in_config->mode)
      {
         // set clkmod and master for master mode.
         spi->SPIGCR1 = CLKMOD | MASTER;
      }
      else if (SPI_MODE_SLAVE == in_config->mode)
      {
         // clear spigcr1 for slave mode.
         spi->SPIGCR1 = 0;
      }
      else
      {
         return (ERR_INIT_FAIL);
      }
      
      // config pin options.
      switch (in_config->pin_option)
      {
         case SPI_3PIN:
            // enable spi SOMI, SIMO, and CLK.
            spi->SPIPC0 = SOMI | SIMO | CLK;
            // config SCS0 as gpio output.
            SETBIT(spi->SPIPC1, SCS0);
            break;

         case SPI_4PIN_CS:
            // enable spi SOMI, SIMO, CLK, and SCS0.
            spi->SPIPC0 = SOMI | SIMO | CLK | SCS0;
            break;

         case SPI_4PIN_EN:
            // enable spi SOMI, SIMO, CLK, and ENA.
            spi->SPIPC0 = SOMI | SIMO | CLK | ENA;
            break;

         case SPI_5PIN:
            // enable spi SOMI, SIMO, CLK, SCS0, and ENA.
            spi->SPIPC0 = SOMI | SIMO | CLK | ENA | SCS0;
            break;

         default:
            return (ERR_INIT_FAIL);
      }
      
      // config the cs active...high or low.
      spi->SPIDEF = 0;
      if (SPI_CS_ACTIVE_LOW == in_config->cs_active)
      {
         // clear csnr for active low and set cs default to 1.
         spi->SPIDAT1 = 0;
         SETBIT(spi->SPIDEF, CSDEF0);
      }
      else if (SPI_CS_ACTIVE_HIGH == in_config->cs_active)
      {
         // set csnr for active high and set cs default to 0.
         spi->SPIDAT1 = 0;
         SETBIT(spi->SPIDAT1, CSNR);
      }
      else
      {
         return (ERR_INIT_FAIL);
      }
      
      // config spi direction, polarity, and phase.
      spi->SPIFMT0 = 0;
      
      if (SPI_SHIFT_LSB == in_config->shift_dir)
      {
         SETBIT(spi->SPIFMT0, SHIFTDIR);
      }
      
      if (in_config->polarity)
      {
         SETBIT(spi->SPIFMT0, POLARITY);
      }
      
      if (in_config->phase)
      {
         SETBIT(spi->SPIFMT0, PHASE);
      }
      
      // set the prescaler and character length.
      prescaler = (((SYSCLOCK2_HZ / in_config->freq) - 1) & 0xFF);
      #ifdef DEBUG
      printf("desired spi freq: %u\r\n", in_config->freq);
      printf("spi sysclock:     %u\r\n", SYSCLOCK2_HZ);
      printf("prescaler set to: %u\r\n", prescaler);
      #endif
      SETBIT(spi->SPIFMT0, (prescaler << SHIFT_PRESCALE));
      SETBIT(spi->SPIFMT0, (DEFAULT_CHAR_LEN << SHIFT_CHARLEN));
      
      spi->SPIDELAY = (8 << 24) | (8 << 16);

      // disable interrupts.
      spi->SPIINT = 0x00;
      spi->SPILVL = 0x00;
      
      // enable spi.
      SETBIT(spi->SPIGCR1, ENABLE);

      rtn = ERR_NO_ERROR;
   }

   return (rtn);
}