53 #define d4dlcdhw_k70_lcdc_ID 1
58 #if (D4D_MK_STR(D4D_LLD_LCD_HW) == d4dlcdhw_k70_lcdc_ID)
68 #define MOUSE_CURSOR_GRPHCW_PRTY_KEYCLR_MASK 0x00FFFFFF
69 #define MOUSE_CURSOR_GRPHCW_PRTY_CURSRIX_MASK 0x0F000000
70 #define MOUSE_CURSOR_GRPHCW_PRTY_CHNG_MASK 0x80000000
71 #define MOUSE_CURSOR_GRPHCW_PRTY_SHOW_MASK 0x40000000
73 #define MOUSE_CURSOR_GRPHCW_PRTY_CURSRIX_SHIFT 24
79 static unsigned char D4DLCDHW_Init_K70LCDC(
void);
80 static unsigned char D4DLCDHW_DeInit_K70LCDC(
void);
81 static void D4DLCDHW_WriteData_K70LCDC(
unsigned long addr,
D4D_COLOR value);
82 static D4D_COLOR D4DLCDHW_ReadData_K70LCDC(
unsigned long addr);
88 static unsigned char D4DMOUSE_Init_K70LCDC(
void);
89 static void D4DMOUSE_SetCoor_K70LCDC(
unsigned short x,
unsigned short y);
90 static void D4DMOUSE_SetPointerBmp_K70LCDC(
void** pPntrData,
D4D_INDEX cnt,
D4D_COLOR keyColor);
92 static unsigned char D4DMOUSE_DeInit_K70LCDC(
void);
97 #if D4DLCDHWFB_DOUBLE_BUFFER
98 static void D4DLCDHW_CopyBuffers_K70LCDC(
unsigned long second2first);
99 void D4DLCDHW_ISR_K70DMA(
void);
103 void D4DLCDHW_ISR_K70LCDC(
void);
119 D4DLCDHW_Init_K70LCDC,
120 D4DLCDHW_WriteData_K70LCDC,
121 D4DLCDHW_ReadData_K70LCDC,
122 D4DLCDHW_GetFbDescriptor_K70LCDC,
123 D4DLCDHW_PinCtl_K70LCDC,
124 D4DLCDHW_FlushBuffer_K70LCDC,
125 D4DLCDHW_DeInit_K70LCDC
131 D4DMOUSE_Init_K70LCDC,
132 D4DMOUSE_SetCoor_K70LCDC,
133 D4DMOUSE_SetPointerBmp_K70LCDC,
134 D4DMOUSE_SetPointer_K70LCDC,
135 D4DMOUSE_GetDescriptor_K70LCDC,
136 D4DMOUSE_DeInit_K70LCDC
162 static volatile sLWord enableWrite = 0;
165 static volatile LWord graphicWindowPrty = (
D4D_COLOR_RGB(0x3F, 0x3F, 0x3F) & MOUSE_CURSOR_GRPHCW_PRTY_KEYCLR_MASK);
166 static volatile LWord* cursorBmpPtr =
NULL;
170 #if D4DLCDHWFB_DOUBLE_BUFFER
172 static volatile signed long fb_draw_2nd = 0;
173 static volatile unsigned long fb_switch = 0;
174 static volatile unsigned long lastUpdateStart, lastUpdateEnd;
193 static unsigned char D4DLCDHW_Init_K70LCDC(
void)
195 unsigned long * pTmp;
198 SIM_SCGC3 |= SIM_SCGC3_LCDC_MASK;
201 PORTB_PCR10 = PORT_PCR_MUX(1);
202 PORTB_PCR11 = PORT_PCR_MUX(1);
203 PORTB_PCR16 = PORT_PCR_MUX(1);
204 PORTB_PCR17 = PORT_PCR_MUX(1);
205 PORTB_PCR18 = PORT_PCR_MUX(1);
207 GPIOB_PDDR |= (1<<10) | (1<<11) | (1<<16) | (1<<17) | (1<<18);
208 GPIOB_PCOR |= (1<<10) | (1<<11) | (1<<16) | (1<<17) | (1<<18);
217 if(!_int_install_kernel_isr(INT_LCD, D4DLCDHW_ISR_K70LCDC))
219 _bsp_int_init(INT_LCD, 3, 0, TRUE);
221 NVIC_IP(INT_LCD) = 3;
222 NVIC_ISER(INT_LCD / 32) |= (1 << (INT_LCD % 32));
223 #warning The LCDC K70 driver is is using interrupts, please registry the "D4DLCDHW_ISR_K70LCDC" on interrupt vector of LCDC (113).
227 #if D4DLCDHWFB_START_ADDRESS == 0
244 #if D4DLCDHWFB_DOUBLE_BUFFER
245 #if D4DLCDHWFB_START_ADDRESS_2ND == 0
247 if(fb_start_addr_2nd)
250 fb_start_addr_2nd = 0;
253 if(!fb_start_addr_2nd)
257 fb_draw_2nd = fb_start_addr_2nd - d4dlcdhw_k70_lcdc_desc.
fb_start_addr;
258 lastUpdateStart = 0xFFFFFFFF;
261 #if D4DLCDHWFB_DMA_ENABLE
262 SIM_SCGC7 |= SIM_SCGC7_DMA_MASK;
263 SIM_SCGC6 |= SIM_SCGC6_DMAMUX0_MASK;
264 #if D4DLCDHWFB_DMA_CHANNEL < 16
265 SIM_SCGC6 |= SIM_SCGC6_DMAMUX0_MASK;
268 SIM_SCGC6 |= SIM_SCGC6_DMAMUX1_MASK;
279 DMA_ATTR(
D4DLCDHWFB_DMA_CHANNEL) = DMA_ATTR_SMOD(0) | DMA_ATTR_SSIZE(4) | DMA_ATTR_DMOD(0) | DMA_ATTR_DSIZE(4);
288 D4DLCDHW_DeInit_K70LCDC();
296 #warning The LCDC K70 driver is is using interrupts, please registry the "D4DLCDHW_ISR_K70DMA" on right interrupt vector for selected DMA channel by D4DLCDHWFB_DMA_CHANNEL.
301 pTmp = (
unsigned long*)fb_start_addr_2nd;
312 #if D4DLCDHWFB_MIRROWED == 1
338 LCDC_LIER = LCDC_LIER_EOF_EN_MASK;
341 LCDC_LDCR &= ~(LCDC_LDCR_BURST_MASK);
345 #if D4DLCDHWFB_MIRROWED == 1
346 LCDC_LPCR |= LCDC_LPCR_REV_VS_MASK;
349 SIM_MCR|=SIM_MCR_LCDSTART_MASK;
366 static unsigned char D4DLCDHW_DeInit_K70LCDC(
void)
368 #if D4DLCDHWFB_START_ADDRESS == 0
376 #if D4DLCDHWFB_DOUBLE_BUFFER
377 #if D4DLCDHWFB_START_ADDRESS_2ND == 0
378 if(fb_start_addr_2nd)
381 fb_start_addr_2nd = 0;
399 static void D4DLCDHW_WriteData_K70LCDC(
unsigned long addr,
D4D_COLOR value)
403 #if D4D_COLOR_SYSTEM == D4D_COLOR_SYSTEM_RGB888
409 while(enableWrite <= 0);
411 #if D4DLCDHWFB_DOUBLE_BUFFER
416 if(addr > lastUpdateEnd)
419 if(addr & 0x0000000f)
420 lastUpdateEnd = (addr & 0xFFFFFFF0) + 0x00000010;
422 lastUpdateEnd = addr;
425 if(addr < lastUpdateStart)
428 lastUpdateStart = addr & 0xFFFFFFF0;
433 *((
unsigned long*)addr) = data;
447 static D4D_COLOR D4DLCDHW_ReadData_K70LCDC(
unsigned long addr)
449 #if D4DLCDHWFB_DOUBLE_BUFFER
450 while(enableWrite <= 0);
455 #if D4D_COLOR_SYSTEM == D4D_COLOR_SYSTEM_RGB888
456 return *((
unsigned long*)addr);
458 unsigned long value = *((
unsigned long*)addr);
508 #if (D4DLCDHWFB_DOUBLE_BUFFER == 0) && (D4DLCDHWFB_CACHE_FLUSH_ENABLE == 0)
512 #if D4DLCDHWFB_CACHE_FLUSH_ENABLE || D4DLCDHWFB_DOUBLE_BUFFER
515 #if D4DLCDHWFB_CACHE_FLUSH_ENABLE
516 LMEM_PSCCR |= LMEM_PSCCR_GO_MASK | LMEM_PSCCR_PUSHW0_MASK | LMEM_PSCCR_PUSHW1_MASK;
518 while (LMEM_PSCCR & LMEM_PSCCR_GO_MASK)
521 #if D4DLCDHWFB_DOUBLE_BUFFER
528 D4DLCDHW_CopyBuffers_K70LCDC(fb_draw_2nd);
545 void D4DLCDHW_ISR_K70LCDC(
void)
550 LWord status = LCDC_LISR;
552 if((LCDC_LIER & LCDC_LIER_EOF_EN_MASK) && (status & LCDC_LISR_EOF_MASK))
557 #if D4DLCDHWFB_DOUBLE_BUFFER
565 fb_draw_2nd = fb_start_addr_2nd - d4dlcdhw_k70_lcdc_desc.
fb_start_addr;
571 #if D4DLCDHWFB_MIRROWED == 1
584 #if D4DLCDHWFB_MIRROWED == 1
587 LCDC_LSSAR = fb_start_addr_2nd;
598 #if (D4DLCDHWFB_DOUBLE_BUFFER == 0) || defined(D4D_LLD_MOUSE)
600 #if (D4DLCDHWFB_DOUBLE_BUFFER == 0)
609 LCDC_LICR = LCDC_LICR_INTCON_MASK ;
610 LCDC_LIER &= ~LCDC_LIER_EOF_EN_MASK;
611 LCDC_LIER |= LCDC_LIER_BOF_EN_MASK;
618 else if((LCDC_LIER & LCDC_LIER_BOF_EN_MASK) && (status & LCDC_LISR_BOF_MASK))
620 #if (D4DLCDHWFB_DOUBLE_BUFFER == 0)
628 LCDC_LICR = LCDC_LICR_INTSYN_MASK;
629 LCDC_LIER &= ~LCDC_LIER_BOF_EN_MASK;
630 LCDC_LIER |= LCDC_LIER_EOF_EN_MASK;
634 #if defined(D4D_LLD_MOUSE)
635 if((LCDC_LIER & LCDC_LIER_GW_EOF_EN_MASK) && (status & LCDC_LISR_GW_EOF_MASK))
637 unsigned char alpha = (LCDC_LGWCR & LCDC_LGWCR_GWAV_MASK)>> LCDC_LGWCR_GWAV_SHIFT ;
640 if(graphicWindowPrty & MOUSE_CURSOR_GRPHCW_PRTY_CHNG_MASK)
644 SIM_MCR &= ~SIM_MCR_LCDSTART_MASK;
653 LCDC_LGWCR &= ~(LCDC_LGWCR_GWCKR_MASK | LCDC_LGWCR_GWCKG_MASK | LCDC_LGWCR_GWCKB_MASK);
654 LCDC_LGWCR |= LCDC_LGWCR_GWCKR(r) | LCDC_LGWCR_GWCKG(g) | LCDC_LGWCR_GWCKB(b);
655 SIM_MCR |= SIM_MCR_LCDSTART_MASK;
657 graphicWindowPrty &= ~MOUSE_CURSOR_GRPHCW_PRTY_CHNG_MASK;
660 LCDC_LGWSAR = (
unsigned long)((
char*)cursorBmpPtr + cursorOffsets[(graphicWindowPrty & MOUSE_CURSOR_GRPHCW_PRTY_CURSRIX_MASK) >> MOUSE_CURSOR_GRPHCW_PRTY_CURSRIX_SHIFT]);
661 LCDC_LIER &= ~LCDC_LIER_GW_EOF_EN_MASK;
699 #if D4DLCDHWFB_DOUBLE_BUFFER
710 static void D4DLCDHW_CopyBuffers_K70LCDC(
unsigned long second2first)
714 LWord cnt = lastUpdateEnd;
715 cnt -= lastUpdateStart;
717 pSource = (
LWord*)lastUpdateStart;
719 pDest = (
LWord*)(d4dlcdhw_k70_lcdc_desc.
fb_start_addr + (lastUpdateStart - fb_start_addr_2nd));
721 pDest = (
LWord*)(fb_start_addr_2nd + (lastUpdateStart - d4dlcdhw_k70_lcdc_desc.
fb_start_addr));
724 #if D4DLCDHWFB_DMA_ENABLE
736 DMA_CERR = DMA_CERR_CAEI_MASK;
743 *pDest++ = *pSource++;
755 lastUpdateStart = 0xFFFFFFFF;
759 #if D4DLCDHWFB_DMA_ENABLE
770 void D4DLCDHW_ISR_K70DMA(
void)
811 static unsigned char D4DMOUSE_Init_K70LCDC(
void)
813 if(!(SIM_SCGC3 & SIM_SCGC3_LCDC_MASK))
816 SIM_MCR &= ~SIM_MCR_LCDSTART_MASK;
819 LCDC_LGWSAR = 0x20000000;
822 LCDC_LGWSR = LCDC_LGWSR_GWW(1) | LCDC_LGWSR_GWH(16);
831 LCDC_LGWPR = LCDC_LGWPR_GWXP(0) | LCDC_LGWPR_GWYP(0);
834 LCDC_LGWDCR &= ~(LCDC_LGWDCR_GWBT_MASK);
836 graphicWindowPrty = (
D4D_COLOR_RGB(0x3F, 0x3F, 0x3F) & MOUSE_CURSOR_GRPHCW_PRTY_KEYCLR_MASK);
840 cursorOffsets[i] = 0;
846 LCDC_LGWCR = LCDC_LGWCR_GWAV(1) |
847 LCDC_LGWCR_GWCKE_MASK |
848 LCDC_LGWCR_GWE_MASK |
850 LCDC_LGWCR_GWCKR(0x3F) |
851 LCDC_LGWCR_GWCKG(0x3F) |
852 LCDC_LGWCR_GWCKB(0x3F);
854 SIM_MCR |= SIM_MCR_LCDSTART_MASK;
868 static void D4DMOUSE_SetCoor_K70LCDC(
unsigned short x,
unsigned short y)
871 LCDC_LGWPR = LCDC_LGWPR_GWXP(x) | LCDC_LGWPR_GWYP(y);
885 static void D4DMOUSE_SetPointerBmp_K70LCDC(
void** pPntrData,
D4D_INDEX cnt,
D4D_COLOR keyColor)
896 for(
int i=0; i < cnt;i++)
906 if(pPntrData[i] == pPntrData[j])
927 for(
int i=0; i < uniqueBmp;i++)
934 char* pSrc = (
char*)pPntrData[i];
941 graphicWindowPrty &= ~MOUSE_CURSOR_GRPHCW_PRTY_KEYCLR_MASK;
942 graphicWindowPrty = MOUSE_CURSOR_GRPHCW_PRTY_CHNG_MASK | (keyColor & MOUSE_CURSOR_GRPHCW_PRTY_KEYCLR_MASK);
943 LCDC_LIER |= LCDC_LIER_GW_EOF_EN_MASK;
957 LWord bck_graphicWindowPrty = graphicWindowPrty;
960 graphicWindowPrty &= ~MOUSE_CURSOR_GRPHCW_PRTY_CURSRIX_MASK;
961 graphicWindowPrty |= ((ix << MOUSE_CURSOR_GRPHCW_PRTY_CURSRIX_SHIFT) & MOUSE_CURSOR_GRPHCW_PRTY_CURSRIX_MASK) | MOUSE_CURSOR_GRPHCW_PRTY_SHOW_MASK;
962 LCDC_LGWCR |= LCDC_LGWCR_GWAV(0xFF);
965 if(graphicWindowPrty & MOUSE_CURSOR_GRPHCW_PRTY_SHOW_MASK)
968 graphicWindowPrty &= ~MOUSE_CURSOR_GRPHCW_PRTY_SHOW_MASK;
969 LCDC_LGWCR &= ~LCDC_LGWCR_GWAV_MASK;
973 if(graphicWindowPrty != bck_graphicWindowPrty)
974 LCDC_LIER |= LCDC_LIER_GW_EOF_EN_MASK;
1002 static unsigned char D4DMOUSE_DeInit_K70LCDC(
void)
1010 #endif //(D4D_MK_STR(D4D_LLD_LCD_HW) == d4dlcdhw_k70_lcdc_ID)
#define D4DLCDHWFB_START_ADDRESS
#define D4DLCDHWFB_BPP_BYTE
#define D4D_MemAlloc(size)
Mem Alloc eGUI definition. If not defined by user config any special user function, it used standard system function.
#define D4DLCDHWFB_DMA_INTVECT
#define D4D_COLOR_GET_B(color)
signed long sLWord
Type definition of sLWord (signed 32-bit).
D4D driver - k70_lcdc hardware lcd driver function header file.
The notification that the end of screen is draw.
#define D4D_FALSE
This is definition of boolean operation value in eGUI - FALSE.
#define D4D_COLOR_RGB(R, G, B)
#define D4DLCDHWFB_DMA_CHPRI
#define D4D_COLOR_RGB888(R, G, B)
The macro create the color from the color component Red/Green/Blue to 24-bit RGB888 format (the input...
#define D4DLCDHWFB_DMA_CHANNEL
#define D4D_TRUE
This is definition of boolean operation value in eGUI - TRUE.
D4D driver - k70_lcdc hardware lcd driver function header file.
D4D low level mouse pointer interface API structure.
D4D Driver main header file.
D4DHW_PIN_STATE
D4D low level MCU pin state enumeration type.
D4DLCD_FLUSH_MODE
D4D low level eGUI flush screen types enumeration.
D4D Driver private header file.
D4DLCDHW_PINS
D4D low level MCU types definition for general LCD screen control signals.
D4D low level frame buffer LCD interface API structure.
#define D4D_COLOR888_GET_R(color)
The macro gets the Red component from 24-bit standard format to 8-bit component format.
#define D4D_COLOR888_GET_B(color)
The macro gets the Blue component from 24-bit standard format to 8-bit component format.
D4D low level frame buffer description structure.
#define NULL
Type definition of null pointer.
#define D4D_MemFree(pMem)
Mem Free eGUI definition. If not defined by user config any special user function, it used standard system function.
unsigned long LWord
Type definition of LWord (unsigned 32-bit).
#define D4D_MemCopy(pDst, pSrc, size)
Mem Copy eGUI definition. If not defined by user config any special user function, it used standard system function.
#define D4D_COLOR888_GET_G(color)
The macro gets the Green component from 24-bit standard format to 8-bit component format...
#define D4DMOUSE_CURSOR_SIZE_Y
#define D4DMOUSE_CURSOR_BMPFORMAT
LWord D4D_INDEX
Type definition of eGUI general index variables.
unsigned char(* D4DLCDHWFBK70LCDC_InitPanel)(void)
const D4DLCDHWFBK70LCDC_FUNCTIONS D4D_LLD_LCD_HW_K70LCDC
#define D4DMOUSE_CURSOR_SIZE_X
LWord D4D_BOOL
Type definition of eGUI boolean.
#define D4D_UNUSED(x)
Macro used just for notify compiler that the input parameter is not used.
#define D4D_COLOR_GET_G(color)
Just system define that specified the count of cursors, must be kept on end of the enumeration field...
#define D4DLCDHWFB_START_ADDRESS_2ND
unsigned long fb_start_addr
The address of frame buffer.
D4D driver - resistive touch screen driver function header file.
D4D low level mouse pointer structure.
LWord D4D_COLOR
Type definition of eGUI color variables.
#define D4DLCDHWFB_FRAMEBUFFER_SIZE
The notification of forcing flush by user code.
#define D4D_COLOR_GET_R(color)