STemWin поставляется с примерами для различных макетных плат ST, но без драйверов для дисплеев. В её состав входит только шаблон драйвера GUIDRV_Template.c в самом конце которого находится структура API
const GUI_DEVICE_API GUIDRV_Template_API = {
//
// Data
//
DEVICE_CLASS_DRIVER,
//
// Drawing functions
//
_DrawBitmap,
_DrawHLine,
_DrawVLine,
_FillRect,
_GetPixelIndex,
_SetPixelIndex,
_XorPixel,
//
// Set origin
//
_SetOrg,
//
// Request information
//
_GetDevFunc,
_GetDevProp,
_GetDevData,
_GetRect,
};
const GUI_DEVICE_API GUIDRV_Template_API = {
//
// Data
//
DEVICE_CLASS_DRIVER,
//
// Drawing functions
//
_DrawBitmap,
_DrawHLine,
_DrawVLine,
_FillRect,
_GetPixelIndex,
_SetPixelIndex,
_XorPixel,
//
// Set origin
//
_SetOrg,
//
// Request information
//
_GetDevFunc,
_GetDevProp,
_GetDevData,
_GetRect,
};
Из документации можно выяснить, что из всех функций нам необходимо адаптировать под наш дисплей только _GetPixelIndex и _SetPixelIndex. В функцию _SetPixelIndex нам необходимо вставить процедуру установки пиксель для нашего дисплея в месте которое нам предусмотрительно оставлено
GUI_USE_PARA(pDevice);
GUI_USE_PARA(x);
GUI_USE_PARA(y);
GUI_USE_PARA(PixelIndex);
{
//
// Write into hardware ... Adapt to your system
//
// TBD by customer...
//
}
//if ( (x>240)||(y>320) ) return;
//LCD_WR_CMD(0,0x02,x);
//LCD_WR_CMD(1,0x03,y);
LCD_WR_CMD(32, y);
LCD_WR_CMD(33, 319-x);
//*(__IO uint16_t *) (Bank1_LCD_C)= 34;
LCD_WR_REG(34);
//LCD_WR_CMD(0,0x02,y);
//LCD_WR_CMD(1,0x03,319-x);
//LCD_WR_REG(0x0E);
LCD_WR_Data(point);
Для _GetPixelIndex необходимо вставить
u16 temp;
ili9320_SetCursor(x,y);
LCD_WR_REG(34);
//temp = ili9320_ReadData(); //dummy
//temp = ili9320_ReadData();
// return (ili9320_BGR2RGB(ili9320_ReadData()));
return (ili9320_ReadData());
Для того, чтобы emWin использовала этот модифицированный драйвер необходимо в файле LCDConf.c в процедуре LCD_X_Config вставить
//
// Physical display size
//
#define XSIZE_PHYS 240
#define YSIZE_PHYS 400
....
void LCD_X_Config(void)
{
....
pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_Template_API, GUICC_565, 0, 0);
....
}
....
int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData)
{
....
switch (Cmd)
{
case LCD_X_INITCONTROLLER:
{
lcdInit();
return 0;
}
....
}
....
}
Комментариев нет:
Отправить комментарий