More lpc17xx LCD logic (still incomplete)
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5787 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
b3637d57a2
commit
c539bd5037
@ -117,166 +117,130 @@
|
|||||||
/* Register Bitfield Definitions ****************************************************************/
|
/* Register Bitfield Definitions ****************************************************************/
|
||||||
|
|
||||||
/* LCD_TIMH - Horizontal Timing Register */
|
/* LCD_TIMH - Horizontal Timing Register */
|
||||||
/* Bits 0-1: Reserved */
|
/* Bits 0-1: Reserved */
|
||||||
#define LCD_TIMH_PPL_SHIFT (2) /* Bits 2-7: Pixels Per Line - 16-1024ppl */
|
#define LCD_TIMH_PPL_SHIFT (2) /* Bits 2-7: Pixels Per Line - 16-1024ppl */
|
||||||
#define LCD_TIMH_PPL_MASK (0x3f << LCD_TIMH_PPL_SHIFT)
|
#define LCD_TIMH_PPL_MASK (0x3f << LCD_TIMH_PPL_SHIFT)
|
||||||
#define LCD_TIMH_HSW_SHIFT (8) /* Bits 8-15: Horizontal Sync Pulse Width */
|
#define LCD_TIMH_HSW_SHIFT (8) /* Bits 8-15: Horizontal Sync Pulse Width */
|
||||||
#define LCD_TIMH_HWS_MASK (0xff << LCD_TIMH_HSW_SHIFT)
|
#define LCD_TIMH_HWS_MASK (0xff << LCD_TIMH_HSW_SHIFT)
|
||||||
#define LCD_TIMH_HFP_SHIFT (16) /* Bits 16-23: Horizontal Front Porch */
|
#define LCD_TIMH_HFP_SHIFT (16) /* Bits 16-23: Horizontal Front Porch */
|
||||||
#define LCD_TIMH_HFP_MASK (0xff << LCD_TIMH_HFP_SHIFT)
|
#define LCD_TIMH_HFP_MASK (0xff << LCD_TIMH_HFP_SHIFT)
|
||||||
#define LCD_TIMH_HBP_SHIFT (24) /* Bits 24-31: Horizontal Back Porch */
|
#define LCD_TIMH_HBP_SHIFT (24) /* Bits 24-31: Horizontal Back Porch */
|
||||||
#define LCD_TIMH_HBP_MASK (0xff << LCD_TIMH_HBP_SHIFT)
|
#define LCD_TIMH_HBP_MASK (0xff << LCD_TIMH_HBP_SHIFT)
|
||||||
|
|
||||||
/* LCD_TIMV - Vertical Timing Register */
|
/* LCD_TIMV - Vertical Timing Register */
|
||||||
|
|
||||||
#define LCD_TIMV_LPP_SHIFT (0) /* Bits 0-9: Lines Per Panel 1-1024 lpp*/
|
#define LCD_TIMV_LPP_SHIFT (0) /* Bits 0-9: Lines Per Panel 1-1024 lpp*/
|
||||||
#define LCD_TIMV_LPP_MASK (0x3ff << LCD_TIMV_LPP_SHIFT)
|
#define LCD_TIMV_LPP_MASK (0x3ff << LCD_TIMV_LPP_SHIFT)
|
||||||
#define LCD_TIMV_VSW_SHIFT (10) /* Bits 10-15: Vertical Synch Pulse Width */
|
#define LCD_TIMV_VSW_SHIFT (10) /* Bits 10-15: Vertical Synch Pulse Width */
|
||||||
#define LCD_TIMV_VSW_MASK (0x3f << LCD_TIMV_VSW_SHIFT)
|
#define LCD_TIMV_VSW_MASK (0x3f << LCD_TIMV_VSW_SHIFT)
|
||||||
#define LCD_TIMV_VFP_SHIFT (16) /* Bits 16-23: Vertical Front Porch */
|
#define LCD_TIMV_VFP_SHIFT (16) /* Bits 16-23: Vertical Front Porch */
|
||||||
#define LCD_TIMV_VFP_MASK (0xff << LCD_TIMV_VFP_SHIFT)
|
#define LCD_TIMV_VFP_MASK (0xff << LCD_TIMV_VFP_SHIFT)
|
||||||
#define LCD_TIMV_VBP_SHIFT (24) /* Bits 24-31: Vertical Back Porch */
|
#define LCD_TIMV_VBP_SHIFT (24) /* Bits 24-31: Vertical Back Porch */
|
||||||
#define LCD_TIMV_VBP_MASK (0xff << LCD_TIMV_VBP_SHIFT)
|
#define LCD_TIMV_VBP_MASK (0xff << LCD_TIMV_VBP_SHIFT)
|
||||||
|
|
||||||
/* LCD_POL - Clock and Signal Polarity Register */
|
/* LCD_POL - Clock and Signal Polarity Register */
|
||||||
|
|
||||||
#define LCD_POL_PCDLO_SHIFT (0) /* Bits 0-4: Lower 5 bits of panel clock divisor */
|
#define LCD_POL_PCDLO_SHIFT (0) /* Bits 0-4: Lower 5 bits of panel clock divisor */
|
||||||
#define LCD_POL_PCDLO_MASK (0x1f << LCD_POL_PCDLO_SHIFT)
|
#define LCD_POL_PCDLO_MASK (0x1f << LCD_POL_PCDLO_SHIFT)
|
||||||
#define LCD_POL_CLKSEL_SHIFT (5) /* Bit 5: Clock select- 0=CCLK, 1=LCD_CLKIN */
|
#define LCD_POL_CLKSEL (1 << 5) /* Bit 5: Clock select- 0=CCLK, 1=LCD_CLKIN */
|
||||||
#define LCD_POL_CLKSEL_MASK (1 << LCD_POL_CLKSEL_SHIFT)
|
#define LCD_POL_ACB_SHIFT (6) /* Bits 6-10: AC bias pin frequency */
|
||||||
#define LCD_POL_ACB_SHIFT (6) /* Bits 6-10: AC bias pin frequency */
|
|
||||||
#define LCD_POL_ACB_MASK (0x1f << LCD_POL_ACB_SHIFT)
|
#define LCD_POL_ACB_MASK (0x1f << LCD_POL_ACB_SHIFT)
|
||||||
#define LCD_POL_IVS_SHIFT (11) /* Bit 11: Invert vertical sync */
|
#define LCD_POL_IVS (1 << 11) /* Bit 11: Invert vertical sync */
|
||||||
#define LCD_POL_IVS_MASK (1 << LCD_POL_IVS_SHIFT)
|
#define LCD_POL_IHS (1 << 12) /* Bit 12: Invert horizontal sync */
|
||||||
#define LCD_POL_IHS_SHIFT (12) /* Bit 12: Invert horizontal sync */
|
#define LCD_POL_IPC (1 << 13) /* Bit 13: Invert panel clock */
|
||||||
#define LCD_POL_IHS_MASK (1 << LCD_POL_IHS_SHIFT)
|
#define LCD_POL_IOE (1 << 14) /* Bit 14: Invert output enable */
|
||||||
#define LCD_POL_IPC_SHIFT (13) /* Bit 13: Invert panel clock */
|
/* Bit 15: Reserved */
|
||||||
#define LCD_POL_IPC_MASK (1 << LCD_POL_IPC_SHIFT)
|
#define LCD_POL_CPL_SHIFT (16) /* Bit 16-25: Clocks per line */
|
||||||
#define LCD_POL_IOE_SHIFT (14) /* Bit 14: Invert output enable */
|
|
||||||
#define LCD_POL_IOE_MASK (1 << LCD_POL_IOE_SHIFT)
|
|
||||||
/* Bit 15: Reserved */
|
|
||||||
#define LCD_POL_CPL_SHIFT (16) /* Bit 16-25: Clocks per line */
|
|
||||||
#define LCD_POL_CPL_MASK (0x3ff << LCD_POL_CPL_SHIFT)
|
#define LCD_POL_CPL_MASK (0x3ff << LCD_POL_CPL_SHIFT)
|
||||||
#define LCD_POL_BCD_SHIFT (26) /* Bit 26: Bypass pixel clock divider */
|
#define LCD_POL_BCD (1 << 26) /* Bit 26: Bypass pixel clock divider */
|
||||||
#define LCD_POL_BCD_MASK (1 << LCD_POL_BCD_SHIFT)
|
#define LCD_POL_PCDHI_SHIFT (27) /* Bits 27-31: Upper 5 bits of panel clock divisor */
|
||||||
#define LCD_POL_PCDHI_SHIFT (27) /* Bits 27-31: Upper 5 bits of panel clock divisor */
|
|
||||||
#define LCD_POL_PCDHI_MASK (0x1f << LCD_POL_PCDHI_SHIFT)
|
#define LCD_POL_PCDHI_MASK (0x1f << LCD_POL_PCDHI_SHIFT)
|
||||||
|
|
||||||
/* LCD_LE - Line End Control Register */
|
/* LCD_LE - Line End Control Register */
|
||||||
|
|
||||||
#define LCD_LE_LED_SHIFT (0) /* Bits 0-6: Line End delay */
|
#define LCD_LE_LED_SHIFT (0) /* Bits 0-6: Line End delay */
|
||||||
#define LCD_LE_LED_MASK (0x7f << LCD_LE_LED_SHIFT)
|
#define LCD_LE_LED_MASK (0x7f << LCD_LE_LED_SHIFT)
|
||||||
/* Bits 7-15: Reserved */
|
/* Bits 7-15: Reserved */
|
||||||
#define LCD_LE_LEE_SHIFT (16) /* Bit16: LCD line end enable */
|
#define LCD_LE_LEE (1 << 16) /* Bit 16: LCD line end enable */
|
||||||
#define LCD_LE_LEE_MASK (1 << LCD_LE_LEE_SHIFT)
|
/* Bit 17-31: Reserved */
|
||||||
/* Bit 17-31: Reserved */
|
|
||||||
/* LCD_UPBASE - Upper Panel Frame Base Address Register */
|
/* LCD_UPBASE - Upper Panel Frame Base Address Register */
|
||||||
/* Bits 0-2: Reserved */
|
/* Bits 0-2: Reserved */
|
||||||
#define LCD_UPBASE_LCDUPBASE_SHIFT (3) /* Bits 3-31: LCD upper panel base address */
|
#define LCD_UPBASE_LCDUPBASE_SHIFT (3) /* Bits 3-31: LCD upper panel base address */
|
||||||
#define LCD_UPBASE_LCDUPBASE_MASK (0x1FFFFFFF << LCD_UPBASE_LCDUPBASE_SHIFT)
|
#define LCD_UPBASE_LCDUPBASE_MASK (0x1FFFFFFF << LCD_UPBASE_LCDUPBASE_SHIFT)
|
||||||
|
|
||||||
/* LCD_UPBASE - Lower Panel Frame Base Address Register */
|
/* LCD_UPBASE - Lower Panel Frame Base Address Register */
|
||||||
/* Bits 0-2: Reserved */
|
/* Bits 0-2: Reserved */
|
||||||
#define LCD_UPBASE_LCDLPBASE_SHIFT (3) /* Bits 3-31: LCD lower panel base address */
|
#define LCD_UPBASE_LCDLPBASE_SHIFT (3) /* Bits 3-31: LCD lower panel base address */
|
||||||
#define LCD_UPBASE_LCDLPBASE_MASK (0x1FFFFFFF << LCD_UPBASE_LCDUPBASE_SHIFT)
|
#define LCD_UPBASE_LCDLPBASE_MASK (0x1FFFFFFF << LCD_UPBASE_LCDUPBASE_SHIFT)
|
||||||
|
|
||||||
/* LCD_CTRL - Controle Register */
|
/* LCD_CTRL - Controle Register */
|
||||||
|
|
||||||
#define LCD_CTRL_LCDEN_SHIFT (0) /* Bit 0: LCD enable control bit */
|
#define LCD_CTRL_LCDEN (1 << 0) /* Bit 0: LCD enable control bit */
|
||||||
#define LCD_CTRL_LCDEN_MASK (1 << LCD_CTRL_LCDEN_SHIFT)
|
#define LCD_CTRL_LCDBPP_SHIFT (1) /* Bits 1-3: LCD bits per pixel */
|
||||||
#define LCD_CTRL_LCDBPP_SHIFT (1) /* Bits 1-3: LCD bits per pixel */
|
|
||||||
#define LCD_CTRL_LCDBPP_MASK (7 << LCD_CTRL_LCDBPP_SHIFT)
|
#define LCD_CTRL_LCDBPP_MASK (7 << LCD_CTRL_LCDBPP_SHIFT)
|
||||||
#define LCD_CTRL_LCDBW_SHIFT (4) /* Bit 4: STN LCD monochrome/color selection */
|
#define LCD_CTRL_LCDBW (1 << 4) /* Bit 4: STN LCD monochrome/color selection */
|
||||||
#define LCD_CTRL_LCDBW_MASK (1 << LCD_CTRL_LCDBW_SHIFT)
|
#define LCD_CTRL_LCDTFT (1 << 5) /* Bit 5: LCD TFT type selection */
|
||||||
#define LCD_CTRL_LCDTFT_SHIFT (5) /* Bit 5: LCD TFT type selection */
|
#define LCD_CTRL_LCDMONO8 (1 << 6) /* Bit 6: Monochrome LCD interface bit */
|
||||||
#define LCD_CTRL_LCDTFT_MASK (1 << LCD_CTRL_LCDTFT_SHIFT)
|
#define LCD_CTRL_LCDDUAL (1 << 7) /* Bit 7: Single or Dual LCD panel selection */
|
||||||
#define LCD_CTRL_LCDMONO8_SHIFT (6) /* Bit 6: Monochrome LCD interface bit */
|
#define LCD_CTRL_BGR (1 << 8) /* Bit 8: Color format */
|
||||||
#define LCD_CTRL_LCDMONO8_MASK (1 << LCD_CTRL_LCDMONO8_SHIFT)
|
#define LCD_CTRL_BEBO (1 << 9) /* Bit 9: Big-Endian Byte Order */
|
||||||
#define LCD_CTRL_LCDDUAL_SHIFT (7) /* Bit 7: Single or Dual LCD panel selection */
|
#define LCD_CTRL_BEPO (1 << 10) /* Bit 10: Big-Endian Pixel Ordering */
|
||||||
#define LCD_CTRL_LCDDUAL_MASK (1 << LCD_CTRL_LCDDUAL_SHIFT)
|
#define LCD_CTRL_LCDPWR (1 << 11) /* Bit 11: LCD Power enable */
|
||||||
#define LCD_CTRL_BGR_SHIFT (8) /* Bit 8: Color format */
|
#define LCD_CTRL_LCDVCOMP_SHIFT (12) /* Bits 12-13: LCD Vertical compare interrupt */
|
||||||
#define LCD_CTRL_BGR_MASK (1 << LCD_CTRL_BGR_SHIFT)
|
|
||||||
#define LCD_CTRL_BEBO_SHIFT (9) /* Bit 9: Big-Endian Byte Order */
|
|
||||||
#define LCD_CTRL_BEBO_MASK (1 << LCD_CTRL_BEBO_SHIFT)
|
|
||||||
#define LCD_CTRL_BEPO_SHIFT (10) /* Bit 10: Big-Endian Pixel Ordering */
|
|
||||||
#define LCD_CTRL_BEPO_MASK (1 << LCD_CTRL_BEPO_SHIFT)
|
|
||||||
#define LCD_CTRL_LCDPWR_SHIFT (11) /* Bit 11: LCD Power enable */
|
|
||||||
#define LCD_CTRL_LCDPWR_MASK (1 << LCD_CTRL_LCDPWR_SHIFT)
|
|
||||||
#define LCD_CTRL_LCDVCOMP_SHIFT (12) /* Bits 12-13: LCD Vertical compare interrupt */
|
|
||||||
#define LCD_CTRL_LCDVCOMP_MASK (3 << LCD_CTRL_LCDVCOMP_SHIFT)
|
#define LCD_CTRL_LCDVCOMP_MASK (3 << LCD_CTRL_LCDVCOMP_SHIFT)
|
||||||
/* Bits 14-15: Reserved */
|
/* Bits 14-15: Reserved */
|
||||||
#define LCD_CTRL_WATERMARK_SHIFT (16) /* Bit 16: LCD DMA FIFO watermark level */
|
#define LCD_CTRL_WATERMARK (1 << 16) /* Bit 16: LCD DMA FIFO watermark level */
|
||||||
#define LCD_CTRL_WATERMARK_MASK (1 << LCD_CTRL_WATERMARK_SHIFT)
|
/* Bits 17-31: Reserved */
|
||||||
/* Bits 17-31: Reserved */
|
|
||||||
/* LCD_INTMSK - Interrupt Mask Register */
|
/* LCD_INTMSK - Interrupt Mask Register */
|
||||||
/* Bits 0: Reserved */
|
/* Bits 0: Reserved */
|
||||||
#define LCD_INTMSK_FUFIM_SHIFT (1) /* Bit 1: FIFO underflow interrupt enable */
|
#define LCD_INTMSK_FUFIM (1 << 1) /* Bit 1: FIFO underflow interrupt enable */
|
||||||
#define LCD_INTMSK_FUFIM_MASK (1 << LCD_INTMSK_FUFIM_SHIFT)
|
#define LCD_INTMSK_LNBUIM (1 << 2) /* Bit 2: LCD next base address interrupt enable */
|
||||||
#define LCD_INTMSK_LNBUIM_SHIFT (2) /* Bit 2: LCD next base address interrupt enable */
|
#define LCD_INTMSK_VCOMPIM (1 << 3) /* Bit 3: Vertical compare interrupt enable */
|
||||||
#define LCD_INTMSK_LNBUIM_MASK (1 << LCD_INTMSK_LNBUIM_SHIFT)
|
#define LCD_INTMSK_BERIM (1 << 4) /* Bit 4: AHB Master error interrupt enable */
|
||||||
#define LCD_INTMSK_VCOMPIM_SHIFT (3) /* Bit 3: Vertical compare interrupt enable */
|
/* Bits 5-31: Reserved */
|
||||||
#define LCD_INTMSK_VCOMPIM_MASK (1 << LCD_INTMSK_VCOMPIM_SHIFT)
|
|
||||||
#define LCD_INTMSK_BERIM_SHIFT (4) /* Bit 4: AHB Master error interrupt enable */
|
|
||||||
#define LCD_INTMSK_BERIM_MASK (1 << LCD_INTMSK_BERIM_SHIFT)
|
|
||||||
/* Bits 5-31: Reserved */
|
|
||||||
/* LCD_INTRAW - Raw Interrupt Status Register */
|
/* LCD_INTRAW - Raw Interrupt Status Register */
|
||||||
/* Bits 0: Reserved */
|
/* Bits 0: Reserved */
|
||||||
#define LCD_INTRAW_FUFRIS_SHIFT (1) /* Bit 1: FIFO Undeflow raw interrupt status */
|
#define LCD_INTRAW_FUFRIS (1 << 1) /* Bit 1: FIFO Undeflow raw interrupt status */
|
||||||
#define LCD_INTRAW_FUFRIS_MASK (1 << LCD_INTRAW_FUFRIS_SHIFT)
|
#define LCD_INTRAW_LNBURIS (1 << 2) /* Bit 2: LCD Next address base update intterupt */
|
||||||
#define LCD_INTRAW_LNBURIS_SHIFT (2) /* Bit 2: LCD Next address base update intterupt */
|
#define LCD_INTRAW_VCOMPRIS (1 << 3) /* Bit 3: Vertical compare interrupt status */
|
||||||
#define LCD_INTRAW_LNBURIS_MASK (1 << LCD_INTRAW_LNBURIS_SHIFT)
|
#define LCD_INTRAW_BERRAW (1 << 4) /* Bit 4: AHB Master bus error interrupt status */
|
||||||
#define LCD_INTRAW_VCOMPRIS_SHIFT (3) /* Bit 3: Vertical compare interrupt status */
|
/* Bits 5-31: Reserved */
|
||||||
#define LCD_INTRAW_VCOMPRIS_MASK (1 << LCD_INTRAW_VCOMPRIS_SHIFT)
|
|
||||||
#define LCD_INTRAW_BERRAW_SHIFT (4) /* Bit 4: AHB Master bus error interrupt status */
|
|
||||||
#define LCD_INTRAW_BERRAW_MASK (1 << LCD_INTRAW_BERRAW_SHIFT)
|
|
||||||
/* Bits 5-31: Reserved */
|
|
||||||
/* LCD_INTSTAT - Masked Interrupt Status Register */
|
/* LCD_INTSTAT - Masked Interrupt Status Register */
|
||||||
/* Bits 0: Reserved */
|
/* Bits 0: Reserved */
|
||||||
#define LCD_INTSTAT_FUFMIS_SHIFT (1) /* Bit 1: FIFO Undeflow raw interrupt status */
|
#define LCD_INTSTAT_FUFMIS (1 << 1) /* Bit 1: FIFO Undeflow raw interrupt status */
|
||||||
#define LCD_INTSTAT_FUFMIS_MASK (1 << LCD_INTSTAT_FUFMIS_SHIFT)
|
#define LCD_INTSTAT_LNBUMIS (1 << 2) /* Bit 2: LCD Next address base update intterupt */
|
||||||
#define LCD_INTSTAT_LNBUMIS_SHIFT (2) /* Bit 2: LCD Next address base update intterupt */
|
#define LCD_INTSTAT_VCOMPMIS (1 << 3) /* Bit 3: Vertical compare interrupt status */
|
||||||
#define LCD_INTSTAT_LNBUMIS_MASK (1 << LCD_INTSTAT_LNBUMIS_SHIFT)
|
#define LCD_INTSTAT_BERMIS (1 << 4) /* Bit 4: AHB Master bus error interrupt status */
|
||||||
#define LCD_INTSTAT_VCOMPMIS_SHIFT (3) /* Bit 3: Vertical compare interrupt status */
|
/* Bits 15-31: Reserved */
|
||||||
#define LCD_INTSTAT_VCOMPMIS_MASK (1 << LCD_INTSTAT_VCOMPMIS_SHIFT)
|
|
||||||
#define LCD_INTSTAT_BERMIS_SHIFT (4) /* Bit 4: AHB Master bus error interrupt status */
|
|
||||||
#define LCD_INTSTAT_BERMIS_MASK (1 << LCD_INTSTAT_BERMIS_SHIFT)
|
|
||||||
/* Bits 15-31: Reserved */
|
|
||||||
/* LCD_INTCLR - Interrupt Clear Register */
|
/* LCD_INTCLR - Interrupt Clear Register */
|
||||||
/* Bits 0: Reserved */
|
/* Bits 0: Reserved */
|
||||||
#define LCD_INTCLR_FUFIC_SHIFT (1) /* Bit 1: FIFO Undeflow raw interrupt clear */
|
#define LCD_INTCLR_FUFIC (1 << 1) /* Bit 1: FIFO Undeflow raw interrupt clear */
|
||||||
#define LCD_INTCLR_FUFIC_MASK (1 << LCD_INTCLR_FUFIC_SHIFT)
|
#define LCD_INTCLR_LNBUIC (1 << 2) /* Bit 2: LCD Next address base update intterupt */
|
||||||
#define LCD_INTCLR_LNBUIC_SHIFT (2) /* Bit 2: LCD Next address base update intterupt */
|
#define LCD_INTCLR_VCOMPIC (1 << 3) /* Bit 3: Vertical compare interrupt clear */
|
||||||
#define LCD_INTCLR_LNBUIC_MASK (1 << LCD_INTCLR_LNBUIC_SHIFT)
|
#define LCD_INTCLR_BERIC (1 << 4) /* Bit 4: AHB Master bus error interrupt clear */
|
||||||
#define LCD_INTCLR_VCOMPIC_SHIFT (3) /* Bit 3: Vertical compare interrupt clear */
|
/* Bits 15-31: Reserved */
|
||||||
#define LCD_INTCLR_VCOMPIC_MASK (1 << LCD_INTCLR_VCOMPIC_SHIFT)
|
|
||||||
#define LCD_INTCLR_BERIC_SHIFT (4) /* Bit 4: AHB Master bus error interrupt clear */
|
|
||||||
#define LCD_INTCLR_BERIC_MASK (1 << LCD_INTCLR_BERIC_SHIFT)
|
|
||||||
/* Bits 15-31: Reserved */
|
|
||||||
|
|
||||||
/* Upper and Lower Panel Address register has no bitfields */
|
/* Upper and Lower Panel Address register has no bitfields */
|
||||||
/*
|
/*
|
||||||
* Upper Panel Current Address register (LCDUPCURR)
|
* Upper Panel Current Address register (LCDUPCURR)
|
||||||
* Lower Panel Current Address register (LCDLPCURR)
|
* Lower Panel Current Address register (LCDLPCURR)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* LCD_PAL - Color Palette Register */
|
/* LCD_PAL - Color Palette Registers */
|
||||||
|
|
||||||
#define LCD_PAL_R04_0_SHIFT (0) /* Bits 0-4: Red palette data */
|
#define LCD_PAL_R0_SHIFT (0) /* Bits 0-4: Red palette data */
|
||||||
#define LCD_PAL_R04_0_MASK (0x1f << LCD_PAL_R04_0_SHIFT)
|
#define LCD_PAL_R0_MASK (0x1f << LCD_PAL_R0_SHIFT)
|
||||||
#define LCD_PAL_G04_0_SHIFT (5) /* Bits 5-9: Green palette data */
|
#define LCD_PAL_G0_SHIFT (5) /* Bits 5-9: Green palette data */
|
||||||
#define LCD_PAL_G04_0_MASK (0x1f << LCD_PAL_G04_0_SHIFT)
|
#define LCD_PAL_G0_MASK (0x1f << LCD_PAL_G0_SHIFT)
|
||||||
#define LCD_PAL_B04_0_SHIFT (10) /* Bits 10-14: Blue paletted data */
|
#define LCD_PAL_B0_SHIFT (10) /* Bits 10-14: Blue paletted data */
|
||||||
#define LCD_PAL_B04_0_MASK (0x1f << LCD_PAL_B04_0_SHIFT)
|
#define LCD_PAL_B0_MASK (0x1f << LCD_PAL_B0_SHIFT)
|
||||||
#define LCD_PAL_I0_SHIFT (15) /* Bit 15: Intensity/Unused bit */
|
#define LCD_PAL_I0 (1 << 15) /* Bit 15: Intensity/Unused bit */
|
||||||
#define LCD_PAL_I0_MASK (1 << LCD_PAL_I0_SHIFT)
|
#define LCD_PAL_R1_SHIFT (16) /* Bits 16-20: Red palette data */
|
||||||
#define LCD_PAL_R14_0_SHIFT (16) /* Bit 16-20: Reda palette data */
|
#define LCD_PAL_R1_MASK (0x1f << LCD_PAL_R1_SHIFT)
|
||||||
#define LCD_PAL_R14_0_MASK (0x1f << LCD_PAL_R14_0_SHIFT)
|
#define LCD_PAL_G1_SHIFT (21) /* Bits 21-25: Green palette data */
|
||||||
#define LCD_PAL_G14_0_SHIFT (21) /* Bit 21-25: Green palette data */
|
#define LCD_PAL_G1_MASK (0x1f << LCD_PAL_G1_SHIFT)
|
||||||
#define LCD_PAL_G14_0_MASK (0x1f << LCD_PAL_G14_0_SHIFT)
|
#define LCD_PAL_B1_SHIFT (26) /* Bits 26-30: Blue palette data */
|
||||||
#define LCD_PAL_B14_0_SHIFT (26) /* Bit 26-30: Blue palette data */
|
#define LCD_PAL_B1_MASK (0x1f << LCD_PAL_B1_SHIFT)
|
||||||
#define LCD_PAL_B14_0_MASK (0x1f << LCD_PAL_B14_0_SHIFT)
|
#define LCD_PAL_I1 (1 << 31) /* Bit 31: Intensity/Unused bit */
|
||||||
#define LCD_PAL_I1_SHIFT (31) /* Bit 31: Intensity/Unused bit */
|
|
||||||
#define LCD_PAL_I1_MASK (1 << LCD_PAL_I1_SHIFT)
|
|
||||||
|
|
||||||
/* LCD_CRSR_IMG - Cursor Image Register - has no bitfields */
|
/* LCD_CRSR_IMG - Cursor Image Register - has no bitfields */
|
||||||
/* The 256 words of the cursor image register defines the appearance
|
/* The 256 words of the cursor image register defines the appearance
|
||||||
@ -285,12 +249,12 @@
|
|||||||
|
|
||||||
/* LCD CRSR_CTRL - Cursor Control Register */
|
/* LCD CRSR_CTRL - Cursor Control Register */
|
||||||
|
|
||||||
#define LCD_CRSR_CTRL_CRSON_SHIFT (0) /* Bit 0: Cursor enable */
|
#define LCD_CRSR_CTRL_CRSON (1 << 0) /* Bit 0: Cursor enable */
|
||||||
#define LCD_CRSR_CTRL_CRSON_MASK (1 << LCD_CRSR_CTRL_CRSON_SHIFT)
|
#define LCD_CRSR_CTRL_CRSON_MASK (1 << LCD_CRSR_CTRL_CRSON_SHIFT)
|
||||||
/* Bit 1-3: Reserved */
|
/* Bits 1-3: Reserved */
|
||||||
#define LCD_CRSR_CTRL_CRSRNUM1_0_SHIFT (4) /* Bit 4-5: Cursor image number */
|
#define LCD_CRSR_CTRL_CRSRNUM_SHIFT (4) /* Bits 4-5: Cursor image number */
|
||||||
#define LCD_CRSR_CTRL_CRSRNUM1_0_MASK (3 << LCD_CRSR_CTRL_CRSRNUM1_0_SHIFT)
|
#define LCD_CRSR_CTRL_CRSRNUM_MASK (3 << LCD_CRSR_CTRL_CRSRNUM1_0_SHIFT)
|
||||||
/* Bit 6-31: Reserved */
|
/* Bits 6-31: Reserved */
|
||||||
/* If the selected cursor is 32x32 */
|
/* If the selected cursor is 32x32 */
|
||||||
|
|
||||||
#define LCD_CURSOR0 (0)
|
#define LCD_CURSOR0 (0)
|
||||||
@ -300,71 +264,57 @@
|
|||||||
|
|
||||||
/* LCD CRSR_CFG - Cursor Configuration Register */
|
/* LCD CRSR_CFG - Cursor Configuration Register */
|
||||||
|
|
||||||
#define LCD_CRSR_CFG_CRSRSIZE_SHIFT (0) /* Bit 0: Cursor size selection */
|
#define LCD_CRSR_CFG_CRSRSIZE (1 << 0) /* Bit 0: Cursor size selection */
|
||||||
#define LCD_CRSR_CFG_CRSRSIZE_MASK (1 << LCD_CRSR_CFG_CRSRSIZE_SHIFT)
|
#define LCD_CRSR_CFG_FRAMESYNC (1 << 1) /* Bit 1: Cursor frame sync type */
|
||||||
#define LCD_CRSR_CFG_FRAMESYNC_SHIFT (1) /* Bit 1: Cursor frame sync type */
|
/* Bits 2-31: Reserved */
|
||||||
#define LCD_CRSR_CFG_FRAMESYNC_MASK (1 << LCD_CRSR_CFG_FRAMESYNC_SHIFT)
|
|
||||||
/* Bit 2-31: Reserved */
|
|
||||||
#define LCD_CURSOR_SIZE32 (0) /* 32x32 */
|
|
||||||
#define LCD_CURSOR_SIZE64 (1) /* 64x64 */
|
|
||||||
#define LCD_CURSOR_FRAMEASYNC (0) /* Cursor coordinates are asynchronous */
|
|
||||||
#define LCD_CURSOR_FRAMESYNC (1) /* coordinates are synchronize to framesync pulse */
|
|
||||||
|
|
||||||
/* LCD CRSR_PAL0 - Cursor Palette Register 0 */
|
#define LCD_CURSOR_SIZE32 (0) /* 32x32 */
|
||||||
|
#define LCD_CURSOR_SIZE64 (1) /* 64x64 */
|
||||||
|
#define LCD_CURSOR_FRAMEASYNC (0) /* Cursor coordinates are asynchronous */
|
||||||
|
#define LCD_CURSOR_FRAMESYNC (1) /* coordinates are synchronize to framesync pulse */
|
||||||
|
|
||||||
#define LCD_CRSR_PAL0_RED_SHIFT (0) /* Bits 0-7: Red color componnent */
|
/* LCD CRSR_PAL0/1 - Cursor Palette Registers */
|
||||||
#define LCD_CRSR_PAL0_RED_MASK (0xff << LCD_CRSR_PAL0_RED_SHIFT)
|
|
||||||
#define LCD_CRSR_PAL0_GREEN_SHIFT (8) /* Bits 8-15: Green color component */
|
|
||||||
#define LCD_CRSR_PAL0_GREEN_MASK (0xff << LCD_CRSR_PAL0_GREEN_SHIFT)
|
|
||||||
#define LCD_CRSR_PAL0_BLUE_SHIFT (16) /* Bits 16-23: Blue color component */
|
|
||||||
#define LCD_CRSR_PAL0_BLUE_MASK (0xff << LCD_CRSR_PAL0_BLUE_SHIFT)
|
|
||||||
/* Bit 24-31: Reserved */
|
|
||||||
/* LCD CRSR_PAL1 - Cursor Palette Register 1 */
|
|
||||||
|
|
||||||
#define LCD_CRSR_PAL1_RED_SHIFT (0) /* Bits 0-7: Red color componnent */
|
#define LCD_CRSR_PAL_RED_SHIFT (0) /* Bits 0-7: Red color componnent */
|
||||||
#define LCD_CRSR_PAL1_RED_MASK (0xff << LCD_CRSR_PAL1_RED_SHIFT)
|
#define LCD_CRSR_PAL_RED_MASK (0xff << LCD_CRSR_PAL0_RED_SHIFT)
|
||||||
#define LCD_CRSR_PAL1_GREEN_SHIFT (8) /* Bits 8-15: Green color component */
|
#define LCD_CRSR_PAL_GREEN_SHIFT (8) /* Bits 8-15: Green color component */
|
||||||
#define LCD_CRSR_PAL1_GREEN_MASK (0xff << LCD_CRSR_PAL1_GREEN_SHIFT)
|
#define LCD_CRSR_PAL_GREEN_MASK (0xff << LCD_CRSR_PAL0_GREEN_SHIFT)
|
||||||
#define LCD_CRSR_PAL1_BLUE_SHIFT (16) /* Bits 16-23: Blue color component */
|
#define LCD_CRSR_PAL_BLUE_SHIFT (16) /* Bits 16-23: Blue color component */
|
||||||
#define LCD_CRSR_PAL1_BLUE_MASK (0xff << LCD_CRSR_PAL1_BLUE_SHIFT)
|
#define LCD_CRSR_PAL_BLUE_MASK (0xff << LCD_CRSR_PAL0_BLUE_SHIFT)
|
||||||
/* Bit 24-31: Reserved */
|
/* Bits 24-31: Reserved */
|
||||||
/* LCD CRSR_XY - Cursor XY Position Register */
|
/* LCD CRSR_XY - Cursor XY Position Register */
|
||||||
|
|
||||||
#define LCD_CRSR_CRSRX_SHIFT (0) /* Bits 0-9: X ordinate */
|
#define LCD_CRSR_CRSRX_SHIFT (0) /* Bits 0-9: X ordinate */
|
||||||
#define LCD_CRSR_CRSRX_MASK (0x3ff << LCD_CRSR_CRSRX_SHIFT)
|
#define LCD_CRSR_CRSRX_MASK (0x3ff << LCD_CRSR_CRSRX_SHIFT)
|
||||||
/* Bit 10-15: Reserved */
|
/* Bits 10-15: Reserved */
|
||||||
#define LCD_CRSR_CRSRY_SHIFT (16) /* Bits 16-25: Y ordinate */
|
#define LCD_CRSR_CRSRY_SHIFT (16) /* Bits 16-25: Y ordinate */
|
||||||
#define LCD_CRSR_CRSRY_MASK (0x3ff << LCD_CRSR_CRSRY_SHIFT)
|
#define LCD_CRSR_CRSRY_MASK (0x3ff << LCD_CRSR_CRSRY_SHIFT)
|
||||||
/* Bit 26-31: Reserved */
|
/* Bits 26-31: Reserved */
|
||||||
/* LCD CRSR_CLIP - Cursor Clip Position Register */
|
/* LCD CRSR_CLIP - Cursor Clip Position Register */
|
||||||
|
|
||||||
#define LCD_CRSR_CRSRCLIPX_SHIFT (0) /* Bits 0-5: X clip position */
|
#define LCD_CRSR_CRSRCLIPX_SHIFT (0) /* Bits 0-5: X clip position */
|
||||||
#define LCD_CRSR_CRSRCLIPX_MASK (0x3f << LCD_CRSR_CRSRCLIPX_SHIFT)
|
#define LCD_CRSR_CRSRCLIPX_MASK (0x3f << LCD_CRSR_CRSRCLIPX_SHIFT)
|
||||||
/* Bit 6-7: Reserved */
|
/* Bits 6-7: Reserved */
|
||||||
#define LCD_CRSR_CRSRCLIPY_SHIFT (8) /* Bits 8-13: Reserved */
|
#define LCD_CRSR_CRSRCLIPY_SHIFT (8) /* Bits 8-13: Reserved */
|
||||||
#define LCD_CRSR_CRSRCLIPY_MASK (0x3f << LCD_CRSR_CRSRCLIPY_SHIFT)
|
#define LCD_CRSR_CRSRCLIPY_MASK (0x3f << LCD_CRSR_CRSRCLIPY_SHIFT)
|
||||||
/* Bit 14-31: Reserved */
|
/* Bits 14-31: Reserved */
|
||||||
/* LCD CRSR_INTMSK - Cursor Interrrupt Mask Register */
|
/* LCD CRSR_INTMSK - Cursor Interrrupt Mask Register */
|
||||||
|
|
||||||
#define LCD_CRSR_INTMSK_CRSRIM_SHIFT (0) /* Bit 0: Cursor interrupt mask */
|
#define LCD_CRSR_INTMSK_CRSRIM (1 << 0) /* Bit 0: Cursor interrupt mask */
|
||||||
#define LCD_CRSR_INTMSK_CRSRIM_MASK (1 << LCD_CRSR_INTMSK_CRSRIM_SHIFT)
|
/* Bits 1-31: Reserved */
|
||||||
/* Bit 1-31: Reserved */
|
|
||||||
/* LCD CRSR_INTCLR - Cursor Interrrupt Clear Register */
|
/* LCD CRSR_INTCLR - Cursor Interrrupt Clear Register */
|
||||||
|
|
||||||
#define LCD_CRSR_INTCLR_CRSRIC_SHIFT (0) /* Bit 0: Cursor interrupt clear */
|
#define LCD_CRSR_INTCLR_CRSRIC (1 << 0) /* Bit 0: Cursor interrupt clear */
|
||||||
#define LCD_CRSR_INTCLR_CRSRIC_MASK (1 << LCD_CRSR_INTCLR_CRSRIC_SHIFT)
|
/* Bits 1-31: Reserved */
|
||||||
/* Bit 1-31: Reserved */
|
|
||||||
|
|
||||||
/* LCD CRSR_INTRAW - Cursor Raw Interrrupt Status Register */
|
/* LCD CRSR_INTRAW - Cursor Raw Interrrupt Status Register */
|
||||||
|
|
||||||
#define LCD_CRSR_INTRAW_CRSRRIS_SHIFT (0) /* Bit 0: Cursor raw interrupt status */
|
#define LCD_CRSR_INTRAW_CRSRRIS (1 << 0) /* Bit 0: Cursor raw interrupt status */
|
||||||
#define LCD_CRSR_INTRAW_CRSRRIS_MASK (1 << LCD_CRSR_INTRAW_CRSRRIS_SHIFT)
|
/* Bits 1-31: Reserved */
|
||||||
/* Bit 1-31: Reserved */
|
|
||||||
/* LCD CRSR_INTSTAT - Mask Interrrupt Status Register */
|
/* LCD CRSR_INTSTAT - Mask Interrrupt Status Register */
|
||||||
|
|
||||||
#define LCD_CRSR_INTSTAT_CRSRMIS_SHIFT (0) /* Bit 0: Cursor mask interrupt status */
|
#define LCD_CRSR_INTSTAT_CRSRMIS (1 << 0) /* Bit 0: Cursor mask interrupt status */
|
||||||
#define LCD_CRSR_INTSTAT_CRSRMIS_MASK (1 << LCD_CRSR_INTSTAT_CRSRMIS_SHIFT)
|
/* Bits 1-31: Reserved */
|
||||||
/* Bit 1-31: Reserved */
|
|
||||||
|
|
||||||
/************************************************************************************************
|
/************************************************************************************************
|
||||||
* Public Types
|
* Public Types
|
||||||
|
@ -56,6 +56,11 @@
|
|||||||
#define FB_WIDTH ((CONFIG_LPC17_LCD_HWIDTH * CONFIG_LPC17_LCD_BPP + 7) / 8)
|
#define FB_WIDTH ((CONFIG_LPC17_LCD_HWIDTH * CONFIG_LPC17_LCD_BPP + 7) / 8)
|
||||||
#define FB_SIZE (FB_WIDTH * CONFIG_LPC17_LCD_VHEIGHT)
|
#define FB_SIZE (FB_WIDTH * CONFIG_LPC17_LCD_VHEIGHT)
|
||||||
|
|
||||||
|
/* Delays */
|
||||||
|
|
||||||
|
#define LPC17_LCD_PWRDIS_DELAY 10000
|
||||||
|
#define LPC17_LCD_PWREN_DELAY 10000
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Types
|
* Private Types
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -113,7 +118,7 @@ static const struct fb_videoinfo_s g_videoinfo =
|
|||||||
|
|
||||||
static const struct fb_planeinfo_s g_planeinfo =
|
static const struct fb_planeinfo_s g_planeinfo =
|
||||||
{
|
{
|
||||||
.fbmem = (FAR void *)LCD_VRAM_BASE,
|
.fbmem = (FAR void *)CONFIG_LPC17_LCD_VRAMBASE,
|
||||||
.fblen = FB_SIZE,
|
.fblen = FB_SIZE,
|
||||||
.stride = FB_WIDTH,
|
.stride = FB_WIDTH,
|
||||||
.bpp = CONFIG_LPC17_LCD_BPP,
|
.bpp = CONFIG_LPC17_LCD_BPP,
|
||||||
@ -198,30 +203,72 @@ static int lpc17_getplaneinfo(FAR struct fb_vtable_s *vtable, int planeno,
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifdef CONFIG_FB_CMAP
|
#ifdef CONFIG_FB_CMAP
|
||||||
static int lpc17_getcmap(FAR struct fb_vtable_s *vtable, FAR struct fb_cmap_s *cmap)
|
static int lpc17_getcmap(FAR struct fb_vtable_s *vtable,
|
||||||
|
FAR struct fb_cmap_s *cmap)
|
||||||
{
|
{
|
||||||
int len;
|
uint32_t *pal;
|
||||||
|
uint32_t rgb;
|
||||||
|
int last;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
dbg("vtable=%p cmap=%p len=%d\n", vtable, cmap, cmap->len);
|
dbg("vtable=%p cmap=%p first=%d len=%d\n",
|
||||||
if (vtable && cmap)
|
vtable, cmap, cmap->first, cmap->len);
|
||||||
{
|
|
||||||
for (i = cmap->first, len = 0; i < 256 && len < cmap->len; i++, len++)
|
|
||||||
{
|
|
||||||
cmap->red[i] = i;
|
|
||||||
cmap->green[i] = i;
|
|
||||||
cmap->blue[i] = i;
|
|
||||||
#ifdef CONFIG_FB_TRANSPARENCY
|
|
||||||
cmap->transp[i] = i;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
cmap->len = len;
|
DEBUGASSERT(vtable && cmap &&
|
||||||
return OK;
|
cmap->first < 256 && (cmap->first + cmap->len) < 256);
|
||||||
|
|
||||||
|
pal = (uint32_t *)LPC17_LCD_PAL(cmap->first >> 1);
|
||||||
|
last = cmap->first + cmap->len;
|
||||||
|
|
||||||
|
/* Handle the case where the first color starts on an odd boundary */
|
||||||
|
|
||||||
|
i = cmap->first;
|
||||||
|
if ((i & 1) != 0)
|
||||||
|
{
|
||||||
|
rgb = *pal++;
|
||||||
|
i++;
|
||||||
|
|
||||||
|
/* Save the odd palette value */
|
||||||
|
|
||||||
|
cmap->red[i] = (rgb & LCD_PAL_R1_MASK) >> LCD_PAL_R1_SHIFT;
|
||||||
|
cmap->green[i] = (rgb & LCD_PAL_G1_MASK) >> LCD_PAL_G1_SHIFT;
|
||||||
|
cmap->blue[i] = (rgb & LCD_PAL_B1_MASK) >> LCD_PAL_B1_SHIFT;
|
||||||
|
#ifdef CONFIG_FB_TRANSPARENCY
|
||||||
|
cmap->transp[i] = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
dbg("Returning EINVAL\n");
|
/* Handle even colors */
|
||||||
return -EINVAL;
|
|
||||||
|
for (; i < last; i += 2)
|
||||||
|
{
|
||||||
|
rgb = *pal++;
|
||||||
|
|
||||||
|
/* Save the even palette value */
|
||||||
|
|
||||||
|
cmap->red[i] = (rgb & LCD_PAL_R0_MASK) >> LCD_PAL_R0_SHIFT;
|
||||||
|
cmap->green[i] = (rgb & LCD_PAL_G0_MASK) >> LCD_PAL_G0_SHIFT;
|
||||||
|
cmap->blue[i] = (rgb & LCD_PAL_B0_MASK) >> LCD_PAL_B0_SHIFT;
|
||||||
|
#ifdef CONFIG_FB_TRANSPARENCY
|
||||||
|
cmap->transp[i] = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Handle the case where the len ends on an odd boudary */
|
||||||
|
|
||||||
|
if ((i + 1) < last)
|
||||||
|
{
|
||||||
|
/* Save the even palette value */
|
||||||
|
|
||||||
|
cmap->red[i+1] = (rgb & LCD_PAL_R1_MASK) >> LCD_PAL_R1_SHIFT;
|
||||||
|
cmap->green[i+1] = (rgb & LCD_PAL_G1_MASK) >> LCD_PAL_G1_SHIFT;
|
||||||
|
cmap->blue[i+1] = (rgb & LCD_PAL_B1_MASK) >> LCD_PAL_B1_SHIFT;
|
||||||
|
#ifdef CONFIG_FB_TRANSPARENCY
|
||||||
|
cmap->transp[i+1] = 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return OK;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -230,16 +277,68 @@ static int lpc17_getcmap(FAR struct fb_vtable_s *vtable, FAR struct fb_cmap_s *c
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifdef CONFIG_FB_CMAP
|
#ifdef CONFIG_FB_CMAP
|
||||||
static int lpc17_putcmap(FAR struct fb_vtable_s *vtable, FAR const struct fb_cmap_s *cmap)
|
static int lpc17_putcmap(FAR struct fb_vtable_s *vtable,
|
||||||
|
FAR const struct fb_cmap_s *cmap)
|
||||||
{
|
{
|
||||||
dbg("vtable=%p cmap=%p len=%d\n", vtable, cmap, cmap->len);
|
uint32_t *pal;
|
||||||
if (vtable && cmap)
|
uint32_t rgb0;
|
||||||
|
uint32_t rgb1;
|
||||||
|
int last;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
dbg("vtable=%p cmap=%p first=%d len=%d\n",
|
||||||
|
vtable, cmap, cmap->first, cmap->len);
|
||||||
|
|
||||||
|
DEBUGASSERT(vtable && cmap);
|
||||||
|
|
||||||
|
pal = (uint32_t *)LPC17_LCD_PAL(cmap->first >> 1);
|
||||||
|
last = cmap->first + cmap->len;
|
||||||
|
|
||||||
|
/* Handle the case where the first color starts on an odd boundary */
|
||||||
|
|
||||||
|
i = cmap->first;
|
||||||
|
if ((i & 1) != 0)
|
||||||
{
|
{
|
||||||
return OK;
|
rgb0 = *pal;
|
||||||
|
rgb0 &= (LCD_PAL_R0_MASK | LCD_PAL_G0_MASK | LCD_PAL_B0_MASK | LCD_PAL_I0);
|
||||||
|
rgb1 |= ((uint32_t)cmap->red[i] << LCD_PAL_R0_SHIFT |
|
||||||
|
(uint32_t)cmap->green[i] << LCD_PAL_G0_SHIFT |
|
||||||
|
(uint32_t)cmap->blue[i] << LCD_PAL_B0_SHIFT);
|
||||||
|
|
||||||
|
/* Save the new palette value */
|
||||||
|
|
||||||
|
*pal++ = (rgb0 | rgb1);
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
dbg("Returning EINVAL\n");
|
/* Handle even colors */
|
||||||
return -EINVAL;
|
|
||||||
|
for (; i < last; i += 2)
|
||||||
|
{
|
||||||
|
uint32_t rgb0 = ((uint32_t)cmap->red[i] << LCD_PAL_R0_SHIFT |
|
||||||
|
(uint32_t)cmap->green[i] << LCD_PAL_G0_SHIFT |
|
||||||
|
(uint32_t)cmap->blue[i] << LCD_PAL_B0_SHIFT);
|
||||||
|
|
||||||
|
/* Handle the case where the len ends on an odd boudary */
|
||||||
|
|
||||||
|
if ((i + 1) >= last)
|
||||||
|
{
|
||||||
|
rgb1 = *pal;
|
||||||
|
rgb1 &= (LCD_PAL_R1_MASK | LCD_PAL_G1_MASK | LCD_PAL_B1_MASK | LCD_PAL_I1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rgb1 = ((uint32_t)cmap->red[i+1] << LCD_PAL_R1_SHIFT |
|
||||||
|
(uint32_t)cmap->green[i+1] << LCD_PAL_G1_SHIFT |
|
||||||
|
(uint32_t)cmap->blue[i+1] << LCD_PAL_B1_SHIFT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Save the new pallete value */
|
||||||
|
|
||||||
|
*pal++ = (rgb0 | rgb1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return OK;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -326,11 +425,21 @@ static int lpc17_setcursor(FAR struct fb_vtable_s *vtable,
|
|||||||
|
|
||||||
int up_fbinitialize(void)
|
int up_fbinitialize(void)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
/* Disable LCD controller */
|
/* Disable LCD controller */
|
||||||
#warning "Missing logioc"
|
|
||||||
|
regval = getreg32(LPC17_LCD_CTRL);
|
||||||
|
regval &= ~LCD_CTRL_LCDPWR;
|
||||||
|
putreg32(regval, LPC17_LCD_CTRL);
|
||||||
|
|
||||||
|
for (i = LPC17_LCD_PWRDIS_DELAY; i; i--);
|
||||||
|
|
||||||
|
regval &= ~LCD_CTRL_LCDEN;
|
||||||
|
putreg32(regval, LPC17_LCD_CTRL);
|
||||||
|
|
||||||
/* Configure pins */
|
/* Configure pins */
|
||||||
/* R */
|
/* Video data */
|
||||||
|
|
||||||
lpc17_configgpio(GPIO_LCD_VD0);
|
lpc17_configgpio(GPIO_LCD_VD0);
|
||||||
lpc17_configgpio(GPIO_LCD_VD1);
|
lpc17_configgpio(GPIO_LCD_VD1);
|
||||||
@ -341,8 +450,6 @@ int up_fbinitialize(void)
|
|||||||
lpc17_configgpio(GPIO_LCD_VD6);
|
lpc17_configgpio(GPIO_LCD_VD6);
|
||||||
lpc17_configgpio(GPIO_LCD_VD7);
|
lpc17_configgpio(GPIO_LCD_VD7);
|
||||||
|
|
||||||
/* G */
|
|
||||||
|
|
||||||
lpc17_configgpio(GPIO_LCD_VD8);
|
lpc17_configgpio(GPIO_LCD_VD8);
|
||||||
lpc17_configgpio(GPIO_LCD_VD9);
|
lpc17_configgpio(GPIO_LCD_VD9);
|
||||||
lpc17_configgpio(GPIO_LCD_VD10);
|
lpc17_configgpio(GPIO_LCD_VD10);
|
||||||
@ -352,8 +459,7 @@ int up_fbinitialize(void)
|
|||||||
lpc17_configgpio(GPIO_LCD_VD14);
|
lpc17_configgpio(GPIO_LCD_VD14);
|
||||||
lpc17_configgpio(GPIO_LCD_VD15);
|
lpc17_configgpio(GPIO_LCD_VD15);
|
||||||
|
|
||||||
/* B */
|
#if CONFIG_LPC17_LCD_BPP == 24
|
||||||
|
|
||||||
lpc17_configgpio(GPIO_LCD_VD16);
|
lpc17_configgpio(GPIO_LCD_VD16);
|
||||||
lpc17_configgpio(GPIO_LCD_VD17);
|
lpc17_configgpio(GPIO_LCD_VD17);
|
||||||
lpc17_configgpio(GPIO_LCD_VD18);
|
lpc17_configgpio(GPIO_LCD_VD18);
|
||||||
@ -362,6 +468,7 @@ int up_fbinitialize(void)
|
|||||||
lpc17_configgpio(GPIO_LCD_VD21);
|
lpc17_configgpio(GPIO_LCD_VD21);
|
||||||
lpc17_configgpio(GPIO_LCD_VD22);
|
lpc17_configgpio(GPIO_LCD_VD22);
|
||||||
lpc17_configgpio(GPIO_LCD_VD23);
|
lpc17_configgpio(GPIO_LCD_VD23);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Other pins */
|
/* Other pins */
|
||||||
|
|
||||||
@ -371,6 +478,24 @@ int up_fbinitialize(void)
|
|||||||
lpc17_configgpio(GPIO_LCD_ENABM);
|
lpc17_configgpio(GPIO_LCD_ENABM);
|
||||||
lpc17_configgpio(GPIO_LCD_PWR);
|
lpc17_configgpio(GPIO_LCD_PWR);
|
||||||
|
|
||||||
|
#warning "Missing logic"
|
||||||
|
|
||||||
|
/* Clear the display */
|
||||||
|
|
||||||
|
lpc17_lcdclear(CONFIG_LPC17_LCD_BACKCOLOR);
|
||||||
|
for (i = LPC17_LCD_PWREN_DELAY; i; i--);
|
||||||
|
|
||||||
|
/* Enable LCD */
|
||||||
|
|
||||||
|
regval = getreg32(LPC17_LCD_CTRL);
|
||||||
|
regval |= LCD_CTRL_LCDEN;
|
||||||
|
putreg32(regval, LPC17_LCD_CTRL);
|
||||||
|
|
||||||
|
for (i = LPC17_LCD_PWREN_DELAY; i; i--);
|
||||||
|
|
||||||
|
regval |= LCD_CTRL_LCDPWR;
|
||||||
|
putreg32(regval, LPC17_LCD_CTRL);
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -414,3 +539,29 @@ void fb_uninitialize(void)
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Name: lpc17_lcdclear
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* This is a non-standard LCD interface just for the LPC17xx. Clearing the display
|
||||||
|
* in the normal way by writing a sequences of runs that covers the entire display
|
||||||
|
* can be slow. Here the dispaly is cleared by simply setting all VRAM memory to
|
||||||
|
* the specified color.
|
||||||
|
*
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
void lpc17_lcdclear(nxgl_pixel_t color)
|
||||||
|
{
|
||||||
|
#if CONFIG_LPC17_LCD_BPP == 16
|
||||||
|
uint16_t *dest;
|
||||||
|
#else
|
||||||
|
uint32_t *dest;
|
||||||
|
#endif
|
||||||
|
int i;
|
||||||
|
|
||||||
|
dest = (uint32_t *) CONFIG_LPC17_LCD_VRAMBASE;
|
||||||
|
for (i = 0; (CONFIG_LPC17_LCD_HWIDTH * CONFIG_LPC17_LCD_VHEIGHT) > i; i++)
|
||||||
|
{
|
||||||
|
*dest++ = color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -41,6 +41,8 @@
|
|||||||
************************************************************************************/
|
************************************************************************************/
|
||||||
|
|
||||||
#include <nuttx/config.h>
|
#include <nuttx/config.h>
|
||||||
|
#include <nuttx/nx/nxglib.h>
|
||||||
|
|
||||||
#include "chip/lpc17_lcd.h"
|
#include "chip/lpc17_lcd.h"
|
||||||
|
|
||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
@ -48,14 +50,26 @@
|
|||||||
************************************************************************************/
|
************************************************************************************/
|
||||||
/* Configuration */
|
/* Configuration */
|
||||||
|
|
||||||
|
/* Base address of the video RAM frame buffer */
|
||||||
|
|
||||||
|
#ifndef CONFIG_LPC17_LCD_VRAMBASE
|
||||||
|
# define CONFIG_LPC17_LCD_VRAMBASE ((uint32_t)LPC17_EXTDRAM_CS0 + 0x00010000)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* LCD refresh rate */
|
||||||
|
|
||||||
#ifndef CONFIG_LPC17_LCD_REFRESH_FREQ
|
#ifndef CONFIG_LPC17_LCD_REFRESH_FREQ
|
||||||
# define CONFIG_LPC17_LCD_REFRESH_FREQ (50) /* Hz */
|
# define CONFIG_LPC17_LCD_REFRESH_FREQ (50) /* Hz */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Bits per pixel */
|
||||||
|
|
||||||
#ifndef CONFIG_LPC17_LCD_BPP
|
#ifndef CONFIG_LPC17_LCD_BPP
|
||||||
# define CONFIG_LPC17_LCD_BPP 16 /* Bytes per pixel */
|
# define CONFIG_LPC17_LCD_BPP 16 /* Bytes per pixel */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Color format */
|
||||||
|
|
||||||
#undef FB_FMT
|
#undef FB_FMT
|
||||||
#if CONFIG_LPC17_LCD_BPP == 16
|
#if CONFIG_LPC17_LCD_BPP == 16
|
||||||
# define FB_FMT FB_FMT_RGB16_565
|
# define FB_FMT FB_FMT_RGB16_565
|
||||||
@ -65,6 +79,12 @@
|
|||||||
# error "Unsupported BPP"
|
# error "Unsupported BPP"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_LPC17_LCD_BACKCOLOR
|
||||||
|
# define CONFIG_LPC17_LCD_BACKCOLOR 0 /* Initial background color */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Horizontal video characteristics */
|
||||||
|
|
||||||
#ifndef CONFIG_LPC17_LCD_HWIDTH
|
#ifndef CONFIG_LPC17_LCD_HWIDTH
|
||||||
# define CONFIG_LPC17_LCD_HWIDTH 480 /* Width in pixels */
|
# define CONFIG_LPC17_LCD_HWIDTH 480 /* Width in pixels */
|
||||||
#endif
|
#endif
|
||||||
@ -81,6 +101,8 @@
|
|||||||
# define CONFIG_LPC17_LCD_HBACKPORCH 40
|
# define CONFIG_LPC17_LCD_HBACKPORCH 40
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Vertical video characteristics */
|
||||||
|
|
||||||
#ifndef CONFIG_LPC17_LCD_VHEIGHT
|
#ifndef CONFIG_LPC17_LCD_VHEIGHT
|
||||||
# define CONFIG_LPC17_LCD_VHEIGHT 272 /* Height in rows */
|
# define CONFIG_LPC17_LCD_VHEIGHT 272 /* Height in rows */
|
||||||
#endif
|
#endif
|
||||||
@ -112,4 +134,17 @@
|
|||||||
* include/nuttx/fb.h.
|
* include/nuttx/fb.h.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Name: lpc17_lcdclear
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* This is a non-standard LCD interface just for the LPC17xx. Clearing the display
|
||||||
|
* in the normal way by writing a sequences of runs that covers the entire display
|
||||||
|
* can be slow. Here the dispaly is cleared by simply setting all VRAM memory to
|
||||||
|
* the specified color.
|
||||||
|
*
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
void lpc17_lcdclear(nxgl_mxpixel_t color);
|
||||||
|
|
||||||
#endif /* __ARCH_ARM_SRC_LPC17XX_LPC17_LCD_H */
|
#endif /* __ARCH_ARM_SRC_LPC17XX_LPC17_LCD_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user