Compare commits

..

1 Commits

Author SHA1 Message Date
07d5fdb434 add requierment for task2 2024-03-18 13:59:32 +01:00
7 changed files with 625 additions and 131 deletions

View File

@ -1107,7 +1107,7 @@
// <e> I2C3 (Inter-integrated Circuit Interface 3) [Driver_I2C3]
// <i> Configuration settings for Driver_I2C3 in component ::CMSIS Driver:I2C
#define RTE_I2C3 0
#define RTE_I2C3 1
// <o> I2C3_SCL Pin <0=>PH7 <1=>PA8
#define RTE_I2C3_SCL_PORT_ID 0

View File

@ -0,0 +1,38 @@
#include "stm32f7xx_hal.h"
#include "clock_216.h"
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Setup system clock to 216MHz
//------------------------------------------------------------------------------
void SystemClock_Config (void) {
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
/* Enable HSE Oscillator and activate PLL with HSE as source */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 25;
RCC_OscInitStruct.PLL.PLLN = 432;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 9;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
/* Activate the OverDrive to reach the 216 MHz Frequency */
HAL_PWREx_EnableOverDrive();
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7);
}

View File

@ -0,0 +1,17 @@
/************************************************************************//**
* \file clock_216.h
* \brief Function to set the system clock to 216 MHz
* \author pascal (dot) sartoretti (at) hevs (dot) ch
***************************************************************************/
#ifndef __CLOCK_216_H
#define __CLOCK_216_H
#include <stdint.h>
/************************************************************************//**
* \brief Inits the system clock to 216 MHz
***************************************************************************/
extern void SystemClock_Config (void);
#endif /* __CLOCK_216_H */

View File

@ -26,10 +26,13 @@
/* Keil.ARM Compiler::Compiler:I/O:STDOUT:ITM:1.2.0 */
#define RTE_Compiler_IO_STDOUT /* Compiler I/O: STDOUT */
#define RTE_Compiler_IO_STDOUT_ITM /* Compiler I/O: STDOUT ITM */
/* Keil::CMSIS Driver:I2C:1.9.0 */
#define RTE_Drivers_I2C1 /* Driver I2C1 */
#define RTE_Drivers_I2C2 /* Driver I2C2 */
#define RTE_Drivers_I2C3 /* Driver I2C3 */
#define RTE_Drivers_I2C4 /* Driver I2C4 */
/* Keil::Device:STM32Cube Framework:Classic:1.2.7 */
#define RTE_DEVICE_FRAMEWORK_CLASSIC
/* Keil::Device:STM32Cube HAL:CRC:1.2.7 */
#define RTE_DEVICE_HAL_CRC
/* Keil::Device:STM32Cube HAL:Common:1.2.7 */
#define RTE_DEVICE_HAL_COMMON
/* Keil::Device:STM32Cube HAL:Cortex:1.2.7 */

473
RTE/uGFX_library/gfxconf.h Normal file
View File

@ -0,0 +1,473 @@
/**
* This file has a different license to the rest of the uGFX system.
* You can copy, modify and distribute this file as you see fit.
* You do not need to publish your source modifications to this file.
* The only thing you are not permitted to do is to relicense it
* under a different license.
*/
/**
* Copy this file into your project directory and rename it as gfxconf.h
* Edit your copy to turn on the uGFX features you want to use.
* The values below are the defaults.
*
* Only remove the comments from lines where you want to change the
* default value. This allows definitions to be included from
* driver makefiles when required and provides the best future
* compatibility for your project.
*
* Please use spaces instead of tabs in this file.
*/
//* <<< Use Configuration Wizard in Context Menu >>>
#ifndef _GFXCONF_H
#define _GFXCONF_H
//<h> uGFX configuration with RTX5 operating system.
//<i> Full documentation available at: https://wiki.ugfx.io
#define CONF_WIZ_OS 1
///////////////////////////////////////////////////////////////////////////
// GOS - One of these must be defined, preferably in your Makefile //
///////////////////////////////////////////////////////////////////////////
//#define GFX_USE_OS_CHIBIOS FALSE
//#define GFX_USE_OS_FREERTOS FALSE
// #define GFX_FREERTOS_USE_TRACE FALSE
//#define GFX_USE_OS_WIN32 FALSE
//#define GFX_USE_OS_LINUX FALSE
//#define GFX_USE_OS_OSX FALSE
//#define GFX_USE_OS_ECOS FALSE
//#define GFX_USE_OS_RAWRTOS TRUE
//#define GFX_USE_OS_ARDUINO FALSE
//#define GFX_USE_OS_KEIL TRUE
//#define GFX_USE_OS_CMSIS FALSE
//#define GFX_USE_OS_CMSIS2 FALSE
#if CONF_WIZ_OS == 0
#define GFX_USE_OS_RAW32 TRUE
#define GFX_USE_OS_RTX5 FALSE
#define GFX_OS_PRE_INIT_FUNCTION Raw32OSInit
#define GFX_OS_INIT_NO_WARNING TRUE
#else
#define GFX_USE_OS_RAW32 FALSE
#define GFX_USE_OS_RTX5 TRUE
#define GFX_OS_INIT_NO_WARNING TRUE
#endif
//#define GFX_USE_OS_ZEPHYR FALSE
//#define GFX_USE_OS_NIOS FALSE
//#define GFX_USE_OS_QT FALSE
// #define INTERRUPTS_OFF() optional_code
// #define INTERRUPTS_ON() optional_code
// Options that (should where relevant) apply to all operating systems
// #define GFX_NO_INLINE FALSE
#define GFX_COMPILER GFX_COMPILER_KEIL
// #define GFX_SHOW_COMPILER FALSE
#define GFX_CPU GFX_CPU_CORTEX_M7
// #define GFX_CPU_NO_ALIGNMENT_FAULTS FALSE
// #define GFX_CPU_ENDIAN GFX_CPU_ENDIAN_UNKNOWN
//<o> GFX heap size (in bytes), min. 32000
#define GFX_OS_HEAP_SIZE 32000
#define GFX_OS_NO_INIT TRUE
// #define GFX_OS_EXTRA_INIT_FUNCTION myOSInitRoutine
// #define GFX_OS_EXTRA_DEINIT_FUNCTION myOSDeInitRoutine
// #define GFX_OS_CALL_UGFXMAIN FALSE
// #define GFX_OS_UGFXMAIN_STACKSIZE 0
// #define GFX_EMULATE_MALLOC FALSE
//<o> LCD orientartion <0=> Board orientation
// <90=> 90 degree rotate
// <180=> 180 degree rotate (default laboratory)
// <270=> 270 degree rotate
#define GDISP_DEFAULT_ORIENTATION 180 // If not defined the native hardware orientation is used.
///////////////////////////////////////////////////////////////////////////
// GDISP //
///////////////////////////////////////////////////////////////////////////
// <e> GDISP configuration
#define GFX_USE_GDISP 1
#define GDISP_NEED_CONTROL 1 // always because LCD is 180 degree
//<q> Use of draw circle functions
#define GDISP_NEED_CIRCLE 0
//<q> Use of draw circle into circle
#define GDISP_NEED_DUALCIRCLE 0
//<q> Use of draw ellipse functions
#define GDISP_NEED_ELLIPSE 0
//<q> Use of draw arc functions
#define GDISP_NEED_ARC 0
//<q> Use of draw arc sectors functions
#define GDISP_NEED_ARCSECTORS 0
//<q> Use of draw convex polygon functions
#define GDISP_NEED_CONVEX_POLYGON 0
//<q> Use of scrolling functions
#define GDISP_NEED_SCROLL 0
//<q> Use of read pixel functions
#define GDISP_NEED_PIXELREAD 0
//#define GDISP_NEED_QUERY FALSE
#define GDISP_NEED_MULTITHREAD 1
//#define GDISP_NEED_STREAMING FALSE
//#define GDISP_NEED_AUTOFLUSH FALSE
//#define GDISP_NEED_TIMERFLUSH FALSE
//<q> Control LCD boundaries
#define GDISP_NEED_VALIDATION 0
#define GDISP_NEED_CLIP TRUE
// <e> Text usage
#define GDISP_NEED_TEXT 1
//<q> Text word wrap
#define GDISP_NEED_TEXT_WORDWRAP 0
// #define GDISP_NEED_TEXT_BOXPADLR 1
// #define GDISP_NEED_TEXT_BOXPADTB 1
//<q> Text antialiasing
#define GDISP_NEED_ANTIALIAS 0
//<q> Text UTF8
#define GDISP_NEED_UTF8 1
//<q> Text kerning
#define GDISP_NEED_TEXT_KERNING 0
// <e> Fonts (use one at least)
#define FOR_CONF_WIZARD 1
//<q> Font ui1
#define GDISP_INCLUDE_FONT_UI1 0
//<q> Font ui2
#define GDISP_INCLUDE_FONT_UI2 1 // The smallest preferred font.
//<q> Font Largenumbers
#define GDISP_INCLUDE_FONT_LARGENUMBERS 0
//<q> Font DejaVuSans10
#define GDISP_INCLUDE_FONT_DEJAVUSANS10 0
//<q> Font DejaVuSans12
#define GDISP_INCLUDE_FONT_DEJAVUSANS12 0
//<q> Font DejaVuSans16
#define GDISP_INCLUDE_FONT_DEJAVUSANS16 0
//<q> Font DejaVuSans20
#define GDISP_INCLUDE_FONT_DEJAVUSANS20 0
//<q> Font DejaVuSans24
#define GDISP_INCLUDE_FONT_DEJAVUSANS24 0
//<q> Font DejaVuSans32
#define GDISP_INCLUDE_FONT_DEJAVUSANS32 0
//<q> Font DejaVuSansBold12
#define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12 0
//<q> Font Fixed_10x20
#define GDISP_INCLUDE_FONT_FIXED_10X20 0
//<q> Font Fixed_7x14
#define GDISP_INCLUDE_FONT_FIXED_7X14 0
//<q> Font Fixed_5x8
#define GDISP_INCLUDE_FONT_FIXED_5X8 0
//<q> Font DejaVuSans12_aa
#define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA 0
//<q> Font DejaVuSans16_aa
#define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA 0
//<q> Font DejaVuSans20_aa
#define GDISP_INCLUDE_FONT_DEJAVUSANS20_AA 0
//<q> Font Dejavusans24_aa
#define GDISP_INCLUDE_FONT_DEJAVUSANS24_AA 0
//<q> Font DejaVuSans32_aa
#define GDISP_INCLUDE_FONT_DEJAVUSANS32_AA 0
//<q> Font DejaVuSansBold12_aa
#define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12_AA 0
//<q> Font user
#define GDISP_INCLUDE_USER_FONTS 0
// </e>
// </e>
// <e> Image usage
#define GDISP_NEED_IMAGE 0
// <e> Image bitmap (BMP)
#define GDISP_NEED_IMAGE_BMP 0
//<q> Bitmap 1 bit
#define GDISP_NEED_IMAGE_BMP_1 0
//<q> Bitmap 4 bits
#define GDISP_NEED_IMAGE_BMP_4 0
//<q> Bitmap 4 bits RLE compressed
#define GDISP_NEED_IMAGE_BMP_4_RLE 0
//<q> Bitmap 8 bits
#define GDISP_NEED_IMAGE_BMP_8 0
//<q> Bitmap 8 bits RLE compressed
#define GDISP_NEED_IMAGE_BMP_8_RLE 0
//<q> Bitmap 16 bits
#define GDISP_NEED_IMAGE_BMP_16 0
//<q> Bitmap 24 bits
#define GDISP_NEED_IMAGE_BMP_24 0
//<q> Bitmap 32 bits
#define GDISP_NEED_IMAGE_BMP_32 0
#define GDISP_IMAGE_BMP_BLIT_BUFFER_SIZE 32
// </e>
//<q> Image GIF
#define GDISP_NEED_IMAGE_GIF 0
#define GDISP_IMAGE_GIF_BLIT_BUFFER_SIZE 32
//<q> Image JPG
#define GDISP_NEED_IMAGE_JPG 0
//<e> Image PNG
#define GDISP_NEED_IMAGE_PNG 0
//<q> PDG interlaced
#define GDISP_NEED_IMAGE_PNG_INTERLACED 0
//<q> PDG transparency
#define GDISP_NEED_IMAGE_PNG_TRANSPARENCY 1
//<q> PDG background
#define GDISP_NEED_IMAGE_PNG_BACKGROUND 1
// #define GDISP_NEED_IMAGE_PNG_ALPHACLIFF 32
// #define GDISP_NEED_IMAGE_PNG_PALETTE_124 TRUE
// #define GDISP_NEED_IMAGE_PNG_PALETTE_8 TRUE
// #define GDISP_NEED_IMAGE_PNG_GRAYSCALE_124 TRUE
// #define GDISP_NEED_IMAGE_PNG_GRAYSCALE_8 TRUE
// #define GDISP_NEED_IMAGE_PNG_GRAYSCALE_16 TRUE
// #define GDISP_NEED_IMAGE_PNG_GRAYALPHA_8 TRUE
// #define GDISP_NEED_IMAGE_PNG_GRAYALPHA_16 TRUE
// #define GDISP_NEED_IMAGE_PNG_RGB_8 TRUE
// #define GDISP_NEED_IMAGE_PNG_RGB_16 TRUE
// #define GDISP_NEED_IMAGE_PNG_RGBALPHA_8 TRUE
// #define GDISP_NEED_IMAGE_PNG_RGBALPHA_16 TRUE
// #define GDISP_IMAGE_PNG_BLIT_BUFFER_SIZE 32
// #define GDISP_IMAGE_PNG_FILE_BUFFER_SIZE 8
// #define GDISP_IMAGE_PNG_Z_BUFFER_SIZE 32768
// </e>
// #define GDISP_NEED_IMAGE_ACCOUNTING FALSE
// #define GDISP_NEED_IMAGE_NATIVE FALSE
//#define GDISP_NEED_PIXMAP FALSE
// #define GDISP_NEED_PIXMAP_IMAGE FALSE
//#define GDISP_LINEBUF_SIZE 128
//#define GDISP_STARTUP_COLOR Black
#define GDISP_NEED_STARTUP_LOGO FALSE
//#define GDISP_TOTAL_DISPLAYS 1
#define GDISP_DRIVER_LIST GDISPVMT_STM32LTDC
// #ifdef GDISP_DRIVER_LIST
// // For code and speed optimization define as TRUE or FALSE if all controllers have the same capability
// #define GDISP_HARDWARE_STREAM_WRITE FALSE
// #define GDISP_HARDWARE_STREAM_READ FALSE
// #define GDISP_HARDWARE_STREAM_POS FALSE
// #define GDISP_HARDWARE_DRAWPIXEL FALSE
// #define GDISP_HARDWARE_CLEARS FALSE
// #define GDISP_HARDWARE_FILLS FALSE
// #define GDISP_HARDWARE_BITFILLS FALSE
// #define GDISP_HARDWARE_SCROLL FALSE
#define GDISP_HARDWARE_PIXELREAD GFXON
// #define GDISP_HARDWARE_CONTROL FALSE
// #define GDISP_HARDWARE_QUERY FALSE
// #define GDISP_HARDWARE_CLIP FALSE
#define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB565
// #endif
//#define GDISP_USE_GFXNET FALSE
// #define GDISP_GFXNET_PORT 13001
// #define GDISP_GFXNET_CUSTOM_LWIP_STARTUP FALSE
// #define GDISP_DONT_WAIT_FOR_NET_DISPLAY FALSE
// #define GDISP_GFXNET_UNSAFE_SOCKETS FALSE
//</e>
// </e>
///////////////////////////////////////////////////////////////////////////
// GWIN //
///////////////////////////////////////////////////////////////////////////
// <e> GWIN configuration
#define GFX_USE_GWIN 0
// <e> Use windows manager
#define GWIN_NEED_WINDOWMANAGER 1
//<q> Redraw imadiate
#define GWIN_REDRAW_IMMEDIATE 0
//<q> Redraw all windows in single operation
#define GWIN_REDRAW_SINGLEOP 1
//<q> Flashing widget support
#define GWIN_NEED_FLASHING 0
//<o> Flashing period
#define GWIN_FLASHING_PERIOD 250
// </e>
// <e> Console support
#define GWIN_NEED_CONSOLE 0
//<q> Console history
#define GWIN_CONSOLE_HISTORY_ATCREATE 0
// #define GWIN_CONSOLE_USE_HISTORY 0
// #define GWIN_CONSOLE_HISTORY_AVERAGING FALSE
//<q> Use escape command for coloring
#define GWIN_CONSOLE_ESCSEQ 0
// #define GWIN_CONSOLE_USE_BASESTREAM FALSE // chibios only
//<q> Floating numbers support
#define GWIN_CONSOLE_USE_FLOAT 0
//</e>
//#define GWIN_NEED_GRAPH FALSE
//#define GWIN_NEED_GL3D FALSE
//<q> Widget support
#define GWIN_NEED_WIDGET 1
//#define GWIN_FOCUS_HIGHLIGHT_WIDTH 1
//<q> Label support
#define GWIN_NEED_LABEL 0
// #define GWIN_LABEL_ATTRIBUTE FALSE
//<q> Button support
#define GWIN_NEED_BUTTON 1
// #define GWIN_BUTTON_LAZY_RELEASE FALSE
//<q> Slider support
#define GWIN_NEED_SLIDER 0
// #define GWIN_SLIDER_NOSNAP FALSE
// #define GWIN_SLIDER_DEAD_BAND 5
// #define GWIN_SLIDER_TOGGLE_INC 20
//<q> Checkbox support
#define GWIN_NEED_CHECKBOX 0
//<e> Image support
#define GWIN_NEED_IMAGE 0
//<q> Image animation support
#define GWIN_NEED_IMAGE_ANIMATION 0
//</e>
//<q> Radio button support
#define GWIN_NEED_RADIO 0
//<e> List support
#define GWIN_NEED_LIST 0
//<q> List image support
#define GWIN_NEED_LIST_IMAGES 0
// </e>
//<q> Progressbar support
#define GWIN_NEED_PROGRESSBAR 0
// #define GWIN_PROGRESSBAR_AUTO FALSE
//<q> Keyboard support
#define GWIN_NEED_KEYBOARD 0
// #define GWIN_KEYBOARD_DEFAULT_LAYOUT VirtualKeyboard_English1
// #define GWIN_NEED_KEYBOARD_ENGLISH1 TRUE
//<q> Text edit support
#define GWIN_NEED_TEXTEDIT 0
// #define GWIN_FLAT_STYLING FALSE
//<q> Widgets tag support
#define GWIN_WIDGET_TAGS 0
//<q> Containers support
#define GWIN_NEED_CONTAINERS 1
//<q> Need container support
#define GWIN_NEED_CONTAINER 1
//<q> Frame support
#define GWIN_NEED_FRAME 0
//<q> Tabset support (see details)
#define GWIN_NEED_TABSET 0
// #define GWIN_TABSET_TABHEIGHT 18
// </e>
///////////////////////////////////////////////////////////////////////////
// GTRANS //
///////////////////////////////////////////////////////////////////////////
//#define GFX_USE_GTRANS FALSE
///////////////////////////////////////////////////////////////////////////
// GEVENT //
///////////////////////////////////////////////////////////////////////////
// <e> GEVENT configuration
#define GFX_USE_GEVENT 0
//#define GEVENT_ASSERT_NO_RESOURCE FALSE
//<o> Maximum size of an event (in bytes)
#define GEVENT_MAXIMUM_SIZE 32
//<o> Maximum Source/Listener pair
#define GEVENT_MAX_SOURCE_LISTENERS 32
//</e>
///////////////////////////////////////////////////////////////////////////
// GTIMER //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GTIMER 1
#define GTIMER_THREAD_PRIORITY HIGH_PRIORITY
#define GTIMER_THREAD_WORKAREA_SIZE 4096
///////////////////////////////////////////////////////////////////////////
// GQUEUE //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GQUEUE TRUE
#define GQUEUE_NEED_ASYNC TRUE
//#define GQUEUE_NEED_GSYNC FALSE
//#define GQUEUE_NEED_FSYNC FALSE
//#define GQUEUE_NEED_BUFFERS FALSE
///////////////////////////////////////////////////////////////////////////
// GINPUT //
///////////////////////////////////////////////////////////////////////////
// <e> GINPUT configuration
#define GFX_USE_GINPUT 0
//<q> Mouse / touchscreen support
#define GINPUT_NEED_MOUSE 0
// #define GINPUT_TOUCH_STARTRAW FALSE
// #define GINPUT_TOUCH_NOTOUCH FALSE
// #define GINPUT_TOUCH_NOCALIBRATE FALSE
#define GINPUT_TOUCH_NOCALIBRATE_GUI TRUE
// #define GINPUT_MOUSE_POLL_PERIOD 25
// #define GINPUT_MOUSE_CLICK_TIME 300
// #define GINPUT_TOUCH_CXTCLICK_TIME 700
// #define GINPUT_TOUCH_USER_CALIBRATION_LOAD FALSE
// #define GINPUT_TOUCH_USER_CALIBRATION_SAVE FALSE
#define GMOUSE_DRIVER_LIST GMOUSEVMT_FT5336
//<q> Keyboard support
#define GINPUT_NEED_KEYBOARD 0
// #define GINPUT_KEYBOARD_POLL_PERIOD 200
// #define GKEYBOARD_DRIVER_LIST GKEYBOARDVMT_Win32, GKEYBOARDVMT_Win32
// #define GKEYBOARD_LAYOUT_OFF FALSE
// #define GKEYBOARD_LAYOUT_SCANCODE2_US FALSE
//#define GINPUT_NEED_TOGGLE FALSE
//#define GINPUT_NEED_DIAL FALSE
//</e>
///////////////////////////////////////////////////////////////////////////
// GFILE //
///////////////////////////////////////////////////////////////////////////
// <e> GFILE configuration
#define GFX_USE_GFILE 0
// <e> String support
#define GFILE_NEED_STRINGS 0
//<q> printfg, fprintg, etc support
#define GFILE_NEED_PRINTG 0
//<q> scang, fscang, etc support
#define GFILE_NEED_SCANG 0
//</e>
//#define GFILE_NEED_FILELISTS FALSE
//#define GFILE_NEED_STDIO FALSE
//#define GFILE_NEED_NOAUTOMOUNT FALSE
//#define GFILE_NEED_NOAUTOSYNC FALSE
//#define GFILE_NEED_MEMFS FALSE
//<q> ROM file system support
#define GFILE_NEED_ROMFS 1
//<q> RAM file system support
#define GFILE_NEED_RAMFS 0
//#define GFILE_NEED_FATFS FALSE
//#define GFILE_NEED_NATIVEFS FALSE
//#define GFILE_NEED_CHBIOSFS FALSE
//#define GFILE_NEED_USERFS FALSE
//#define GFILE_ALLOW_FLOATS FALSE
//#define GFILE_ALLOW_DEVICESPECIFIC FALSE
//<o> Maximum number of files
#define GFILE_MAX_GFILES 6
//</e>
///////////////////////////////////////////////////////////////////////////
// GADC //
///////////////////////////////////////////////////////////////////////////
//#define GFX_USE_GADC FALSE
// #define GADC_MAX_LOWSPEED_DEVICES 4
///////////////////////////////////////////////////////////////////////////
// GAUDIO //
///////////////////////////////////////////////////////////////////////////
//#define GFX_USE_GAUDIO FALSE
// #define GAUDIO_NEED_PLAY FALSE
// #define GAUDIO_NEED_RECORD FALSE
///////////////////////////////////////////////////////////////////////////
// GMISC //
///////////////////////////////////////////////////////////////////////////
// <e> GMISC configuration (see details in file)
#define GFX_USE_GMISC 0
//#define GMISC_NEED_ARRAYOPS FALSE
//#define GMISC_NEED_FASTTRIG FALSE
//#define GMISC_NEED_FIXEDTRIG FALSE
//#define GMISC_NEED_INVSQRT FALSE
// #define GMISC_INVSQRT_MIXED_ENDIAN FALSE
// #define GMISC_INVSQRT_REAL_SLOW FALSE
#define GMISC_NEED_MATRIXFLOAT2D 0
//#define GMISC_NEED_MATRIXFIXED2D FALSE
//#define GMISC_NEED_HITTEST_POLY FALSE
// </e>
//</h>
#endif /* _GFXCONF_H */

View File

@ -339,7 +339,7 @@
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
<IncludePath>.\RTE\uGFX_library</IncludePath>
</VariousControls>
</Cads>
<Aads>
@ -394,7 +394,7 @@
<GroupName>::CMSIS</GroupName>
</Group>
<Group>
<GroupName>::Hesso pack</GroupName>
<GroupName>::CMSIS Driver</GroupName>
</Group>
<Group>
<GroupName>::Compiler</GroupName>
@ -402,12 +402,24 @@
<Group>
<GroupName>::Device</GroupName>
</Group>
<Group>
<GroupName>::Hesso pack</GroupName>
</Group>
<Group>
<GroupName>::uGFX library</GroupName>
</Group>
</Groups>
</Target>
</Targets>
<RTE>
<apis>
<api Capiversion="2.4.0" Cclass="CMSIS Driver" Cgroup="I2C" exclusive="0">
<package name="CMSIS" schemaVersion="1.7.7" url="http://www.keil.com/pack/" vendor="ARM" version="5.9.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</api>
<api Capiversion="2.1.3" Cclass="CMSIS" Cgroup="RTOS2" exclusive="1">
<package name="CMSIS" schemaVersion="1.7.7" url="http://www.keil.com/pack/" vendor="ARM" version="5.9.0"/>
<targetInfos>
@ -446,6 +458,12 @@
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Hesso pack" Cgroup="Utilities" Csub="Clock" Cvendor="HessoValais" Cversion="1.0.0">
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cbundle="ARM Compiler" Cclass="Compiler" Cgroup="Event Recorder" Cvariant="DAP" Cvendor="Keil" Cversion="1.5.1" condition="Cortex-M Device">
<package name="ARM_Compiler" schemaVersion="1.7.7" url="https://www.keil.com/pack/" vendor="Keil" version="1.7.2"/>
<targetInfos>
@ -458,13 +476,13 @@
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Capiversion="1.0.0" Cclass="Device" Cgroup="STM32Cube Framework" Csub="Classic" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 Framework Classic">
<component Capiversion="2.2.0" Cclass="CMSIS Driver" Cgroup="I2C" Cvendor="Keil" Cversion="1.9.0" condition="STM32F7 CMSIS_Driver I2C">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="Device" Cgroup="STM32Cube HAL" Csub="CRC" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 HAL">
<component Capiversion="1.0.0" Cclass="Device" Cgroup="STM32Cube Framework" Csub="Classic" Cvendor="Keil" Cversion="1.2.7" condition="STM32F7 Framework Classic">
<package name="STM32F7xx_DFP" schemaVersion="1.6.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.12.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
@ -518,6 +536,12 @@
<targetInfo name="Target 1"/>
</targetInfos>
</component>
<component Cclass="uGFX library" Cgroup="uGFX library" Cvariant="osRTX5" Cvendor="uGFX" Cversion="2.0.0">
<package name="uGFX_lib" schemaVersion="1.2" url="http://kpacks.hevs.ch/uGFX.uGFX_lib.pdsc" vendor="uGFX" version="2.0.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</component>
</components>
<files>
<file attr="config" category="source" name="CMSIS\RTOS2\RTX\Config\RTX_Config.c" version="5.1.1">
@ -576,6 +600,22 @@
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="source" name="extension_board\clock_216.c">
<instance index="0">RTE\Hesso_pack\clock_216.c</instance>
<component Cclass="Hesso pack" Cgroup="Utilities" Csub="Clock" Cvendor="HessoValais" Cversion="1.0.0"/>
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="header" name="extension_board\clock_216.h">
<instance index="0">RTE\Hesso_pack\clock_216.h</instance>
<component Cclass="Hesso pack" Cgroup="Utilities" Csub="Clock" Cvendor="HessoValais" Cversion="1.0.0"/>
<package name="Extension_board" schemaVersion="1.2" url="http://kpacks.hevs.ch/HessoValais.Extension_board.pdsc" vendor="HessoValais" version="1.2.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file attr="config" category="source" name="extension_board\ext_led.c" version="1.0.0">
<instance index="0">RTE\Hesso_pack\ext_led.c</instance>
<component Cclass="Hesso pack" Cgroup="Extension Board" Csub="LEDs" Cvendor="HessoValais" Cversion="1.0.0" condition="any"/>
@ -608,16 +648,15 @@
<targetInfo name="Target 1"/>
</targetInfos>
</file>
<file Cversion="2.0.0" attr="config" category="source" name="ugfx\config\with_os\gfxconf.h" version="2.0.0">
<instance index="0">RTE\uGFX_library\gfxconf.h</instance>
<component Cclass="uGFX library" Cgroup="uGFX library" Cvariant="osRTX5" Cvendor="uGFX" Cversion="2.0.0"/>
<package name="uGFX_lib" schemaVersion="1.2" url="http://kpacks.hevs.ch/uGFX.uGFX_lib.pdsc" vendor="uGFX" version="2.0.0"/>
<targetInfos>
<targetInfo name="Target 1"/>
</targetInfos>
</file>
</files>
</RTE>
<LayerInfo>
<Layers>
<Layer>
<LayName>lab04-queue</LayName>
<LayPrjMark>1</LayPrjMark>
</Layer>
</Layers>
</LayerInfo>
</Project>

160
main.c
View File

@ -5,6 +5,10 @@
#include "RTE_Components.h"
#include CMSIS_device_header
#include "cmsis_os2.h"
#include "ext_led.h"
#include "ext_uart.h"
#include "ext_buttons.h"
#include "ext_keyboard.h"
#include "string.h"
#include <stdio.h>
#include <stdlib.h>
@ -13,137 +17,62 @@
#include "EventRecorder.h"
#endif
CRC_HandleTypeDef hcrc;
static void MX_CRC_Init(void);
osThreadId_t thread1,thread2;
osMessageQueueId_t pipe1, pipe2;
osSemaphoreId_t mutexCRC;
osMessageQueueId_t msgQueue;
const osThreadAttr_t thread1_attr = {
.stack_size = 1024, // Create the thread stack size
.priority = osPriorityNormal, //Set initial thread priority to high
.name = "Task2",
.name = "Producer",
};
const osThreadAttr_t thread2_attr = {
.stack_size = 1024, // Create the thread stack size
.priority = osPriorityNormal, //Set initial thread priority to high
.name = "Task2",
.name = "Consumer",
};
const osMessageQueueAttr_t pipe1_attr = {
.name = "Pipe1",
};
const osMessageQueueAttr_t pipe2_attr = {
.name = "Pipe2",
};
const osSemaphoreAttr_t mutexCRC_attr = {
.name = "MTX_CRC", // name of the semaphore
const osMessageQueueAttr_t msgQueue_attr = {
.name = "MsgQueue",
};
//------------------------------------------------------------------------------
// Setup system clock to 216MHz
//------------------------------------------------------------------------------
void SystemClock_Config (void) {
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
/* Enable HSE Oscillator and activate PLL with HSE as source */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 25;
RCC_OscInitStruct.PLL.PLLN = 432;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 9;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
/* Activate the OverDrive to reach the 216 MHz Frequency */
HAL_PWREx_EnableOverDrive();
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7);
}
static void MX_CRC_Init(void) {
__HAL_RCC_CRC_CLK_ENABLE();
hcrc.Instance = CRC;
hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_WORDS;
if (HAL_CRC_Init(&hcrc) != HAL_OK) //Error_Handler();
{
}
}
/*----------------------------------------------------------------------------
* Thread Task1
* Thread Producer
*---------------------------------------------------------------------------*/
__NO_RETURN static void Task1(void *argument) {
uint32_t msg[]={1234,5678,41234,4356,122457,8562,45772,245735};
uint32_t crc;
osSemaphoreAcquire(mutexCRC, osWaitForever);
//MX_CRC_Init();
crc = HAL_CRC_Calculate(&hcrc, msg, 8); // TODO: CRC module init
osSemaphoreRelease(mutexCRC);
__NO_RETURN static void Thread_Producer (void *argument) {
osMessageQueueId_t* queue = (osMessageQueueId_t*)argument;
uint32_t counter = 0;
for(;;) {
// TODO: post 8 values and wait for the CRC back from Task 2
osStatus_t status;
while(1) {
for(uint8_t i = 0; i < 8;) {
status = osMessageQueuePut(pipe1, &(msg[i]), 1, 0);
if(status == osOK) i++;
osDelay(500);
osStatus_t statusQueue = osMessageQueuePut(*queue, &counter, 1, 0);
if(statusQueue != osOK) {
// TODO generate error
}
uint32_t recData;
counter++;
osDelay(100);
}
}
/*----------------------------------------------------------------------------
* Thread Consumer
*---------------------------------------------------------------------------*/
__NO_RETURN static void Thread_Consumer (void *argument) {
osMessageQueueId_t* queue = (osMessageQueueId_t*)argument;
uint8_t counter = 1;
for(;;) {
uint32_t msg;
osStatus_t statusQueue;
do {
status = osMessageQueueGet(pipe2, &recData, NULL, 0);
} while(status != osOK);
if(recData == crc) {
printf("CRC OK: %d\r\n", crc);
} else {
printf("Error ! crc = %d, and should be: %d\r\n", recData, crc);
}
}
}
}
/*----------------------------------------------------------------------------
* Thread Task2
*---------------------------------------------------------------------------*/
__NO_RETURN static void Task2(void *argument) {
uint32_t crc;
uint32_t recData;
for (;;) {
osSemaphoreAcquire(mutexCRC, osWaitForever);
MX_CRC_Init();
for(uint8_t i = 0; i < 8; i++) {
osMessageQueueGet(pipe1, &recData, NULL, osWaitForever);
crc = HAL_CRC_Accumulate(&hcrc, &recData, 1);
}
osSemaphoreRelease(mutexCRC);
osMessageQueuePut(pipe2, &crc, 1, osWaitForever);
statusQueue = osMessageQueueGet(*queue, &msg, NULL, 0);
if(statusQueue == osOK) printf("Value is %d\r\n", msg);
} while(statusQueue != osErrorResource);
if(++counter > 10) counter = 1;
osDelay(counter*100);
}
}
@ -159,22 +88,17 @@ int main (void) {
EventRecorderInitialize(EventRecordAll, 1U);
#endif
MX_CRC_Init();
osKernelInitialize(); // Initialize CMSIS-RTOS
pipe1 = osMessageQueueNew(8, 4, &pipe1_attr);
pipe2 = osMessageQueueNew(8, 4, &pipe2_attr);
thread1 = osThreadNew(Task1, (void*)1, &thread1_attr);
thread2 = osThreadNew(Task2, (void*)2, &thread2_attr);
mutexCRC= osSemaphoreNew(1,1,&mutexCRC_attr);
msgQueue = osMessageQueueNew(8, 4, &msgQueue_attr);
thread1 = osThreadNew(Thread_Producer, &msgQueue, &thread1_attr);
thread2 = osThreadNew(Thread_Consumer, &msgQueue, &thread2_attr);
//----------------------------------------------------------------------------------------------
// get names are placed for TraceAlyzer visualisation
//----------------------------------------------------------------------------------------------
osThreadGetName(thread1);
osThreadGetName(thread2);
osMessageQueueGetName(pipe1);
osMessageQueueGetName(pipe2);
osSemaphoreGetName(mutexCRC);
osMessageQueueGetName(msgQueue);
osKernelStart(); // Start thread execution
for (;;) {}
}