diff --git a/bsp/src/BEAGLESYNTH/bsp.c b/bsp/src/BEAGLESYNTH/bsp.c --- a/bsp/src/BEAGLESYNTH/bsp.c +++ b/bsp/src/BEAGLESYNTH/bsp.c @@ -51,6 +51,7 @@ LCD_t lcd0={ .paint = &ili9328paint, .paintText = &ili9328paintText, .paintFilRect = &ili9328paintFilRect, + .getPix = &ili9328getPix, .refreshenable = &ili9328refreshenable, .width= 240, .height = 320 @@ -58,8 +59,8 @@ LCD_t lcd0={ terminal_t terminal0; -volatile int16_t* lcd0_CMD=(volatile int16_t*) 0x60000000; -volatile int16_t* lcd0_DATA=(volatile int16_t*)(0x61FFFFF0); +volatile int16_t* lcd0_CMD=(volatile int16_t*)0x60000000; +volatile int16_t* lcd0_DATA=(volatile int16_t*)0x61FFFFF0; float VREF0 =(float)3.3; diff --git a/bsp/src/OPLAYER/bsp.c b/bsp/src/OPLAYER/bsp.c --- a/bsp/src/OPLAYER/bsp.c +++ b/bsp/src/OPLAYER/bsp.c @@ -51,6 +51,7 @@ LCD_t lcd0={ .paint = &ili9328paint, .paintText = &ili9328paintText, .paintFilRect = &ili9328paintFilRect, + .getPix = &ili9328getPix, .refreshenable = &ili9328refreshenable, .width= 240, .height = 320 @@ -58,8 +59,8 @@ LCD_t lcd0={ terminal_t terminal0; -volatile uint8_t* lcd0_CMD=(volatile uint8_t*) 0x60000000; -volatile uint8_t* lcd0_DATA=(volatile uint8_t*)(0x61FFFFF0); +volatile uint8_t* lcd0_CMD=(volatile uint8_t*)0x60000000; +volatile uint8_t* lcd0_DATA=(volatile uint8_t*)0x61FFFFF0; float VREF0 =(float)3.3; volatile vs10XXDev audioCodec0; @@ -95,6 +96,11 @@ int bsp_init() printf(BSP); printf(" initialised\n\r"); printf( "=====================\n\r"); +#if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ + printf( "BIG ENDIAN MACHINE\n\r"); +#else + printf( "LITLE ENDIAN MACHINE\n\r"); +#endif return 1; } @@ -124,18 +130,18 @@ void bsp_GPIO_init() void bsp_uart_init() { -// if(__opnfiles__[1]==NULL) -// { -// //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t)); -// streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice)); -// uart_t uart = uartopenandconfig(uart3,uartparitynone | uart8bits | uartonestop,115200,PD8,PD9,-1,-1); -// uartmkstreamdev(uart,fd1); -// __opnfiles__[1] = fd1; -// } -// else -// { -// uartopenandconfig(uart3,uartparitynone | uart8bits | uartonestop,115200,PD8,PD9,-1,-1); -// } + // if(__opnfiles__[1]==NULL) + // { + // //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t)); + // streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice)); + // uart_t uart = uartopenandconfig(uart3,uartparitynone | uart8bits | uartonestop,115200,PD8,PD9,-1,-1); + // uartmkstreamdev(uart,fd1); + // __opnfiles__[1] = fd1; + // } + // else + // { + // uartopenandconfig(uart3,uartparitynone | uart8bits | uartonestop,115200,PD8,PD9,-1,-1); + // } } /* @@ -161,7 +167,7 @@ int bsp_FSMC_init() } FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; - FSMC_NORSRAMTimingInitTypeDef p; + FSMC_NORSRAMTimingInitTypeDef p,readtim; /* Enable FSMC clock */ RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); @@ -169,23 +175,34 @@ int bsp_FSMC_init() /*-- FSMC Configuration ------------------------------------------------------*/ /*----------------------- SRAM Bank 3 ----------------------------------------*/ /* FSMC_Bank1_NORSRAM4 configuration */ - //p.FSMC_AddressSetupTime = 5; - //p.FSMC_AddressSetupTime = 1; - p.FSMC_AddressSetupTime = 3; - p.FSMC_AddressHoldTime = 3; - //p.FSMC_DataSetupTime = 9; + p.FSMC_AddressSetupTime = 0xf; + p.FSMC_AddressHoldTime = 0xf; //ili9328 -> data setup time > 10ns - p.FSMC_DataSetupTime = 1; + p.FSMC_DataSetupTime = 0xf; if(getCpuFreq()>100*1000*1000) - p.FSMC_DataSetupTime = 2;// 11; - p.FSMC_BusTurnAroundDuration = 0; + p.FSMC_DataSetupTime = 0xf;// 11; + p.FSMC_BusTurnAroundDuration = 0xf; p.FSMC_CLKDivision = 0; - p.FSMC_DataLatency = 0; + p.FSMC_DataLatency = 0xf; //ili9328 -> data hold time > 15ns if(getCpuFreq()>66*1000*1000) - p.FSMC_DataLatency = 1; + p.FSMC_DataLatency = 0xf; p.FSMC_AccessMode = FSMC_AccessMode_A; + readtim.FSMC_AddressSetupTime = 0xf; + readtim.FSMC_AddressHoldTime = 0xf; + //p.FSMC_DataSetupTime = 9; + readtim.FSMC_DataSetupTime = 0xf ;// 11; + if(getCpuFreq()>100*1000*1000) + readtim.FSMC_DataSetupTime = 0xf;// 11; + readtim.FSMC_BusTurnAroundDuration = 0xf; + readtim.FSMC_CLKDivision = 0; + readtim.FSMC_DataLatency = 0xf; + if(getCpuFreq()>66*1000*1000) + readtim.FSMC_DataLatency = 0xf; + readtim.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; @@ -199,7 +216,7 @@ int bsp_FSMC_init() FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; - FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readtim; FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); @@ -298,7 +315,7 @@ void bsp_SD_init() { printf("Can't open or read MBR\n"); } - delay_100us(10000); + delay_100us(1000); if(mbropen(&sdcard2blkdev,&sdcard2Part2,2)==MBRnoErr) { if(FATnoErr!=fat32open(&sdcard2FAT32part2,&sdcard2Part2)) @@ -308,7 +325,7 @@ void bsp_SD_init() { printf("Can't open or read MBR\n"); } - delay_100us(10000); + delay_100us(1000); if(mbropen(&sdcard2blkdev,&sdcard2Part3,3)==MBRnoErr) { if(FATnoErr!=fat32open(&sdcard2FAT32part3,&sdcard2Part3)) @@ -318,7 +335,7 @@ void bsp_SD_init() { printf("Can't open or read MBR\n"); } - delay_100us(10000); + delay_100us(1000); if(mbropen(&sdcard2blkdev,&sdcard2Part4,4)==MBRnoErr) { if(FATnoErr!=fat32open(&sdcard2FAT32part4,&sdcard2Part4)) @@ -334,7 +351,7 @@ void bsp_SD_init() printf("Can't initialize SDCARD\n"); } } - delay_100us(20000); + delay_100us(2000); } void vs1052setXCS(char val) @@ -379,7 +396,7 @@ char bspsdcardwriteprotected() void bspsdcardselect(char YESNO) { - // gpiosetval(LED1,(int)YESNO); + // gpiosetval(LED1,(int)YESNO); if(YESNO) gpioclr(SDCARD2CS); else @@ -389,7 +406,11 @@ void bspsdcardselect(char YESNO) void bsp_lcd0_write_reg(uint32_t reg,uint32_t data) { - uint8_t* pt8 = (uint8_t*)(void*)® + uint8_t* pt8 = (uint8_t*)(void*)(®); + *lcd0_CMD=(uint8_t)0; + *lcd0_CMD=(uint8_t)0; + *lcd0_CMD=(uint8_t)0; + *lcd0_CMD=(uint8_t)0; #if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ *lcd0_CMD=pt8[3]; *lcd0_CMD=pt8[2]; @@ -408,8 +429,12 @@ void bsp_lcd0_write_reg(uint32_t reg,uin uint32_t bsp_lcd0_read_reg(uint32_t reg) { - uint8_t* pt8 = (uint8_t*)(void*)® + uint8_t* pt8 = (uint8_t*)(void*)(®); uint32_t DATA=0; + *lcd0_CMD=(uint8_t)0; + *lcd0_CMD=(uint8_t)0; + *lcd0_CMD=(uint8_t)0; + *lcd0_CMD=(uint8_t)0; #if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ *lcd0_CMD=pt8[3]; *lcd0_CMD=pt8[2]; @@ -431,7 +456,11 @@ uint32_t bsp_lcd0_read_reg(uint32_t reg) void bsp_lcd0_writeGRAM(void* buffer,uint32_t count) { uint32_t reg =ILI9328_REGISTER_WRITEDATATOGRAM; - uint8_t* pt8 = (uint8_t*)(void*)® + uint8_t* pt8 = (uint8_t*)(void*)(®); + *lcd0_CMD=(uint8_t)0; + *lcd0_CMD=(uint8_t)0; + *lcd0_CMD=(uint8_t)0; + *lcd0_CMD=(uint8_t)0; #if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ *lcd0_CMD=pt8[3]; *lcd0_CMD=pt8[2]; @@ -458,7 +487,11 @@ void bsp_lcd0_writeGRAM(void* buffer,uin void bsp_lcd0_readGRAM(void* buffer,uint32_t count) { uint32_t reg =ILI9328_REGISTER_WRITEDATATOGRAM; - uint8_t* pt8 = (uint8_t*)(void*)® + volatile uint8_t* pt8 = (uint8_t*)(void*)® + *lcd0_CMD=(uint8_t)0; + *lcd0_CMD=(uint8_t)0; + *lcd0_CMD=(uint8_t)0; + *lcd0_CMD=(uint8_t)0; #if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ *lcd0_CMD=pt8[3]; *lcd0_CMD=pt8[2]; @@ -466,38 +499,26 @@ void bsp_lcd0_readGRAM(void* buffer,uint for(int i=0;i<(int)count;i++) { pt8[(2*i) +1]=*lcd0_DATA; - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); pt8[2*i]=*lcd0_DATA; } #else *lcd0_CMD=pt8[1]; *lcd0_CMD=pt8[0]; - pt8 = (uint8_t*)(void*)buffer; + pt8 = (uint8_t*)buffer; + /* + * x dummy reads Cf ili9328 datasheet p79! + */ + pt8[0]=*lcd0_DATA; + pt8[1]=*lcd0_DATA; + for(int i=0;i<(int)count;i++) { pt8[(2*i) +1]=*lcd0_DATA; - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); + pt8[2*i]=*lcd0_DATA; + pt8[(2*i) +1]=*lcd0_DATA; pt8[2*i]=*lcd0_DATA; - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); - __asm__("nop"); - pt8[(2*i) +1]=(uint8_t)0; - pt8[(2*i)]=(uint8_t)0; + // pt8[(2*i) +1]=(uint8_t)0; + // pt8[(2*i)]=(uint8_t)0; } #endif } diff --git a/bsp/src/SIMULATOR/bsp.c b/bsp/src/SIMULATOR/bsp.c --- a/bsp/src/SIMULATOR/bsp.c +++ b/bsp/src/SIMULATOR/bsp.c @@ -46,6 +46,7 @@ LCD_t lcd0={ .paint = &ili9328paint, .paintText = &ili9328paintText, .paintFilRect = &ili9328paintFilRect, + .getPix = &ili9328getPix, .refreshenable = &ili9328refreshenable, .width= 240, .height = 320 diff --git a/bsp/src/STM32F4Discovery-ILI9328-8bits/STM32F4Discovery-ILI9328-8bits.pro b/bsp/src/STM32F4Discovery-ILI9328-8bits/STM32F4Discovery-ILI9328-8bits.pro new file mode 100644 --- /dev/null +++ b/bsp/src/STM32F4Discovery-ILI9328-8bits/STM32F4Discovery-ILI9328-8bits.pro @@ -0,0 +1,18 @@ +TEMPLATE = lib + +TARGET=bsp +OBJECTS_DIR = obj + +BSP=STM32F4Discovery-ILI9328-8bits + +UCMODEL=stm32f4 + +SOURCES += bsp.c + +HEADERS += bsp.h + + +BSPFILE = bsp.pri + + + diff --git a/bsp/src/STM32F4Discovery-ILI9328-8bits/bsp.c b/bsp/src/STM32F4Discovery-ILI9328-8bits/bsp.c new file mode 100644 --- /dev/null +++ b/bsp/src/STM32F4Discovery-ILI9328-8bits/bsp.c @@ -0,0 +1,378 @@ +/*------------------------------------------------------------------------------ +-- This file is a part of the libuc, microcontroler library +-- Copyright (C) 2011, Alexis Jeandet +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program; if not, write to the Free Software +-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +------------------------------------------------------------------------------- +-- Author : Alexis Jeandet +-- Mail : alexis.jeandet@member.fsf.org +-------------------------------------------------------------------------------*/ +#include "bsp.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +uint32_t OSC0 =8000000; +uint32_t INTOSC =16000000; +uint32_t RTCOSC =32768; +uint32_t currentCpuFreq=0; +extern streamdevice* __opnfiles__[__MAX_OPENED_FILES__]; + +volatile uint8_t* lcd0_CMD=(volatile uint8_t*)0x60000000; +volatile uint8_t* lcd0_DATA=(volatile uint8_t*)0x61FFFFF0; +terminal_t terminal0; +volatile vs10XXDev audioCodec0; +sdcardDev sdcard2; +blkdevice sdcard2blkdev; +dikpartition sdcard2Part1; +FAT32fs sdcard2FAT32part1; +dikpartition sdcard2Part2; +FAT32fs sdcard2FAT32part2; +dikpartition sdcard2Part3; +FAT32fs sdcard2FAT32part3; +dikpartition sdcard2Part4; +FAT32fs sdcard2FAT32part4; + +LCD_IF_t lcdIF0={ + .init = &bsp_FSMC_init, + .writereg = &bsp_lcd0_write_reg, + .readreg = &bsp_lcd0_read_reg, + .writeGRAM = &bsp_lcd0_writeGRAM, + .readGRAM = &bsp_lcd0_readGRAM +}; + +LCD_t lcd0={ + .interface = &lcdIF0, + .init = &ili9328init, + .paint = &ili9328paint, + .paintText = &ili9328paintText, + .paintFilRect = &ili9328paintFilRect, + .refreshenable = &ili9328refreshenable, + .width= 240, + .height = 320 +}; + + +float VREF0 =(float)3.3; + +int bsp_init() +{ + int i=0; + for(i=0;i<32;i++) + { + __opnfiles__[i] = NULL; + } + bsp_GPIO_init(); + bsp_uart_init(); + bsp_FSMC_init(); + bsp_GTerm_init(); + printf("\r================================================================\n\r"); + printf("================================================================\n\r"); + printf(BSP); + printf(" initialised\n\r"); + printf("================================================================\n\r"); + return 1; +} + +void bsp_GPIO_init() +{ + gpio_t gpio1 = gpioopen(PD12);//gpioopen(LED1); //PD9 D=> 0x0300 9 => 0x0009 + gpio_t gpio2 = gpioopen(PD13);//gpioopen(LED2); + gpio_t gpio3 = gpioopen(PD14);//gpioopen(LED2); + gpio_t gpio4 = gpioopen(PD15);//gpioopen(LED2); + gpiosetspeed(&gpio1,gpiohighspeed); + gpiosetspeed(&gpio2,gpiohighspeed); + gpiosetspeed(&gpio3,gpiohighspeed); + gpiosetspeed(&gpio4,gpiohighspeed); + gpiosetdir(&gpio1,gpiooutdir); + gpiosetdir(&gpio3,gpiooutdir); + gpiosetdir(&gpio2,gpiooutdir); + gpiosetdir(&gpio4,gpiooutdir); +} + +void bsp_uart_init() +{ +// if(__opnfiles__[1]==NULL) +// { +// //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t)); +// streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice)); +// uart_t uart = uartopenandconfig(uart3,uartparitynone | uart8bits | uartonestop,19200,PB10,PB11,-1,-1); +// uartmkstreamdev(uart,fd1); +// __opnfiles__[1] = fd1; //stdo +// __opnfiles__[0] = fd1; //stdi +// } +// else +// { +// uartopenandconfig(2,uartparitynone | uart8bits | uartonestop,115200,PB10,PB11,-1,-1); +// } +} + +void bsp_spi_init() +{ + +} + + +int bsp_FSMC_init() +{ +#define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA)) +#define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8) + + gpio_t LCD_DBxList[]={PD14,PD15,PD0,PD1,PE7,PE8,PE9,PE10\ + ,PD4,PD5,PD7,PE4}; + for(int i=0;i<12;i++) + { + gpio_t LCD_DBx = gpioopen(LCD_DBxList[i]); + LCD_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype; + gpiosetconfig(&LCD_DBx); + GPIO_PinAFConfig(GPIOGETPORT(LCD_DBx), (uint8_t)(LCD_DBx & 0xF), GPIO_AF_FSMC); + } + + FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; + FSMC_NORSRAMTimingInitTypeDef p,readtim; + + /* Enable FSMC clock */ + RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); + + /*-- FSMC Configuration ------------------------------------------------------*/ + /*----------------------- SRAM Bank 3 ----------------------------------------*/ + /* FSMC_Bank1_NORSRAM4 configuration */ + p.FSMC_AddressSetupTime = 3; + p.FSMC_AddressHoldTime = 3; + //ili9328 -> data setup time > 10ns + p.FSMC_DataSetupTime = 1; + if(getCpuFreq()>100*1000*1000) + p.FSMC_DataSetupTime = 2;// 11; + p.FSMC_BusTurnAroundDuration = 0; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + //ili9328 -> data hold time > 15ns + if(getCpuFreq()>66*1000*1000) + p.FSMC_DataLatency = 1; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + readtim.FSMC_AddressSetupTime = 0xF; + readtim.FSMC_AddressHoldTime = 0xF; + //p.FSMC_DataSetupTime = 9; + readtim.FSMC_DataSetupTime = 0xF ;// 11; + if(getCpuFreq()>100*1000*1000) + readtim.FSMC_DataSetupTime = 0xF;// 11; + readtim.FSMC_BusTurnAroundDuration = 0xf; + readtim.FSMC_CLKDivision = 0; + readtim.FSMC_DataLatency = 0xF; + if(getCpuFreq()>66*1000*1000) + readtim.FSMC_DataLatency = 0xF; + readtim.FSMC_AccessMode = FSMC_AccessMode_A; + + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readtim; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; + + FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); + + FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); + gpioset(LCD_RESET); + gpioclr(LCD_RESET); + delay_100us(500); + gpioset(LCD_RESET); + delay_100us(500); + lcd0.init(&lcd0); + gpioset(LCD_BACKL); + return 1; +} + + +void bsp_iic_init() +{ + +} + +void bsp_SD_init() +{ + +} + + +void vs10XXclearXCS(){} +void vs10XXsetXCS(){} +int vs10XXDREQ() +{ + return 1; +} + + +void bsppowersdcard(char onoff) //always ON +{ + +} + +char bspsdcardpresent() +{ + return 0; +} + +char bspsdcardwriteprotected() +{ + return 0; +} + +void bspsdcardselect(char YESNO) +{ + +} + + + +void bsp_lcd0_write_reg(uint32_t reg,uint32_t data) +{ + uint8_t* pt8 = (uint8_t*)(void*)® +#if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ + *lcd0_CMD=pt8[3]; + *lcd0_CMD=pt8[2]; + pt8 = (uint8_t*)(void*)&data; + *lcd0_DATA=pt8[3]; + *lcd0_DATA=pt8[2]; +#else + *lcd0_CMD=pt8[1]; + *lcd0_CMD=pt8[0]; + pt8 = (uint8_t*)(void*)&data; + *lcd0_DATA=pt8[1]; + *lcd0_DATA=pt8[0]; +#endif + +} + +uint32_t bsp_lcd0_read_reg(uint32_t reg) +{ + uint8_t* pt8 = (uint8_t*)(void*)® + uint32_t DATA=0; +#if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ + *lcd0_CMD=pt8[3]; + *lcd0_CMD=pt8[2]; + pt8 = (uint8_t*)(void*)&DATA; + pt8[3]=*lcd0_DATA; + pt8[2]=*lcd0_DATA; +#else + + *lcd0_CMD=pt8[1]; + *lcd0_CMD=pt8[0]; + pt8 = (uint8_t*)(void*)&DATA; + pt8[1]=*lcd0_DATA; + pt8[0]=*lcd0_DATA; +#endif + + return DATA; +} + +void bsp_lcd0_writeGRAM(void* buffer,uint32_t count) +{ + uint32_t reg =ILI9328_REGISTER_WRITEDATATOGRAM; + uint8_t* pt8 = (uint8_t*)(void*)(®); +#if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ + *lcd0_CMD=pt8[3]; + *lcd0_CMD=pt8[2]; + pt8 = (uint8_t*)(void*)buffer; + for(int i=0;i<(int)count;i++) + { + *lcd0_DATA=pt8[(2*i) +1]; + *lcd0_DATA=pt8[2*i]; + } +#else + + *lcd0_CMD=pt8[1]; + *lcd0_CMD=pt8[0]; + pt8 = (uint8_t*)(void*)buffer; + for(int i=0;i<(int)count;i++) + { + + *lcd0_DATA=pt8[(2*i) +1]; + *lcd0_DATA=pt8[2*i]; + } +#endif +} + +void bsp_lcd0_readGRAM(void* buffer,uint32_t count) +{ + uint32_t reg =ILI9328_REGISTER_WRITEDATATOGRAM; + uint8_t* pt8 = (uint8_t*)(void*)® +#if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ + *lcd0_CMD=pt8[3]; + *lcd0_CMD=pt8[2]; + pt8 = (uint8_t*)(void*)buffer; + for(int i=0;i<(int)count;i++) + { + pt8[(2*i) +1]=*lcd0_DATA; + pt8[2*i]=*lcd0_DATA; + } +#else + *lcd0_CMD=pt8[1]; + *lcd0_CMD=pt8[0]; + pt8 = (uint8_t*)(void*)buffer; + /* + * x dummy reads Cf ili9328 datasheet p79! + */ + pt8[0]=*lcd0_DATA; + pt8[0]=*lcd0_DATA; + + for(int i=0;i<(int)count;i++) + { + pt8[(2*i) +1]=*lcd0_DATA; + pt8[2*i]=*lcd0_DATA; + // pt8[(2*i) +1]=(uint8_t)0; + // pt8[(2*i)]=(uint8_t)0; + } +#endif +} + +void bsp_GTerm_init() +{ + if(__opnfiles__[1]==NULL) + { + streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice)); + terminal_init(&terminal0 ,&lcd0,&ComicSansMS_8,fd1); + __opnfiles__[1] = fd1; + } + else + { + + } +} + + + + + diff --git a/bsp/src/STM32F4Discovery-ILI9328-8bits/bsp.h b/bsp/src/STM32F4Discovery-ILI9328-8bits/bsp.h new file mode 100644 --- /dev/null +++ b/bsp/src/STM32F4Discovery-ILI9328-8bits/bsp.h @@ -0,0 +1,127 @@ +/*------------------------------------------------------------------------------ +-- This file is a part of the libuc, microcontroler library +-- Copyright (C) 2011, Alexis Jeandet +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program; if not, write to the Free Software +-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +------------------------------------------------------------------------------- +-- Author : Alexis Jeandet +-- Mail : alexis.jeandet@member.fsf.org +-------------------------------------------------------------------------------*/ +#ifndef BSP_H +#define BSP_H +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* +#ifndef PD12 + #define PD12 +#endif +#ifndef PD13 + #define PD13 +#endif +*/ +#define __MAX_OPENED_FILES__ 32 +#define __FS_ROOT_SIZE__ 32 + +#define LED1 PD12 +#define LED2 PD13 +#define BP3 PA0 + +#define LCD_RESET PD10 +#define LCD_BACKL PE11 + +#define GREENLEDON (GPIOD->BSRRL = 1<<12) +#define ORANGELEDON (GPIOD->BSRRL = 1<<13) +#define REDLEDON (GPIOD->BSRRL = 1<<14) +#define BLUELEDON (GPIOD->BSRRL = 1<<15) + +#define GREENLEDOFF (GPIOD->BSRRH = 1<<12) +#define ORANGELEDOFF (GPIOD->BSRRH = 1<<13) +#define REDLEDOFF (GPIOD->BSRRH = 1<<14) +#define BLUELEDOFF (GPIOD->BSRRH = 1<<15) + +extern float VREF0; +extern LCD_t lcd0; +extern uint32_t OSC0; +extern uint32_t currentCpuFreq; +extern volatile vs10XXDev audioCodec0; +extern sdcardDev sdcard2; +extern blkdevice sdcard2blkdev; +extern dikpartition sdcard2Part1; +extern FAT32fs sdcard2FAT32part1; +extern dikpartition sdcard2Part2; +extern FAT32fs sdcard2FAT32part2; +extern dikpartition sdcard2Part3; +extern FAT32fs sdcard2FAT32part3; +extern dikpartition sdcard2Part4; +extern FAT32fs sdcard2FAT32part4; + + +extern int bsp_init(); + +extern void bsp_GPIO_init(); +extern void bsp_uart_init(); +extern void bsp_iic_init(); +extern void bsp_spi_init(); +extern void bsp_SD_init(); +extern void bsp_GTerm_init(); +extern int bsp_FSMC_init(); + +void bsp_lcd0_write_reg(uint32_t reg,uint32_t data); +uint32_t bsp_lcd0_read_reg(uint32_t reg); +void bsp_lcd0_writeGRAM(void *buffer, uint32_t count); +void bsp_lcd0_readGRAM(void *buffer, uint32_t count); + +/* VS1053 */ +extern void clearXCS(); +extern void setXCS(); +extern int vs10XXDREQ(); + +/* SD CARD */ +void bsppowersdcard(char onoff); +char bspsdcardpresent(); +void bspsdcardselect(char YESNO); +char bspsdcardwriteprotected(); + +#endif + + + + + + + + + + + + + + + + + + + diff --git a/bsp/src/STM32F4Discovery-ILI9328-8bits/bsp.pri b/bsp/src/STM32F4Discovery-ILI9328-8bits/bsp.pri new file mode 100644 --- /dev/null +++ b/bsp/src/STM32F4Discovery-ILI9328-8bits/bsp.pri @@ -0,0 +1,3 @@ +CPU=stm32f4xxxG +DEFINES+=BSP=\\\"STM32F4Discovery-ILI9328-8bits\\\" +UCMODEL=stm32f4 diff --git a/bsp/src/STM32F4Eval/bsp.c b/bsp/src/STM32F4Eval/bsp.c --- a/bsp/src/STM32F4Eval/bsp.c +++ b/bsp/src/STM32F4Eval/bsp.c @@ -50,6 +50,7 @@ LCD_t lcd0={ .paint = &ili9328paint, .paintText = &ili9328paintText, .paintFilRect = &ili9328paintFilRect, + .getPix = &ili9328getPix, .refreshenable = &ili9328refreshenable, .width= 240, .height = 320 @@ -161,7 +162,7 @@ int bsp_FSMC_init() } FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; - FSMC_NORSRAMTimingInitTypeDef p; + FSMC_NORSRAMTimingInitTypeDef p,readtim; /* Enable FSMC clock */ RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); @@ -169,13 +170,32 @@ int bsp_FSMC_init() /*-- FSMC Configuration ------------------------------------------------------*/ /*----------------------- SRAM Bank 3 ----------------------------------------*/ /* FSMC_Bank1_NORSRAM3 configuration */ - p.FSMC_AddressSetupTime = 1; - p.FSMC_AddressHoldTime = 0; - p.FSMC_DataSetupTime = getCpuFreq()/14545450 ;// 11; - p.FSMC_BusTurnAroundDuration = 0; + p.FSMC_AddressSetupTime = 0xf; + p.FSMC_AddressHoldTime = 0xf; + //ili9328 -> data setup time > 10ns + p.FSMC_DataSetupTime = 0xf; + if(getCpuFreq()>100*1000*1000) + p.FSMC_DataSetupTime = 0xf;// 11; + p.FSMC_BusTurnAroundDuration = 0xf; p.FSMC_CLKDivision = 0; - p.FSMC_DataLatency = 0; + p.FSMC_DataLatency = 0xf; + //ili9328 -> data hold time > 15ns + if(getCpuFreq()>66*1000*1000) + p.FSMC_DataLatency = 0xf; p.FSMC_AccessMode = FSMC_AccessMode_A; + + readtim.FSMC_AddressSetupTime = 0xf; + readtim.FSMC_AddressHoldTime = 0xf; + //p.FSMC_DataSetupTime = 9; + readtim.FSMC_DataSetupTime = 0xf ;// 11; + if(getCpuFreq()>100*1000*1000) + readtim.FSMC_DataSetupTime = 0xf;// 11; + readtim.FSMC_BusTurnAroundDuration = 0xf; + readtim.FSMC_CLKDivision = 0; + readtim.FSMC_DataLatency = 0xf; + if(getCpuFreq()>66*1000*1000) + readtim.FSMC_DataLatency = 0xf; + readtim.FSMC_AccessMode = FSMC_AccessMode_A; /* Color LCD configuration ------------------------------------ LCD configured as follow: - Data/Address MUX = Disable @@ -198,7 +218,7 @@ int bsp_FSMC_init() FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; - FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readtim; FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); diff --git a/bsp/src/bsp.pro b/bsp/src/bsp.pro --- a/bsp/src/bsp.pro +++ b/bsp/src/bsp.pro @@ -7,6 +7,7 @@ SUBDIRS += STM32F4Discovery \ BEAGLESYNTH \ STM32F4Eval \ STM32F4Discovery-EXT \ + STM32F4Discovery-ILI9328-8bits \ OPLAYER \ SIMULATOR diff --git a/examples/SOLAR_PSU_HELLO/hello.pro b/examples/SOLAR_PSU_HELLO/hello.pro --- a/examples/SOLAR_PSU_HELLO/hello.pro +++ b/examples/SOLAR_PSU_HELLO/hello.pro @@ -4,8 +4,9 @@ CONFIG += cpu UCMODEL=stm32f4 BSP = OPLAYER +#BSP = STM32F4Discovery-ILI9328-8bits -DEFINES += CPUFREQ=160000000 +DEFINES += CPUFREQ=50000000 SOURCES += \ diff --git a/examples/SOLAR_PSU_HELLO/main.c b/examples/SOLAR_PSU_HELLO/main.c --- a/examples/SOLAR_PSU_HELLO/main.c +++ b/examples/SOLAR_PSU_HELLO/main.c @@ -19,6 +19,9 @@ extern streamdevice* __opnfiles__[]; extern void test_Block_Move(LCD_t* LCD,int x,int y,int w,int h,int color); +extern void test_all_colors(LCD_t* LCD); +extern void test_small_lines(LCD_t* LCD); +void test_uniform_rw(LCD_t* LCD); char buffer[512]; void randBoxesDemo() @@ -134,11 +137,17 @@ void playAllparts() } } -int main2() +int main() { delay_100us(30000); int i=0; int color=0; +// test_all_colors(&lcd0); + test_small_lines(&lcd0); + test_uniform_rw(&lcd0); + + printf("LCD ID REG = 0x%X\n\r",lcd0.interface->readreg(ILI9328_REGISTER_DRIVERCODEREAD)); + while(1); for(i=0;i<240;i++) { if(i>(240/3)) @@ -181,7 +190,7 @@ int main2() while(1); } -int main() +int main2() { extern terminal_t terminal0; extern volatile vs10XXDev audioCodec0; diff --git a/examples/SOLAR_PSU_HELLO/test_lcd.c b/examples/SOLAR_PSU_HELLO/test_lcd.c --- a/examples/SOLAR_PSU_HELLO/test_lcd.c +++ b/examples/SOLAR_PSU_HELLO/test_lcd.c @@ -21,3 +21,50 @@ void test_Block_Move(LCD_t* LCD,int x,in { LCD->paintFilRect(LCD,x,y,w,h,0,0,color); } + +void test_small_lines(LCD_t* LCD) +{ + int i=0; + for(i=0;iheight;i+=2) + { + LCD->paintFilRect(LCD,0,i,LCD->width,1,0,0,0xaa00); + } + for(i=1;iheight;i+=2) + { + LCD->paintFilRect(LCD,0,i,LCD->width,1,0,0,0x5500); + } + +} + +void test_uniform_rw(LCD_t* LCD) +{ + uint16_t buffer[50*50]; + LCD->paintFilRect(LCD,0,0,LCD->width,LCD->height/2,0,0,0xfaa0); + delay_100us(10000); + LCD->paintFilRect(LCD,0,0,LCD->width,LCD->height,0,0,0xfaa0); + ili9328setFrame(LCD,10,100,50,50); + while(1) + { +// LCD->interface->readGRAM((void*)buffer,50*50); + LCD->getPix(LCD,buffer,10,100,50,50); + LCD->paint(LCD,buffer,10,100,50,50); + delay_100us(10000); + //ili9328setFrame(LCD,10,100,50,50); + //LCD->interface->writeGRAM((void*)buffer,50*50); + } + +} + +void test_all_colors(LCD_t* LCD) +{ + uint16_t color=0; + char colorch[]=" "; + while(1) + { + LCD->paintFilRect(LCD,0,0,LCD->width,LCD->height,0,0,color); + sprintf(colorch,"0x%x",0xFFFF & ((int)color)); + LCD->paintText(LCD,colorch,10,100,&ComicSansMS_18,color^-1); + //delay_100us(10); + color+=1; + } +} diff --git a/examples/TEST_SIMULATOR/main.c b/examples/TEST_SIMULATOR/main.c --- a/examples/TEST_SIMULATOR/main.c +++ b/examples/TEST_SIMULATOR/main.c @@ -18,6 +18,7 @@ extern streamdevice* __opnfiles__[]; extern void test_Block_Move(LCD_t* LCD,int x,int y,int w,int h,int color); char buffer[512]; + void streamdevicePrint(streamdevice* dev, const char* format,...) { char** str_buffer; @@ -31,6 +32,20 @@ void streamdevicePrint(streamdevice* dev free(*str_buffer); } +//int printf(const char *format,...) +//{ +// char** str_buffer; +// int i; +// va_list ap; +// va_start(ap,format); +// vasprintf(str_buffer,format,ap); +// va_end(ap); +// i=strlen(*str_buffer); +// __opnfiles__[1]->ops->write(__opnfiles__[1],(void*)*str_buffer,1,i); +// free(*str_buffer); + +//} + void lcd_print() { lcd0.paintFilRect(&lcd0,10,10,100,100,0,0,0x0F0F); diff --git a/examples/lcdTerminal/lcdTerminal.pro b/examples/lcdTerminal/lcdTerminal.pro --- a/examples/lcdTerminal/lcdTerminal.pro +++ b/examples/lcdTerminal/lcdTerminal.pro @@ -6,7 +6,7 @@ UCMODEL=stm32f4 BSP = STM32F4Eval -DEFINES += CPUFREQ=40000000 +DEFINES += CPUFREQ=168000000 SOURCES += \ main.c diff --git a/examples/lcdTerminal/main.c b/examples/lcdTerminal/main.c --- a/examples/lcdTerminal/main.c +++ b/examples/lcdTerminal/main.c @@ -47,6 +47,44 @@ void testIOEXPender() // printf("Scan for IOEXPANDER:\n\r ID1=%d\n\rID2=%d",stmpe811getID(&ioexp1),stmpe811getID(&ioexp2)); } +int _terminal_writenc(terminal_t* terminal,char* data, int n) +{ +#define CHARXPOS(terminal,charwidth) (((terminal)->column * charwidth) + (terminal)->Xpos) +#define CHARYPOS(terminal,charheight) ((terminal)->line * charheight + (terminal)->Ypos+charheight) + int charw=terminal->font->Width + terminal->horizontalSpace; + int charh=terminal->font->Height + terminal->verticalSpace; + int l=0; + char buffer[2]=" "; + while(lline= (terminal->line+1) % terminal->lineCount; + terminal->column = 0; +// if(terminal->line==0) +// terminal_clear(terminal); +// else +// terminal_clearCurentLine(terminal); + }else { + if(buffer[0]=='\t') + { + for(int i=0;i<1;i++)terminal_movecursor(terminal,1); + } +// else +// if(terminal->column==0)terminal_clearCurentLine(terminal); + if(buffer[0]!='\r'){ + // terminal->LCD->paintFilRect(terminal->LCD,CHARXPOS(terminal,charw),CHARYPOS(terminal, charh)-charh,charw,charh,terminal->backgroundColor,0,terminal->backgroundColor); + terminal->LCD->paintText(terminal->LCD,buffer,CHARXPOS(terminal,charw),(CHARYPOS(terminal, charh))-(terminal->verticalSpace/2),terminal->font,terminal->textColor); + terminal_movecursor(terminal,1); + } + } + l++; + } + return n; +} + int main() { delay_100us(10000); @@ -70,17 +108,12 @@ int main() printf("Column cnt :\n \t%d\n",terminal0.columnCount); printf("CPU Freq :\n \t%dMHz\n",getCpuFreq()/1000000); //testAudioDAC(); - testIOEXPender(); - while(1) + for(int i=0;i<240;i++) { - i%=1000; - //terminal->write(&terminal," Hi",1, 2); - //delay_100us(1000); - gpioset(LED1); - //delay_100us(1000); - gpioclr(LED1); + lcd0.paintFilRect(&lcd0,i,0,1,320,0,0,i); } - printf("hello world\n\r"); + lcd0.paintText(&lcd0,"A",100,100,&ComicSansMS_24,0); + while(1)_terminal_writenc(&terminal0,"test ",5); return 0; } diff --git a/lib/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328.c b/lib/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328.c --- a/lib/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328.c +++ b/lib/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328.c @@ -19,11 +19,13 @@ -- Author : Alexis Jeandet -- Mail : alexis.jeandet@member.fsf.org -------------------------------------------------------------------------------*/ +#define _PRVATE_ILI9328_ #include #include #include #include #include +#include #ifdef __OPTIMIZED_MATH #include @@ -341,7 +343,8 @@ void ili9328paintText(LCD_t* LCD,char* b if(*buffer<32)*buffer=32; if(*buffer>127)*buffer=32; ili9328setFrame(LCD,Xpos+(charnum*w),Ypos-h,w,1); - LCD->interface->readGRAM(tmp,w); +// LCD->interface->readGRAM(tmp,w); + ili9328getPix(LCD,tmp,Xpos+(charnum*w),Ypos-h,w,1); for(int i=0;i<(h*w);i++) { if( ((i%w)==0) ) //read current line to apply text pixmap @@ -351,7 +354,8 @@ void ili9328paintText(LCD_t* LCD,char* b ili9328setFrame(LCD,Xpos+(charnum*w),Ypos + linenum -h,w,1); LCD->interface->writeGRAM(tmp,w); ili9328setFrame(LCD,Xpos+(charnum*w),Ypos + linenum + 1-h,w,1); - LCD->interface->readGRAM(tmp,w); +// LCD->interface->readGRAM(tmp,w); + ili9328getPix(LCD,tmp,Xpos+(charnum*w),Ypos + linenum + 1-h,w,1); pix=0; } } @@ -419,4 +423,60 @@ int ili9328init(struct LCD_t* LCD) return 0; } +void ili9328cpFrame(LCD_t* LCD,void* buffer,int x,int y,int w, int h) +{ +#define __set__Address__(_x_,_y_) LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALGRAMADDRESSSET,_x_); \ + LCD->interface->writereg(ILI9328_REGISTER_VERTICALGRAMADDRESSSET,_y_) + uint16_t* castedBuff = (uint16_t*)buffer; + int cx=x,cy=y; + for(int i=0;i<(w*h);i++) + { + __set__Address__(cx,cy); + LCD->interface->readGRAM((void*)(&castedBuff[i]),1); + cx+=1; + if(cx>=(w+x)) + { + cx=x; + cy+=1; + } + } +} + + + +void ili9328getPix(struct LCD_t* LCD,uint16_t* buffer,uint16_t Xpos,uint16_t Ypos,uint16_t w,uint16_t h) +{ +#define __set__Address__(_x_,_y_) LCD->interface->writereg(ILI9328_REGISTER_HORIZONTALGRAMADDRESSSET,_x_); \ + LCD->interface->writereg(ILI9328_REGISTER_VERTICALGRAMADDRESSSET,_y_) + + uint16_t* castedBuff = (uint16_t*)buffer; + int cx=Xpos,cy=Ypos; + for(int i=0;i<(w*h);i++) + { + __set__Address__(cx,cy); + LCD->interface->readGRAM((void*)(&castedBuff[i]),1); + cx+=1; + if(cx>=(w+Xpos)) + { + cx=Xpos; + cy+=1; + } + } + +} + + + + + + + + + + + + + + + diff --git a/lib/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328_SIMULATOR.pro b/lib/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328_SIMULATOR.pro --- a/lib/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328_SIMULATOR.pro +++ b/lib/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328_SIMULATOR.pro @@ -16,3 +16,7 @@ UCMODEL=simulator target.path = $$[QT_INSTALL_LIBS]/$$UCMODEL INSTALLS += target +HEADERS += \ + ../../../../includes/GRAPHIC/CONTROLERS/ili9328.h \ + ../../../../includes/GRAPHIC/CONTROLERS/genericLCD_Controler.h + diff --git a/lib/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328_STM32F4.pro b/lib/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328_STM32F4.pro --- a/lib/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328_STM32F4.pro +++ b/lib/src/common/GRAPHIC/CONTROLERS/ILI9328/ili9328_STM32F4.pro @@ -20,3 +20,6 @@ UCMODEL=stm32f4 target.path = $$[QT_INSTALL_LIBS]/$$UCMODEL INSTALLS += target +HEADERS += \ + ../../../../includes/GRAPHIC/CONTROLERS/ili9328.h + diff --git a/lib/src/includes/GRAPHIC/CONTROLERS/genericLCD_Controler.h b/lib/src/includes/GRAPHIC/CONTROLERS/genericLCD_Controler.h --- a/lib/src/includes/GRAPHIC/CONTROLERS/genericLCD_Controler.h +++ b/lib/src/includes/GRAPHIC/CONTROLERS/genericLCD_Controler.h @@ -43,6 +43,7 @@ typedef struct LCD_t void (*paint)(struct LCD_t* LCD,void* buffer,uint16_t Xpos,uint16_t Ypos,uint16_t Width,uint16_t Height); void (*paintText)(struct LCD_t* LCD,char* buffer,uint16_t Xpos,uint16_t Ypos,sFONT *font,uint32_t color); void (*paintFilRect)(struct LCD_t* LCD,uint16_t Xpos,uint16_t Ypos,uint16_t w,uint16_t h,uint32_t contColor,uint16_t contSz,uint32_t fillColor); + void (*getPix)(struct LCD_t* LCD,uint16_t* buffer,uint16_t Xpos,uint16_t Ypos,uint16_t w,uint16_t h); void (*refreshenable)(struct LCD_t* LCD,int enable); uint16_t width; uint16_t height; diff --git a/lib/src/includes/GRAPHIC/CONTROLERS/ili9328.h b/lib/src/includes/GRAPHIC/CONTROLERS/ili9328.h --- a/lib/src/includes/GRAPHIC/CONTROLERS/ili9328.h +++ b/lib/src/includes/GRAPHIC/CONTROLERS/ili9328.h @@ -27,7 +27,7 @@ #include #include -extern int ili9328init(struct LCD_t* LCD); +extern int ili9328init(struct LCD_t* LCD); extern void ili9328setFrame(LCD_t* LCD,uint16_t X,uint16_t Y,uint16_t W,uint16_t H); extern void ili9328setGRAMaddress(LCD_t* LCD,uint16_t Haddress,uint16_t Vaddress); extern void ili9328paint(LCD_t* LCD,void* buffer,uint16_t Xpos,uint16_t Ypos,uint16_t Width,uint16_t Height); @@ -35,59 +35,63 @@ extern void ili9328paintText(LCD_t* LCD, extern void ili9328paintFilRect(LCD_t* LCD,uint16_t Xpos,uint16_t Ypos,uint16_t w,uint16_t h,uint32_t contColor,uint16_t contSz,uint32_t fillColor); extern void ili9328paintFilCirc(LCD_t* LCD,uint16_t Xpos,uint16_t Ypos,uint16_t r,uint32_t contColor,uint16_t contSz,uint32_t fillColor); extern void ili9328paintFilCircMidPoint(LCD_t* LCD,uint16_t Xpos,uint16_t Ypos,uint16_t r,uint32_t contColor,uint16_t contSz,uint32_t fillColor); +extern void ili9328getPix(struct LCD_t* LCD,uint16_t* buffer,uint16_t Xpos,uint16_t Ypos,uint16_t w,uint16_t h); extern void ili9328refreshenable(struct LCD_t* LCD,int enable); -#define ILI9328_REGISTER_DRIVERCODEREAD ((uint32_t) 0x0000 ) -#define ILI9328_REGISTER_DRIVEROUTPUTCONTROL1 ((uint32_t) 0x0001 ) -#define ILI9328_REGISTER_LCDDRIVINGCONTROL ((uint32_t) 0x0002 ) -#define ILI9328_REGISTER_ENTRYMODE ((uint32_t) 0x0003 ) -#define ILI9328_REGISTER_RESIZECONTROL ((uint32_t) 0x0004 ) -#define ILI9328_REGISTER_DISPLAYCONTROL1 ((uint32_t) 0x0007 ) -#define ILI9328_REGISTER_DISPLAYCONTROL2 ((uint32_t) 0x0008 ) -#define ILI9328_REGISTER_DISPLAYCONTROL3 ((uint32_t) 0x0009 ) -#define ILI9328_REGISTER_DISPLAYCONTROL4 ((uint32_t) 0x000A ) -#define ILI9328_REGISTER_RGBDISPLAYINTERFACECONTROL1 ((uint32_t) 0x000C ) -#define ILI9328_REGISTER_FRAMEMAKERPOSITION ((uint32_t) 0x000D ) -#define ILI9328_REGISTER_RGBDISPLAYINTERFACECONTROL2 ((uint32_t) 0x000F ) -#define ILI9328_REGISTER_POWERCONTROL1 ((uint32_t) 0x0010 ) -#define ILI9328_REGISTER_POWERCONTROL2 ((uint32_t) 0x0011 ) -#define ILI9328_REGISTER_POWERCONTROL3 ((uint32_t) 0x0012 ) -#define ILI9328_REGISTER_POWERCONTROL4 ((uint32_t) 0x0013 ) -#define ILI9328_REGISTER_HORIZONTALGRAMADDRESSSET ((uint32_t) 0x0020 ) -#define ILI9328_REGISTER_VERTICALGRAMADDRESSSET ((uint32_t) 0x0021 ) -#define ILI9328_REGISTER_WRITEDATATOGRAM ((uint32_t) 0x0022 ) -#define ILI9328_REGISTER_POWERCONTROL7 ((uint32_t) 0x0029 ) -#define ILI9328_REGISTER_FRAMERATEANDCOLORCONTROL ((uint32_t) 0x002B ) -#define ILI9328_REGISTER_GAMMACONTROL1 ((uint32_t) 0x0030 ) -#define ILI9328_REGISTER_GAMMACONTROL2 ((uint32_t) 0x0031 ) -#define ILI9328_REGISTER_GAMMACONTROL3 ((uint32_t) 0x0032 ) -#define ILI9328_REGISTER_GAMMACONTROL4 ((uint32_t) 0x0035 ) -#define ILI9328_REGISTER_GAMMACONTROL5 ((uint32_t) 0x0036 ) -#define ILI9328_REGISTER_GAMMACONTROL6 ((uint32_t) 0x0037 ) -#define ILI9328_REGISTER_GAMMACONTROL7 ((uint32_t) 0x0038 ) -#define ILI9328_REGISTER_GAMMACONTROL8 ((uint32_t) 0x0039 ) -#define ILI9328_REGISTER_GAMMACONTROL9 ((uint32_t) 0x003C ) -#define ILI9328_REGISTER_GAMMACONTROL10 ((uint32_t) 0x003D ) -#define ILI9328_REGISTER_HORIZONTALADDRESSSTARTPOSITION ((uint32_t) 0x0050 ) -#define ILI9328_REGISTER_HORIZONTALADDRESSENDPOSITION ((uint32_t) 0x0051 ) -#define ILI9328_REGISTER_VERTICALADDRESSSTARTPOSITION ((uint32_t) 0x0052 ) -#define ILI9328_REGISTER_VERTICALADDRESSENDPOSITION ((uint32_t) 0x0053 ) -#define ILI9328_REGISTER_DRIVEROUTPUTCONTROL2 ((uint32_t) 0x0060 ) -#define ILI9328_REGISTER_BASEIMAGEDISPLAYCONTROL ((uint32_t) 0x0061 ) -#define ILI9328_REGISTER_VERTICALSCROLLCONTROL ((uint32_t) 0x006A ) -#define ILI9328_REGISTER_PARTIALIMAGE1DISPLAYPOSITION ((uint32_t) 0x0080 ) -#define ILI9328_REGISTER_PARTIALIMAGE1AREASTARTLINE ((uint32_t) 0x0081 ) -#define ILI9328_REGISTER_PARTIALIMAGE1AREAENDLINE ((uint32_t) 0x0082 ) -#define ILI9328_REGISTER_PARTIALIMAGE2DISPLAYPOSITION ((uint32_t) 0x0083 ) -#define ILI9328_REGISTER_PARTIALIMAGE2AREASTARTLINE ((uint32_t) 0x0084 ) -#define ILI9328_REGISTER_PARTIALIMAGE2AREAENDLINE ((uint32_t) 0x0085 ) -#define ILI9328_REGISTER_PANELINTERFACECONTROL1 ((uint32_t) 0x0090 ) -#define ILI9328_REGISTER_PANELINTERFACECONTROL2 ((uint32_t) 0x0092 ) -#define ILI9328_REGISTER_PANELINTERFACECONTROL4 ((uint32_t) 0x0095 ) -#define ILI9328_REGISTER_OTPVCMPROGRAMMINGCONTROL ((uint32_t) 0x00A1 ) -#define ILI9328_REGISTER_OTPVCMSTATUSANDENABLE ((uint32_t) 0x00A2 ) -#define ILI9328_REGISTER_OTPPROGRAMMINGIDKEY ((uint32_t) 0x00A5 ) +#define ILI9328_REGISTER_DRIVERCODEREAD ((uint32_t) 0x0000 ) +#define ILI9328_REGISTER_DRIVEROUTPUTCONTROL1 ((uint32_t) 0x0001 ) +#define ILI9328_REGISTER_LCDDRIVINGCONTROL ((uint32_t) 0x0002 ) +#define ILI9328_REGISTER_ENTRYMODE ((uint32_t) 0x0003 ) +#define ILI9328_REGISTER_RESIZECONTROL ((uint32_t) 0x0004 ) +#define ILI9328_REGISTER_DISPLAYCONTROL1 ((uint32_t) 0x0007 ) +#define ILI9328_REGISTER_DISPLAYCONTROL2 ((uint32_t) 0x0008 ) +#define ILI9328_REGISTER_DISPLAYCONTROL3 ((uint32_t) 0x0009 ) +#define ILI9328_REGISTER_DISPLAYCONTROL4 ((uint32_t) 0x000A ) +#define ILI9328_REGISTER_RGBDISPLAYINTERFACECONTROL1 ((uint32_t) 0x000C ) +#define ILI9328_REGISTER_FRAMEMAKERPOSITION ((uint32_t) 0x000D ) +#define ILI9328_REGISTER_RGBDISPLAYINTERFACECONTROL2 ((uint32_t) 0x000F ) +#define ILI9328_REGISTER_POWERCONTROL1 ((uint32_t) 0x0010 ) +#define ILI9328_REGISTER_POWERCONTROL2 ((uint32_t) 0x0011 ) +#define ILI9328_REGISTER_POWERCONTROL3 ((uint32_t) 0x0012 ) +#define ILI9328_REGISTER_POWERCONTROL4 ((uint32_t) 0x0013 ) +#define ILI9328_REGISTER_HORIZONTALGRAMADDRESSSET ((uint32_t) 0x0020 ) +#define ILI9328_REGISTER_VERTICALGRAMADDRESSSET ((uint32_t) 0x0021 ) +#define ILI9328_REGISTER_WRITEDATATOGRAM ((uint32_t) 0x0022 ) +#define ILI9328_REGISTER_POWERCONTROL7 ((uint32_t) 0x0029 ) +#define ILI9328_REGISTER_FRAMERATEANDCOLORCONTROL ((uint32_t) 0x002B ) +#define ILI9328_REGISTER_GAMMACONTROL1 ((uint32_t) 0x0030 ) +#define ILI9328_REGISTER_GAMMACONTROL2 ((uint32_t) 0x0031 ) +#define ILI9328_REGISTER_GAMMACONTROL3 ((uint32_t) 0x0032 ) +#define ILI9328_REGISTER_GAMMACONTROL4 ((uint32_t) 0x0035 ) +#define ILI9328_REGISTER_GAMMACONTROL5 ((uint32_t) 0x0036 ) +#define ILI9328_REGISTER_GAMMACONTROL6 ((uint32_t) 0x0037 ) +#define ILI9328_REGISTER_GAMMACONTROL7 ((uint32_t) 0x0038 ) +#define ILI9328_REGISTER_GAMMACONTROL8 ((uint32_t) 0x0039 ) +#define ILI9328_REGISTER_GAMMACONTROL9 ((uint32_t) 0x003C ) +#define ILI9328_REGISTER_GAMMACONTROL10 ((uint32_t) 0x003D ) +#define ILI9328_REGISTER_HORIZONTALADDRESSSTARTPOSITION ((uint32_t) 0x0050 ) +#define ILI9328_REGISTER_HORIZONTALADDRESSENDPOSITION ((uint32_t) 0x0051 ) +#define ILI9328_REGISTER_VERTICALADDRESSSTARTPOSITION ((uint32_t) 0x0052 ) +#define ILI9328_REGISTER_VERTICALADDRESSENDPOSITION ((uint32_t) 0x0053 ) +#define ILI9328_REGISTER_DRIVEROUTPUTCONTROL2 ((uint32_t) 0x0060 ) +#define ILI9328_REGISTER_BASEIMAGEDISPLAYCONTROL ((uint32_t) 0x0061 ) +#define ILI9328_REGISTER_VERTICALSCROLLCONTROL ((uint32_t) 0x006A ) +#define ILI9328_REGISTER_PARTIALIMAGE1DISPLAYPOSITION ((uint32_t) 0x0080 ) +#define ILI9328_REGISTER_PARTIALIMAGE1AREASTARTLINE ((uint32_t) 0x0081 ) +#define ILI9328_REGISTER_PARTIALIMAGE1AREAENDLINE ((uint32_t) 0x0082 ) +#define ILI9328_REGISTER_PARTIALIMAGE2DISPLAYPOSITION ((uint32_t) 0x0083 ) +#define ILI9328_REGISTER_PARTIALIMAGE2AREASTARTLINE ((uint32_t) 0x0084 ) +#define ILI9328_REGISTER_PARTIALIMAGE2AREAENDLINE ((uint32_t) 0x0085 ) +#define ILI9328_REGISTER_PANELINTERFACECONTROL1 ((uint32_t) 0x0090 ) +#define ILI9328_REGISTER_PANELINTERFACECONTROL2 ((uint32_t) 0x0092 ) +#define ILI9328_REGISTER_PANELINTERFACECONTROL4 ((uint32_t) 0x0095 ) +#define ILI9328_REGISTER_OTPVCMPROGRAMMINGCONTROL ((uint32_t) 0x00A1 ) +#define ILI9328_REGISTER_OTPVCMSTATUSANDENABLE ((uint32_t) 0x00A2 ) +#define ILI9328_REGISTER_OTPPROGRAMMINGIDKEY ((uint32_t) 0x00A5 ) +#ifdef _PRVATE_ILI9328_ +void ili9328cpFrame(LCD_t* LCD,void* buffer,int x,int y,int w, int h); +#endif #endif diff --git a/lib/src/simulator/SDLCD/SDLCD.c b/lib/src/simulator/SDLCD/SDLCD.c --- a/lib/src/simulator/SDLCD/SDLCD.c +++ b/lib/src/simulator/SDLCD/SDLCD.c @@ -79,21 +79,27 @@ void SDLCD_writereg(uint32_t reg,uint32_ { switch (reg) { case ILI9328_REGISTER_HORIZONTALGRAMADDRESSSET: + if((data>=screen->w) || (data<0))printf("Warning printing out of bounds HORIZONTALGRAMADDRESSSET=%d",data); SDLCD_Xpos = data; break; case ILI9328_REGISTER_VERTICALGRAMADDRESSSET: + if((data>=screen->h) || (data<0))printf("Warning printing out of bounds ILI9328_REGISTER_VERTICALGRAMADDRESSSET=%d",data); SDLCD_Ypos = data; break; case ILI9328_REGISTER_HORIZONTALADDRESSSTARTPOSITION: + if((data>=screen->w) || (data<0))printf("Warning printing out of bounds ILI9328_REGISTER_HORIZONTALADDRESSSTARTPOSITION=%d",data); SDLCD_XWinStrt = data; break; case ILI9328_REGISTER_HORIZONTALADDRESSENDPOSITION: + if((data>=screen->w) || (data<0))printf("Warning printing out of bounds ILI9328_REGISTER_HORIZONTALADDRESSENDPOSITION=%d",data); SDLCD_XWinEnd = data; break; case ILI9328_REGISTER_VERTICALADDRESSSTARTPOSITION: + if((data>=screen->h) || (data<0))printf("Warning printing out of bounds ILI9328_REGISTER_VERTICALADDRESSSTARTPOSITION=%d",data); SDLCD_YWinStrt = data; break; case ILI9328_REGISTER_VERTICALADDRESSENDPOSITION: + if((data>=screen->h) || (data<0))printf("Warning printing out of bounds ILI9328_REGISTER_VERTICALADDRESSENDPOSITION=%d",data); SDLCD_YWinEnd = data; break; default: diff --git a/mkspecs/features/stm32f4/qmake.conf b/mkspecs/features/stm32f4/qmake.conf --- a/mkspecs/features/stm32f4/qmake.conf +++ b/mkspecs/features/stm32f4/qmake.conf @@ -44,7 +44,7 @@ contains( TEMPLATE, app ) { # OTHER_FILES += $$[QT_INSTALL_PREFIX]/ucfiles/stm32f4/$$CPU/stm32_flash.ld stflash.target = stflash - stflash.commands = cd $$DESTDIR && sudo st-flash write $(QMAKE_TARGET).bin 0x08000000 + stflash.commands = cd $$DESTDIR && st-flash write $(QMAKE_TARGET).bin 0x08000000 dfu.target = dfu dfu.commands = cd $$DESTDIR && dfu-util d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D $(QMAKE_TARGET).bin 0x08000000 QMAKE_EXTRA_TARGETS += stflash dfu