diff --git a/.mxproject b/.mxproject index b4e7714..de7e5f8 100644 --- a/.mxproject +++ b/.mxproject @@ -1,31 +1,33 @@ [PreviousLibFiles] -LibFiles=Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_system.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_bus.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_utils.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_usart.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_gpio.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_dma.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_pwr.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_exti.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_tim.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_rcc.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_utils.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_usart.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_system.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_bus.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_utils.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_usart.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; +LibFiles=Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_spi.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_bus.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_system.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_utils.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_usart.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_gpio.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_dma.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_spi.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_rcc.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_utils.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_exti.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_pwr.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_tim.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_usart.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_spi.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_bus.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_system.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_utils.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_usart.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; [PreviousUsedKeilFiles] -SourceFiles=..\Core\Src\main.c;..\Core\Src\gpio.c;..\Core\Src\dma.c;..\Core\Src\tim.c;..\Core\Src\usart.c;..\Core\Src\stm32f1xx_it.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_gpio.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_dma.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_pwr.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_exti.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_tim.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_rcc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_utils.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_usart.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\Core\Src\system_stm32f1xx.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_gpio.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_dma.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_pwr.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_exti.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_tim.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_rcc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_utils.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_usart.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\Core\Src\system_stm32f1xx.c;;; +SourceFiles=..\Core\Src\main.c;..\Core\Src\gpio.c;..\Core\Src\dma.c;..\Core\Src\spi.c;..\Core\Src\tim.c;..\Core\Src\usart.c;..\Core\Src\stm32f1xx_it.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_gpio.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_dma.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_spi.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_rcc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_utils.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_exti.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_pwr.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_tim.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_usart.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\Core\Src\system_stm32f1xx.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_gpio.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_dma.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_spi.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_rcc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_utils.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_exti.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_pwr.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_tim.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_ll_usart.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\Core\Src\system_stm32f1xx.c;;; HeaderPath=..\Drivers\STM32F1xx_HAL_Driver\Inc;..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\Drivers\CMSIS\Include;..\Core\Inc; CDefines=USE_FULL_LL_DRIVER;HSE_VALUE:8000000;HSE_STARTUP_TIMEOUT:100;LSE_STARTUP_TIMEOUT:5000;LSE_VALUE:32768;HSI_VALUE:8000000;LSI_VALUE:40000;VDD_VALUE:3300;PREFETCH_ENABLE:1;STM32F103xB;USE_FULL_LL_DRIVER;HSE_VALUE:8000000;HSE_STARTUP_TIMEOUT:100;LSE_STARTUP_TIMEOUT:5000;LSE_VALUE:32768;HSI_VALUE:8000000;LSI_VALUE:40000;VDD_VALUE:3300;PREFETCH_ENABLE:1; [PreviousGenFiles] AdvancedFolderStructure=true -HeaderFileListSize=7 +HeaderFileListSize=8 HeaderFiles#0=..\Core\Inc\gpio.h HeaderFiles#1=..\Core\Inc\dma.h -HeaderFiles#2=..\Core\Inc\tim.h -HeaderFiles#3=..\Core\Inc\usart.h -HeaderFiles#4=..\Core\Inc\stm32f1xx_it.h -HeaderFiles#5=..\Core\Inc\stm32_assert.h -HeaderFiles#6=..\Core\Inc\main.h +HeaderFiles#2=..\Core\Inc\spi.h +HeaderFiles#3=..\Core\Inc\tim.h +HeaderFiles#4=..\Core\Inc\usart.h +HeaderFiles#5=..\Core\Inc\stm32f1xx_it.h +HeaderFiles#6=..\Core\Inc\stm32_assert.h +HeaderFiles#7=..\Core\Inc\main.h HeaderFolderListSize=1 HeaderPath#0=..\Core\Inc HeaderFiles=; -SourceFileListSize=6 +SourceFileListSize=7 SourceFiles#0=..\Core\Src\gpio.c SourceFiles#1=..\Core\Src\dma.c -SourceFiles#2=..\Core\Src\tim.c -SourceFiles#3=..\Core\Src\usart.c -SourceFiles#4=..\Core\Src\stm32f1xx_it.c -SourceFiles#5=..\Core\Src\main.c +SourceFiles#2=..\Core\Src\spi.c +SourceFiles#3=..\Core\Src\tim.c +SourceFiles#4=..\Core\Src\usart.c +SourceFiles#5=..\Core\Src\stm32f1xx_it.c +SourceFiles#6=..\Core\Src\main.c SourceFolderListSize=1 SourcePath#0=..\Core\Src SourceFiles=; diff --git a/Core/Inc/main.h b/Core/Inc/main.h index abf11be..59be19d 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -36,6 +36,7 @@ extern "C" { #include "stm32f1xx_ll_cortex.h" #include "stm32f1xx_ll_utils.h" #include "stm32f1xx_ll_pwr.h" +#include "stm32f1xx_ll_spi.h" #include "stm32f1xx_ll_tim.h" #include "stm32f1xx_ll_usart.h" #include "stm32f1xx_ll_gpio.h" @@ -78,6 +79,16 @@ void Error_Handler(void); /* Private defines -----------------------------------------------------------*/ #define LED_BLUE_Pin LL_GPIO_PIN_13 #define LED_BLUE_GPIO_Port GPIOC +#define TMC2240_EN_Pin LL_GPIO_PIN_3 +#define TMC2240_EN_GPIO_Port GPIOA +#define TMC2240_CS_Pin LL_GPIO_PIN_4 +#define TMC2240_CS_GPIO_Port GPIOA +#define TMC2240_SCK_Pin LL_GPIO_PIN_5 +#define TMC2240_SCK_GPIO_Port GPIOA +#define TMC2240_MISO_Pin LL_GPIO_PIN_6 +#define TMC2240_MISO_GPIO_Port GPIOA +#define TMC2240_MOSI_Pin LL_GPIO_PIN_7 +#define TMC2240_MOSI_GPIO_Port GPIOA #define OLED_SDA_Pin LL_GPIO_PIN_12 #define OLED_SDA_GPIO_Port GPIOB #define OLDE_SCK_Pin LL_GPIO_PIN_13 diff --git a/Core/Inc/spi.h b/Core/Inc/spi.h new file mode 100644 index 0000000..913f44b --- /dev/null +++ b/Core/Inc/spi.h @@ -0,0 +1,50 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file spi.h + * @brief This file contains all the function prototypes for + * the spi.c file + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __SPI_H__ +#define __SPI_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_SPI1_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __SPI_H__ */ + diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index 7d058ef..46a4128 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -33,14 +33,14 @@ /* USER CODE END 1 */ /** Configure pins as - * Analog - * Input - * Output - * EVENT_OUT - * EXTI - * Free pins are configured automatically as Analog (this feature is enabled through - * the Code Generation settings) - */ + * Analog + * Input + * Output + * EVENT_OUT + * EXTI + * Free pins are configured automatically as Analog (this feature is enabled through + * the Code Generation settings) +*/ void MX_GPIO_Init(void) { @@ -56,7 +56,10 @@ void MX_GPIO_Init(void) LL_GPIO_ResetOutputPin(LED_BLUE_GPIO_Port, LED_BLUE_Pin); /**/ - LL_GPIO_ResetOutputPin(GPIOB, OLED_SDA_Pin | OLDE_SCK_Pin); + LL_GPIO_ResetOutputPin(GPIOA, TMC2240_EN_Pin|TMC2240_CS_Pin); + + /**/ + LL_GPIO_ResetOutputPin(GPIOB, OLED_SDA_Pin|OLDE_SCK_Pin); /**/ GPIO_InitStruct.Pin = LED_BLUE_Pin; @@ -66,27 +69,39 @@ void MX_GPIO_Init(void) LL_GPIO_Init(LED_BLUE_GPIO_Port, &GPIO_InitStruct); /**/ - GPIO_InitStruct.Pin = LL_GPIO_PIN_14 | LL_GPIO_PIN_15; + GPIO_InitStruct.Pin = LL_GPIO_PIN_14|LL_GPIO_PIN_15; GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG; LL_GPIO_Init(GPIOC, &GPIO_InitStruct); /**/ - GPIO_InitStruct.Pin = LL_GPIO_PIN_0 | LL_GPIO_PIN_2 | LL_GPIO_PIN_3 | LL_GPIO_PIN_4 | LL_GPIO_PIN_5 | LL_GPIO_PIN_6 | LL_GPIO_PIN_7 | LL_GPIO_PIN_8 | LL_GPIO_PIN_11 | LL_GPIO_PIN_12 | LL_GPIO_PIN_15; + GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_2|LL_GPIO_PIN_8|LL_GPIO_PIN_11 + |LL_GPIO_PIN_12|LL_GPIO_PIN_15; GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG; LL_GPIO_Init(GPIOA, &GPIO_InitStruct); /**/ - GPIO_InitStruct.Pin = LL_GPIO_PIN_0 | LL_GPIO_PIN_1 | LL_GPIO_PIN_2 | LL_GPIO_PIN_10 | LL_GPIO_PIN_11 | LL_GPIO_PIN_14 | LL_GPIO_PIN_15 | LL_GPIO_PIN_3 | LL_GPIO_PIN_4 | LL_GPIO_PIN_5 | LL_GPIO_PIN_6 | LL_GPIO_PIN_7 | LL_GPIO_PIN_8 | LL_GPIO_PIN_9; + GPIO_InitStruct.Pin = TMC2240_EN_Pin|TMC2240_CS_Pin; + GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; + GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; + LL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /**/ + GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_10 + |LL_GPIO_PIN_11|LL_GPIO_PIN_14|LL_GPIO_PIN_15|LL_GPIO_PIN_3 + |LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7 + |LL_GPIO_PIN_8|LL_GPIO_PIN_9; GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG; LL_GPIO_Init(GPIOB, &GPIO_InitStruct); /**/ - GPIO_InitStruct.Pin = OLED_SDA_Pin | OLDE_SCK_Pin; + GPIO_InitStruct.Pin = OLED_SDA_Pin|OLDE_SCK_Pin; GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; GPIO_InitStruct.Pull = LL_GPIO_PULL_UP; LL_GPIO_Init(GPIOB, &GPIO_InitStruct); + } /* USER CODE BEGIN 2 */ diff --git a/Core/Src/main.c b/Core/Src/main.c index 7198ed5..dd0d888 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -19,6 +19,7 @@ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "dma.h" +#include "spi.h" #include "tim.h" #include "usart.h" #include "gpio.h" @@ -102,6 +103,7 @@ int main(void) MX_USART1_UART_Init(); MX_TIM1_Init(); MX_TIM3_Init(); + MX_SPI1_Init(); /* USER CODE BEGIN 2 */ my_mem_init(SRAMIN); // Initialize internal memory pool 1 board_init(); diff --git a/Core/Src/spi.c b/Core/Src/spi.c new file mode 100644 index 0000000..9146037 --- /dev/null +++ b/Core/Src/spi.c @@ -0,0 +1,80 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file spi.c + * @brief This file provides code for the configuration + * of the SPI instances. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "spi.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* SPI1 init function */ +void MX_SPI1_Init(void) +{ + + /* USER CODE BEGIN SPI1_Init 0 */ + + /* USER CODE END SPI1_Init 0 */ + + LL_SPI_InitTypeDef SPI_InitStruct = {0}; + + LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* Peripheral clock enable */ + LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1); + + LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA); + /**SPI1 GPIO Configuration + PA5 ------> SPI1_SCK + PA6 ------> SPI1_MISO + PA7 ------> SPI1_MOSI + */ + GPIO_InitStruct.Pin = TMC2240_SCK_Pin|TMC2240_MOSI_Pin; + GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; + GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; + LL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = TMC2240_MISO_Pin; + GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING; + LL_GPIO_Init(TMC2240_MISO_GPIO_Port, &GPIO_InitStruct); + + /* USER CODE BEGIN SPI1_Init 1 */ + + /* USER CODE END SPI1_Init 1 */ + SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX; + SPI_InitStruct.Mode = LL_SPI_MODE_MASTER; + SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT; + SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_HIGH; + SPI_InitStruct.ClockPhase = LL_SPI_PHASE_2EDGE; + SPI_InitStruct.NSS = LL_SPI_NSS_SOFT; + SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV32; + SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST; + SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE; + SPI_InitStruct.CRCPoly = 10; + LL_SPI_Init(SPI1, &SPI_InitStruct); + /* USER CODE BEGIN SPI1_Init 2 */ + + /* USER CODE END SPI1_Init 2 */ + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_spi.h b/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_spi.h new file mode 100644 index 0000000..37e00b1 --- /dev/null +++ b/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_spi.h @@ -0,0 +1,1936 @@ +/** + ****************************************************************************** + * @file stm32f1xx_ll_spi.h + * @author MCD Application Team + * @brief Header file of SPI LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F1xx_LL_SPI_H +#define STM32F1xx_LL_SPI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx.h" + +/** @addtogroup STM32F1xx_LL_Driver + * @{ + */ + +#if defined (SPI1) || defined (SPI2) || defined (SPI3) + +/** @defgroup SPI_LL SPI + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ + +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup SPI_LL_ES_INIT SPI Exported Init structure + * @{ + */ + +/** + * @brief SPI Init structures definition + */ +typedef struct +{ + uint32_t TransferDirection; /*!< Specifies the SPI unidirectional or bidirectional data mode. + This parameter can be a value of @ref SPI_LL_EC_TRANSFER_MODE. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetTransferDirection().*/ + + uint32_t Mode; /*!< Specifies the SPI mode (Master/Slave). + This parameter can be a value of @ref SPI_LL_EC_MODE. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetMode().*/ + + uint32_t DataWidth; /*!< Specifies the SPI data width. + This parameter can be a value of @ref SPI_LL_EC_DATAWIDTH. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetDataWidth().*/ + + uint32_t ClockPolarity; /*!< Specifies the serial clock steady state. + This parameter can be a value of @ref SPI_LL_EC_POLARITY. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetClockPolarity().*/ + + uint32_t ClockPhase; /*!< Specifies the clock active edge for the bit capture. + This parameter can be a value of @ref SPI_LL_EC_PHASE. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetClockPhase().*/ + + uint32_t NSS; /*!< Specifies whether the NSS signal is managed by hardware (NSS pin) or by software using the SSI bit. + This parameter can be a value of @ref SPI_LL_EC_NSS_MODE. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetNSSMode().*/ + + uint32_t BaudRate; /*!< Specifies the BaudRate prescaler value which will be used to configure the transmit and receive SCK clock. + This parameter can be a value of @ref SPI_LL_EC_BAUDRATEPRESCALER. + @note The communication clock is derived from the master clock. The slave clock does not need to be set. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetBaudRatePrescaler().*/ + + uint32_t BitOrder; /*!< Specifies whether data transfers start from MSB or LSB bit. + This parameter can be a value of @ref SPI_LL_EC_BIT_ORDER. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetTransferBitOrder().*/ + + uint32_t CRCCalculation; /*!< Specifies if the CRC calculation is enabled or not. + This parameter can be a value of @ref SPI_LL_EC_CRC_CALCULATION. + + This feature can be modified afterwards using unitary functions @ref LL_SPI_EnableCRC() and @ref LL_SPI_DisableCRC().*/ + + uint32_t CRCPoly; /*!< Specifies the polynomial used for the CRC calculation. + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFFFF. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetCRCPolynomial().*/ + +} LL_SPI_InitTypeDef; + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup SPI_LL_Exported_Constants SPI Exported Constants + * @{ + */ + +/** @defgroup SPI_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_SPI_ReadReg function + * @{ + */ +#define LL_SPI_SR_RXNE SPI_SR_RXNE /*!< Rx buffer not empty flag */ +#define LL_SPI_SR_TXE SPI_SR_TXE /*!< Tx buffer empty flag */ +#define LL_SPI_SR_BSY SPI_SR_BSY /*!< Busy flag */ +#define LL_SPI_SR_CRCERR SPI_SR_CRCERR /*!< CRC error flag */ +#define LL_SPI_SR_MODF SPI_SR_MODF /*!< Mode fault flag */ +#define LL_SPI_SR_OVR SPI_SR_OVR /*!< Overrun flag */ +#define LL_SPI_SR_FRE SPI_SR_FRE /*!< TI mode frame format error flag */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_IT IT Defines + * @brief IT defines which can be used with LL_SPI_ReadReg and LL_SPI_WriteReg functions + * @{ + */ +#define LL_SPI_CR2_RXNEIE SPI_CR2_RXNEIE /*!< Rx buffer not empty interrupt enable */ +#define LL_SPI_CR2_TXEIE SPI_CR2_TXEIE /*!< Tx buffer empty interrupt enable */ +#define LL_SPI_CR2_ERRIE SPI_CR2_ERRIE /*!< Error interrupt enable */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_MODE Operation Mode + * @{ + */ +#define LL_SPI_MODE_MASTER (SPI_CR1_MSTR | SPI_CR1_SSI) /*!< Master configuration */ +#define LL_SPI_MODE_SLAVE 0x00000000U /*!< Slave configuration */ +/** + * @} + */ + + +/** @defgroup SPI_LL_EC_PHASE Clock Phase + * @{ + */ +#define LL_SPI_PHASE_1EDGE 0x00000000U /*!< First clock transition is the first data capture edge */ +#define LL_SPI_PHASE_2EDGE (SPI_CR1_CPHA) /*!< Second clock transition is the first data capture edge */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_POLARITY Clock Polarity + * @{ + */ +#define LL_SPI_POLARITY_LOW 0x00000000U /*!< Clock to 0 when idle */ +#define LL_SPI_POLARITY_HIGH (SPI_CR1_CPOL) /*!< Clock to 1 when idle */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_BAUDRATEPRESCALER Baud Rate Prescaler + * @{ + */ +#define LL_SPI_BAUDRATEPRESCALER_DIV2 0x00000000U /*!< BaudRate control equal to fPCLK/2 */ +#define LL_SPI_BAUDRATEPRESCALER_DIV4 (SPI_CR1_BR_0) /*!< BaudRate control equal to fPCLK/4 */ +#define LL_SPI_BAUDRATEPRESCALER_DIV8 (SPI_CR1_BR_1) /*!< BaudRate control equal to fPCLK/8 */ +#define LL_SPI_BAUDRATEPRESCALER_DIV16 (SPI_CR1_BR_1 | SPI_CR1_BR_0) /*!< BaudRate control equal to fPCLK/16 */ +#define LL_SPI_BAUDRATEPRESCALER_DIV32 (SPI_CR1_BR_2) /*!< BaudRate control equal to fPCLK/32 */ +#define LL_SPI_BAUDRATEPRESCALER_DIV64 (SPI_CR1_BR_2 | SPI_CR1_BR_0) /*!< BaudRate control equal to fPCLK/64 */ +#define LL_SPI_BAUDRATEPRESCALER_DIV128 (SPI_CR1_BR_2 | SPI_CR1_BR_1) /*!< BaudRate control equal to fPCLK/128 */ +#define LL_SPI_BAUDRATEPRESCALER_DIV256 (SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0) /*!< BaudRate control equal to fPCLK/256 */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_BIT_ORDER Transmission Bit Order + * @{ + */ +#define LL_SPI_LSB_FIRST (SPI_CR1_LSBFIRST) /*!< Data is transmitted/received with the LSB first */ +#define LL_SPI_MSB_FIRST 0x00000000U /*!< Data is transmitted/received with the MSB first */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_TRANSFER_MODE Transfer Mode + * @{ + */ +#define LL_SPI_FULL_DUPLEX 0x00000000U /*!< Full-Duplex mode. Rx and Tx transfer on 2 lines */ +#define LL_SPI_SIMPLEX_RX (SPI_CR1_RXONLY) /*!< Simplex Rx mode. Rx transfer only on 1 line */ +#define LL_SPI_HALF_DUPLEX_RX (SPI_CR1_BIDIMODE) /*!< Half-Duplex Rx mode. Rx transfer on 1 line */ +#define LL_SPI_HALF_DUPLEX_TX (SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE) /*!< Half-Duplex Tx mode. Tx transfer on 1 line */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_NSS_MODE Slave Select Pin Mode + * @{ + */ +#define LL_SPI_NSS_SOFT (SPI_CR1_SSM) /*!< NSS managed internally. NSS pin not used and free */ +#define LL_SPI_NSS_HARD_INPUT 0x00000000U /*!< NSS pin used in Input. Only used in Master mode */ +#define LL_SPI_NSS_HARD_OUTPUT (((uint32_t)SPI_CR2_SSOE << 16U)) /*!< NSS pin used in Output. Only used in Slave mode as chip select */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_DATAWIDTH Datawidth + * @{ + */ +#define LL_SPI_DATAWIDTH_8BIT 0x00000000U /*!< Data length for SPI transfer: 8 bits */ +#define LL_SPI_DATAWIDTH_16BIT (SPI_CR1_DFF) /*!< Data length for SPI transfer: 16 bits */ +/** + * @} + */ +#if defined(USE_FULL_LL_DRIVER) + +/** @defgroup SPI_LL_EC_CRC_CALCULATION CRC Calculation + * @{ + */ +#define LL_SPI_CRCCALCULATION_DISABLE 0x00000000U /*!< CRC calculation disabled */ +#define LL_SPI_CRCCALCULATION_ENABLE (SPI_CR1_CRCEN) /*!< CRC calculation enabled */ +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup SPI_LL_Exported_Macros SPI Exported Macros + * @{ + */ + +/** @defgroup SPI_LL_EM_WRITE_READ Common Write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in SPI register + * @param __INSTANCE__ SPI Instance + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_SPI_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) + +/** + * @brief Read a value in SPI register + * @param __INSTANCE__ SPI Instance + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_SPI_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup SPI_LL_Exported_Functions SPI Exported Functions + * @{ + */ + +/** @defgroup SPI_LL_EF_Configuration Configuration + * @{ + */ + +/** + * @brief Enable SPI peripheral + * @rmtoll CR1 SPE LL_SPI_Enable + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_Enable(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR1, SPI_CR1_SPE); +} + +/** + * @brief Disable SPI peripheral + * @note When disabling the SPI, follow the procedure described in the Reference Manual. + * @rmtoll CR1 SPE LL_SPI_Disable + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_Disable(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR1, SPI_CR1_SPE); +} + +/** + * @brief Check if SPI peripheral is enabled + * @rmtoll CR1 SPE LL_SPI_IsEnabled + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabled(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR1, SPI_CR1_SPE) == (SPI_CR1_SPE)) ? 1UL : 0UL); +} + +/** + * @brief Set SPI operation mode to Master or Slave + * @note This bit should not be changed when communication is ongoing. + * @rmtoll CR1 MSTR LL_SPI_SetMode\n + * CR1 SSI LL_SPI_SetMode + * @param SPIx SPI Instance + * @param Mode This parameter can be one of the following values: + * @arg @ref LL_SPI_MODE_MASTER + * @arg @ref LL_SPI_MODE_SLAVE + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetMode(SPI_TypeDef *SPIx, uint32_t Mode) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_MSTR | SPI_CR1_SSI, Mode); +} + +/** + * @brief Get SPI operation mode (Master or Slave) + * @rmtoll CR1 MSTR LL_SPI_GetMode\n + * CR1 SSI LL_SPI_GetMode + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_MODE_MASTER + * @arg @ref LL_SPI_MODE_SLAVE + */ +__STATIC_INLINE uint32_t LL_SPI_GetMode(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_MSTR | SPI_CR1_SSI)); +} + + +/** + * @brief Set clock phase + * @note This bit should not be changed when communication is ongoing. + * This bit is not used in SPI TI mode. + * @rmtoll CR1 CPHA LL_SPI_SetClockPhase + * @param SPIx SPI Instance + * @param ClockPhase This parameter can be one of the following values: + * @arg @ref LL_SPI_PHASE_1EDGE + * @arg @ref LL_SPI_PHASE_2EDGE + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetClockPhase(SPI_TypeDef *SPIx, uint32_t ClockPhase) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_CPHA, ClockPhase); +} + +/** + * @brief Get clock phase + * @rmtoll CR1 CPHA LL_SPI_GetClockPhase + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_PHASE_1EDGE + * @arg @ref LL_SPI_PHASE_2EDGE + */ +__STATIC_INLINE uint32_t LL_SPI_GetClockPhase(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CPHA)); +} + +/** + * @brief Set clock polarity + * @note This bit should not be changed when communication is ongoing. + * This bit is not used in SPI TI mode. + * @rmtoll CR1 CPOL LL_SPI_SetClockPolarity + * @param SPIx SPI Instance + * @param ClockPolarity This parameter can be one of the following values: + * @arg @ref LL_SPI_POLARITY_LOW + * @arg @ref LL_SPI_POLARITY_HIGH + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetClockPolarity(SPI_TypeDef *SPIx, uint32_t ClockPolarity) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_CPOL, ClockPolarity); +} + +/** + * @brief Get clock polarity + * @rmtoll CR1 CPOL LL_SPI_GetClockPolarity + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_POLARITY_LOW + * @arg @ref LL_SPI_POLARITY_HIGH + */ +__STATIC_INLINE uint32_t LL_SPI_GetClockPolarity(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CPOL)); +} + +/** + * @brief Set baud rate prescaler + * @note These bits should not be changed when communication is ongoing. SPI BaudRate = fPCLK/Prescaler. + * @rmtoll CR1 BR LL_SPI_SetBaudRatePrescaler + * @param SPIx SPI Instance + * @param BaudRate This parameter can be one of the following values: + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV2 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV4 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV8 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV16 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV32 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV64 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV128 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV256 + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetBaudRatePrescaler(SPI_TypeDef *SPIx, uint32_t BaudRate) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_BR, BaudRate); +} + +/** + * @brief Get baud rate prescaler + * @rmtoll CR1 BR LL_SPI_GetBaudRatePrescaler + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV2 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV4 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV8 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV16 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV32 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV64 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV128 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV256 + */ +__STATIC_INLINE uint32_t LL_SPI_GetBaudRatePrescaler(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_BR)); +} + +/** + * @brief Set transfer bit order + * @note This bit should not be changed when communication is ongoing. This bit is not used in SPI TI mode. + * @rmtoll CR1 LSBFIRST LL_SPI_SetTransferBitOrder + * @param SPIx SPI Instance + * @param BitOrder This parameter can be one of the following values: + * @arg @ref LL_SPI_LSB_FIRST + * @arg @ref LL_SPI_MSB_FIRST + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetTransferBitOrder(SPI_TypeDef *SPIx, uint32_t BitOrder) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_LSBFIRST, BitOrder); +} + +/** + * @brief Get transfer bit order + * @rmtoll CR1 LSBFIRST LL_SPI_GetTransferBitOrder + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_LSB_FIRST + * @arg @ref LL_SPI_MSB_FIRST + */ +__STATIC_INLINE uint32_t LL_SPI_GetTransferBitOrder(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_LSBFIRST)); +} + +/** + * @brief Set transfer direction mode + * @note For Half-Duplex mode, Rx Direction is set by default. + * In master mode, the MOSI pin is used and in slave mode, the MISO pin is used for Half-Duplex. + * @rmtoll CR1 RXONLY LL_SPI_SetTransferDirection\n + * CR1 BIDIMODE LL_SPI_SetTransferDirection\n + * CR1 BIDIOE LL_SPI_SetTransferDirection + * @param SPIx SPI Instance + * @param TransferDirection This parameter can be one of the following values: + * @arg @ref LL_SPI_FULL_DUPLEX + * @arg @ref LL_SPI_SIMPLEX_RX + * @arg @ref LL_SPI_HALF_DUPLEX_RX + * @arg @ref LL_SPI_HALF_DUPLEX_TX + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetTransferDirection(SPI_TypeDef *SPIx, uint32_t TransferDirection) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_RXONLY | SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE, TransferDirection); +} + +/** + * @brief Get transfer direction mode + * @rmtoll CR1 RXONLY LL_SPI_GetTransferDirection\n + * CR1 BIDIMODE LL_SPI_GetTransferDirection\n + * CR1 BIDIOE LL_SPI_GetTransferDirection + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_FULL_DUPLEX + * @arg @ref LL_SPI_SIMPLEX_RX + * @arg @ref LL_SPI_HALF_DUPLEX_RX + * @arg @ref LL_SPI_HALF_DUPLEX_TX + */ +__STATIC_INLINE uint32_t LL_SPI_GetTransferDirection(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_RXONLY | SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE)); +} + +/** + * @brief Set frame data width + * @rmtoll CR1 DFF LL_SPI_SetDataWidth + * @param SPIx SPI Instance + * @param DataWidth This parameter can be one of the following values: + * @arg @ref LL_SPI_DATAWIDTH_8BIT + * @arg @ref LL_SPI_DATAWIDTH_16BIT + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetDataWidth(SPI_TypeDef *SPIx, uint32_t DataWidth) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_DFF, DataWidth); +} + +/** + * @brief Get frame data width + * @rmtoll CR1 DFF LL_SPI_GetDataWidth + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_DATAWIDTH_8BIT + * @arg @ref LL_SPI_DATAWIDTH_16BIT + */ +__STATIC_INLINE uint32_t LL_SPI_GetDataWidth(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_DFF)); +} + +/** + * @} + */ + +/** @defgroup SPI_LL_EF_CRC_Management CRC Management + * @{ + */ + +/** + * @brief Enable CRC + * @note This bit should be written only when SPI is disabled (SPE = 0) for correct operation. + * @rmtoll CR1 CRCEN LL_SPI_EnableCRC + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_EnableCRC(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR1, SPI_CR1_CRCEN); +} + +/** + * @brief Disable CRC + * @note This bit should be written only when SPI is disabled (SPE = 0) for correct operation. + * @rmtoll CR1 CRCEN LL_SPI_DisableCRC + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_DisableCRC(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR1, SPI_CR1_CRCEN); +} + +/** + * @brief Check if CRC is enabled + * @note This bit should be written only when SPI is disabled (SPE = 0) for correct operation. + * @rmtoll CR1 CRCEN LL_SPI_IsEnabledCRC + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabledCRC(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR1, SPI_CR1_CRCEN) == (SPI_CR1_CRCEN)) ? 1UL : 0UL); +} + +/** + * @brief Set CRCNext to transfer CRC on the line + * @note This bit has to be written as soon as the last data is written in the SPIx_DR register. + * @rmtoll CR1 CRCNEXT LL_SPI_SetCRCNext + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetCRCNext(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR1, SPI_CR1_CRCNEXT); +} + +/** + * @brief Set polynomial for CRC calculation + * @rmtoll CRCPR CRCPOLY LL_SPI_SetCRCPolynomial + * @param SPIx SPI Instance + * @param CRCPoly This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFFFF + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetCRCPolynomial(SPI_TypeDef *SPIx, uint32_t CRCPoly) +{ + WRITE_REG(SPIx->CRCPR, (uint16_t)CRCPoly); +} + +/** + * @brief Get polynomial for CRC calculation + * @rmtoll CRCPR CRCPOLY LL_SPI_GetCRCPolynomial + * @param SPIx SPI Instance + * @retval Returned value is a number between Min_Data = 0x00 and Max_Data = 0xFFFF + */ +__STATIC_INLINE uint32_t LL_SPI_GetCRCPolynomial(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_REG(SPIx->CRCPR)); +} + +/** + * @brief Get Rx CRC + * @rmtoll RXCRCR RXCRC LL_SPI_GetRxCRC + * @param SPIx SPI Instance + * @retval Returned value is a number between Min_Data = 0x00 and Max_Data = 0xFFFF + */ +__STATIC_INLINE uint32_t LL_SPI_GetRxCRC(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_REG(SPIx->RXCRCR)); +} + +/** + * @brief Get Tx CRC + * @rmtoll TXCRCR TXCRC LL_SPI_GetTxCRC + * @param SPIx SPI Instance + * @retval Returned value is a number between Min_Data = 0x00 and Max_Data = 0xFFFF + */ +__STATIC_INLINE uint32_t LL_SPI_GetTxCRC(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_REG(SPIx->TXCRCR)); +} + +/** + * @} + */ + +/** @defgroup SPI_LL_EF_NSS_Management Slave Select Pin Management + * @{ + */ + +/** + * @brief Set NSS mode + * @note LL_SPI_NSS_SOFT Mode is not used in SPI TI mode. + * @rmtoll CR1 SSM LL_SPI_SetNSSMode\n + * @rmtoll CR2 SSOE LL_SPI_SetNSSMode + * @param SPIx SPI Instance + * @param NSS This parameter can be one of the following values: + * @arg @ref LL_SPI_NSS_SOFT + * @arg @ref LL_SPI_NSS_HARD_INPUT + * @arg @ref LL_SPI_NSS_HARD_OUTPUT + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetNSSMode(SPI_TypeDef *SPIx, uint32_t NSS) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_SSM, NSS); + MODIFY_REG(SPIx->CR2, SPI_CR2_SSOE, ((uint32_t)(NSS >> 16U))); +} + +/** + * @brief Get NSS mode + * @rmtoll CR1 SSM LL_SPI_GetNSSMode\n + * @rmtoll CR2 SSOE LL_SPI_GetNSSMode + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_NSS_SOFT + * @arg @ref LL_SPI_NSS_HARD_INPUT + * @arg @ref LL_SPI_NSS_HARD_OUTPUT + */ +__STATIC_INLINE uint32_t LL_SPI_GetNSSMode(SPI_TypeDef *SPIx) +{ + uint32_t Ssm = (READ_BIT(SPIx->CR1, SPI_CR1_SSM)); + uint32_t Ssoe = (READ_BIT(SPIx->CR2, SPI_CR2_SSOE) << 16U); + return (Ssm | Ssoe); +} + +/** + * @} + */ + +/** @defgroup SPI_LL_EF_FLAG_Management FLAG Management + * @{ + */ + +/** + * @brief Check if Rx buffer is not empty + * @rmtoll SR RXNE LL_SPI_IsActiveFlag_RXNE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_RXNE(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_RXNE) == (SPI_SR_RXNE)) ? 1UL : 0UL); +} + +/** + * @brief Check if Tx buffer is empty + * @rmtoll SR TXE LL_SPI_IsActiveFlag_TXE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_TXE(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_TXE) == (SPI_SR_TXE)) ? 1UL : 0UL); +} + +/** + * @brief Get CRC error flag + * @rmtoll SR CRCERR LL_SPI_IsActiveFlag_CRCERR + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_CRCERR(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_CRCERR) == (SPI_SR_CRCERR)) ? 1UL : 0UL); +} + +/** + * @brief Get mode fault error flag + * @rmtoll SR MODF LL_SPI_IsActiveFlag_MODF + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_MODF(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_MODF) == (SPI_SR_MODF)) ? 1UL : 0UL); +} + +/** + * @brief Get overrun error flag + * @rmtoll SR OVR LL_SPI_IsActiveFlag_OVR + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_OVR(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_OVR) == (SPI_SR_OVR)) ? 1UL : 0UL); +} + +/** + * @brief Get busy flag + * @note The BSY flag is cleared under any one of the following conditions: + * -When the SPI is correctly disabled + * -When a fault is detected in Master mode (MODF bit set to 1) + * -In Master mode, when it finishes a data transmission and no new data is ready to be + * sent + * -In Slave mode, when the BSY flag is set to '0' for at least one SPI clock cycle between + * each data transfer. + * @rmtoll SR BSY LL_SPI_IsActiveFlag_BSY + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_BSY(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_BSY) == (SPI_SR_BSY)) ? 1UL : 0UL); +} + + +/** + * @brief Clear CRC error flag + * @rmtoll SR CRCERR LL_SPI_ClearFlag_CRCERR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_ClearFlag_CRCERR(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->SR, SPI_SR_CRCERR); +} + +/** + * @brief Clear mode fault error flag + * @note Clearing this flag is done by a read access to the SPIx_SR + * register followed by a write access to the SPIx_CR1 register + * @rmtoll SR MODF LL_SPI_ClearFlag_MODF + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_ClearFlag_MODF(SPI_TypeDef *SPIx) +{ + __IO uint32_t tmpreg_sr; + tmpreg_sr = SPIx->SR; + (void) tmpreg_sr; + CLEAR_BIT(SPIx->CR1, SPI_CR1_SPE); +} + +/** + * @brief Clear overrun error flag + * @note Clearing this flag is done by a read access to the SPIx_DR + * register followed by a read access to the SPIx_SR register + * @rmtoll SR OVR LL_SPI_ClearFlag_OVR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_ClearFlag_OVR(SPI_TypeDef *SPIx) +{ + __IO uint32_t tmpreg; + tmpreg = SPIx->DR; + (void) tmpreg; + tmpreg = SPIx->SR; + (void) tmpreg; +} + +/** + * @brief Clear frame format error flag + * @note Clearing this flag is done by reading SPIx_SR register + * @rmtoll SR FRE LL_SPI_ClearFlag_FRE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_ClearFlag_FRE(SPI_TypeDef *SPIx) +{ + __IO uint32_t tmpreg; + tmpreg = SPIx->SR; + (void) tmpreg; +} + +/** + * @} + */ + +/** @defgroup SPI_LL_EF_IT_Management Interrupt Management + * @{ + */ + +/** + * @brief Enable error interrupt + * @note This bit controls the generation of an interrupt when an error condition occurs (CRCERR, OVR, MODF in SPI mode, FRE at TI mode). + * @rmtoll CR2 ERRIE LL_SPI_EnableIT_ERR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_EnableIT_ERR(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR2, SPI_CR2_ERRIE); +} + +/** + * @brief Enable Rx buffer not empty interrupt + * @rmtoll CR2 RXNEIE LL_SPI_EnableIT_RXNE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_EnableIT_RXNE(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR2, SPI_CR2_RXNEIE); +} + +/** + * @brief Enable Tx buffer empty interrupt + * @rmtoll CR2 TXEIE LL_SPI_EnableIT_TXE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_EnableIT_TXE(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR2, SPI_CR2_TXEIE); +} + +/** + * @brief Disable error interrupt + * @note This bit controls the generation of an interrupt when an error condition occurs (CRCERR, OVR, MODF in SPI mode, FRE at TI mode). + * @rmtoll CR2 ERRIE LL_SPI_DisableIT_ERR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_DisableIT_ERR(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR2, SPI_CR2_ERRIE); +} + +/** + * @brief Disable Rx buffer not empty interrupt + * @rmtoll CR2 RXNEIE LL_SPI_DisableIT_RXNE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_DisableIT_RXNE(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR2, SPI_CR2_RXNEIE); +} + +/** + * @brief Disable Tx buffer empty interrupt + * @rmtoll CR2 TXEIE LL_SPI_DisableIT_TXE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_DisableIT_TXE(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR2, SPI_CR2_TXEIE); +} + +/** + * @brief Check if error interrupt is enabled + * @rmtoll CR2 ERRIE LL_SPI_IsEnabledIT_ERR + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_ERR(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR2, SPI_CR2_ERRIE) == (SPI_CR2_ERRIE)) ? 1UL : 0UL); +} + +/** + * @brief Check if Rx buffer not empty interrupt is enabled + * @rmtoll CR2 RXNEIE LL_SPI_IsEnabledIT_RXNE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_RXNE(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR2, SPI_CR2_RXNEIE) == (SPI_CR2_RXNEIE)) ? 1UL : 0UL); +} + +/** + * @brief Check if Tx buffer empty interrupt + * @rmtoll CR2 TXEIE LL_SPI_IsEnabledIT_TXE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_TXE(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR2, SPI_CR2_TXEIE) == (SPI_CR2_TXEIE)) ? 1UL : 0UL); +} + +/** + * @} + */ + +/** @defgroup SPI_LL_EF_DMA_Management DMA Management + * @{ + */ + +/** + * @brief Enable DMA Rx + * @rmtoll CR2 RXDMAEN LL_SPI_EnableDMAReq_RX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_EnableDMAReq_RX(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR2, SPI_CR2_RXDMAEN); +} + +/** + * @brief Disable DMA Rx + * @rmtoll CR2 RXDMAEN LL_SPI_DisableDMAReq_RX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_DisableDMAReq_RX(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR2, SPI_CR2_RXDMAEN); +} + +/** + * @brief Check if DMA Rx is enabled + * @rmtoll CR2 RXDMAEN LL_SPI_IsEnabledDMAReq_RX + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabledDMAReq_RX(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR2, SPI_CR2_RXDMAEN) == (SPI_CR2_RXDMAEN)) ? 1UL : 0UL); +} + +/** + * @brief Enable DMA Tx + * @rmtoll CR2 TXDMAEN LL_SPI_EnableDMAReq_TX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_EnableDMAReq_TX(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR2, SPI_CR2_TXDMAEN); +} + +/** + * @brief Disable DMA Tx + * @rmtoll CR2 TXDMAEN LL_SPI_DisableDMAReq_TX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_DisableDMAReq_TX(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR2, SPI_CR2_TXDMAEN); +} + +/** + * @brief Check if DMA Tx is enabled + * @rmtoll CR2 TXDMAEN LL_SPI_IsEnabledDMAReq_TX + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabledDMAReq_TX(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR2, SPI_CR2_TXDMAEN) == (SPI_CR2_TXDMAEN)) ? 1UL : 0UL); +} + +/** + * @brief Get the data register address used for DMA transfer + * @rmtoll DR DR LL_SPI_DMA_GetRegAddr + * @param SPIx SPI Instance + * @retval Address of data register + */ +__STATIC_INLINE uint32_t LL_SPI_DMA_GetRegAddr(SPI_TypeDef *SPIx) +{ + return (uint32_t) &(SPIx->DR); +} + +/** + * @} + */ + +/** @defgroup SPI_LL_EF_DATA_Management DATA Management + * @{ + */ + +/** + * @brief Read 8-Bits in the data register + * @rmtoll DR DR LL_SPI_ReceiveData8 + * @param SPIx SPI Instance + * @retval RxData Value between Min_Data=0x00 and Max_Data=0xFF + */ +__STATIC_INLINE uint8_t LL_SPI_ReceiveData8(SPI_TypeDef *SPIx) +{ + return (*((__IO uint8_t *)&SPIx->DR)); +} + +/** + * @brief Read 16-Bits in the data register + * @rmtoll DR DR LL_SPI_ReceiveData16 + * @param SPIx SPI Instance + * @retval RxData Value between Min_Data=0x00 and Max_Data=0xFFFF + */ +__STATIC_INLINE uint16_t LL_SPI_ReceiveData16(SPI_TypeDef *SPIx) +{ + return (uint16_t)(READ_REG(SPIx->DR)); +} + +/** + * @brief Write 8-Bits in the data register + * @rmtoll DR DR LL_SPI_TransmitData8 + * @param SPIx SPI Instance + * @param TxData Value between Min_Data=0x00 and Max_Data=0xFF + * @retval None + */ +__STATIC_INLINE void LL_SPI_TransmitData8(SPI_TypeDef *SPIx, uint8_t TxData) +{ +#if defined (__GNUC__) + __IO uint8_t *spidr = ((__IO uint8_t *)&SPIx->DR); + *spidr = TxData; +#else + *((__IO uint8_t *)&SPIx->DR) = TxData; +#endif /* __GNUC__ */ +} + +/** + * @brief Write 16-Bits in the data register + * @rmtoll DR DR LL_SPI_TransmitData16 + * @param SPIx SPI Instance + * @param TxData Value between Min_Data=0x00 and Max_Data=0xFFFF + * @retval None + */ +__STATIC_INLINE void LL_SPI_TransmitData16(SPI_TypeDef *SPIx, uint16_t TxData) +{ +#if defined (__GNUC__) + __IO uint16_t *spidr = ((__IO uint16_t *)&SPIx->DR); + *spidr = TxData; +#else + SPIx->DR = TxData; +#endif /* __GNUC__ */ +} + +/** + * @} + */ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup SPI_LL_EF_Init Initialization and de-initialization functions + * @{ + */ + +ErrorStatus LL_SPI_DeInit(SPI_TypeDef *SPIx); +ErrorStatus LL_SPI_Init(SPI_TypeDef *SPIx, LL_SPI_InitTypeDef *SPI_InitStruct); +void LL_SPI_StructInit(LL_SPI_InitTypeDef *SPI_InitStruct); + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ +/** + * @} + */ + +/** + * @} + */ + +#if defined(SPI_I2S_SUPPORT) +/** @defgroup I2S_LL I2S + * @{ + */ + +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ + +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup I2S_LL_ES_INIT I2S Exported Init structure + * @{ + */ + +/** + * @brief I2S Init structure definition + */ + +typedef struct +{ + uint32_t Mode; /*!< Specifies the I2S operating mode. + This parameter can be a value of @ref I2S_LL_EC_MODE + + This feature can be modified afterwards using unitary function @ref LL_I2S_SetTransferMode().*/ + + uint32_t Standard; /*!< Specifies the standard used for the I2S communication. + This parameter can be a value of @ref I2S_LL_EC_STANDARD + + This feature can be modified afterwards using unitary function @ref LL_I2S_SetStandard().*/ + + + uint32_t DataFormat; /*!< Specifies the data format for the I2S communication. + This parameter can be a value of @ref I2S_LL_EC_DATA_FORMAT + + This feature can be modified afterwards using unitary function @ref LL_I2S_SetDataFormat().*/ + + + uint32_t MCLKOutput; /*!< Specifies whether the I2S MCLK output is enabled or not. + This parameter can be a value of @ref I2S_LL_EC_MCLK_OUTPUT + + This feature can be modified afterwards using unitary functions @ref LL_I2S_EnableMasterClock() or @ref LL_I2S_DisableMasterClock.*/ + + + uint32_t AudioFreq; /*!< Specifies the frequency selected for the I2S communication. + This parameter can be a value of @ref I2S_LL_EC_AUDIO_FREQ + + Audio Frequency can be modified afterwards using Reference manual formulas to calculate Prescaler Linear, Parity + and unitary functions @ref LL_I2S_SetPrescalerLinear() and @ref LL_I2S_SetPrescalerParity() to set it.*/ + + + uint32_t ClockPolarity; /*!< Specifies the idle state of the I2S clock. + This parameter can be a value of @ref I2S_LL_EC_POLARITY + + This feature can be modified afterwards using unitary function @ref LL_I2S_SetClockPolarity().*/ + +} LL_I2S_InitTypeDef; + +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup I2S_LL_Exported_Constants I2S Exported Constants + * @{ + */ + +/** @defgroup I2S_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_I2S_ReadReg function + * @{ + */ +#define LL_I2S_SR_RXNE LL_SPI_SR_RXNE /*!< Rx buffer not empty flag */ +#define LL_I2S_SR_TXE LL_SPI_SR_TXE /*!< Tx buffer empty flag */ +#define LL_I2S_SR_BSY LL_SPI_SR_BSY /*!< Busy flag */ +#define LL_I2S_SR_UDR SPI_SR_UDR /*!< Underrun flag */ +#define LL_I2S_SR_OVR LL_SPI_SR_OVR /*!< Overrun flag */ +#define LL_I2S_SR_FRE LL_SPI_SR_FRE /*!< TI mode frame format error flag */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_IT IT Defines + * @brief IT defines which can be used with LL_SPI_ReadReg and LL_SPI_WriteReg functions + * @{ + */ +#define LL_I2S_CR2_RXNEIE LL_SPI_CR2_RXNEIE /*!< Rx buffer not empty interrupt enable */ +#define LL_I2S_CR2_TXEIE LL_SPI_CR2_TXEIE /*!< Tx buffer empty interrupt enable */ +#define LL_I2S_CR2_ERRIE LL_SPI_CR2_ERRIE /*!< Error interrupt enable */ +/** + * @} + */ + +/** @defgroup I2S_LL_EC_DATA_FORMAT Data format + * @{ + */ +#define LL_I2S_DATAFORMAT_16B 0x00000000U /*!< Data length 16 bits, Channel length 16bit */ +#define LL_I2S_DATAFORMAT_16B_EXTENDED (SPI_I2SCFGR_CHLEN) /*!< Data length 16 bits, Channel length 32bit */ +#define LL_I2S_DATAFORMAT_24B (SPI_I2SCFGR_CHLEN | SPI_I2SCFGR_DATLEN_0) /*!< Data length 24 bits, Channel length 32bit */ +#define LL_I2S_DATAFORMAT_32B (SPI_I2SCFGR_CHLEN | SPI_I2SCFGR_DATLEN_1) /*!< Data length 16 bits, Channel length 32bit */ +/** + * @} + */ + +/** @defgroup I2S_LL_EC_POLARITY Clock Polarity + * @{ + */ +#define LL_I2S_POLARITY_LOW 0x00000000U /*!< Clock steady state is low level */ +#define LL_I2S_POLARITY_HIGH (SPI_I2SCFGR_CKPOL) /*!< Clock steady state is high level */ +/** + * @} + */ + +/** @defgroup I2S_LL_EC_STANDARD I2s Standard + * @{ + */ +#define LL_I2S_STANDARD_PHILIPS 0x00000000U /*!< I2S standard philips */ +#define LL_I2S_STANDARD_MSB (SPI_I2SCFGR_I2SSTD_0) /*!< MSB justified standard (left justified) */ +#define LL_I2S_STANDARD_LSB (SPI_I2SCFGR_I2SSTD_1) /*!< LSB justified standard (right justified) */ +#define LL_I2S_STANDARD_PCM_SHORT (SPI_I2SCFGR_I2SSTD_0 | SPI_I2SCFGR_I2SSTD_1) /*!< PCM standard, short frame synchronization */ +#define LL_I2S_STANDARD_PCM_LONG (SPI_I2SCFGR_I2SSTD_0 | SPI_I2SCFGR_I2SSTD_1 | SPI_I2SCFGR_PCMSYNC) /*!< PCM standard, long frame synchronization */ +/** + * @} + */ + +/** @defgroup I2S_LL_EC_MODE Operation Mode + * @{ + */ +#define LL_I2S_MODE_SLAVE_TX 0x00000000U /*!< Slave Tx configuration */ +#define LL_I2S_MODE_SLAVE_RX (SPI_I2SCFGR_I2SCFG_0) /*!< Slave Rx configuration */ +#define LL_I2S_MODE_MASTER_TX (SPI_I2SCFGR_I2SCFG_1) /*!< Master Tx configuration */ +#define LL_I2S_MODE_MASTER_RX (SPI_I2SCFGR_I2SCFG_0 | SPI_I2SCFGR_I2SCFG_1) /*!< Master Rx configuration */ +/** + * @} + */ + +/** @defgroup I2S_LL_EC_PRESCALER_FACTOR Prescaler Factor + * @{ + */ +#define LL_I2S_PRESCALER_PARITY_EVEN 0x00000000U /*!< Odd factor: Real divider value is = I2SDIV * 2 */ +#define LL_I2S_PRESCALER_PARITY_ODD (SPI_I2SPR_ODD >> 8U) /*!< Odd factor: Real divider value is = (I2SDIV * 2)+1 */ +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) + +/** @defgroup I2S_LL_EC_MCLK_OUTPUT MCLK Output + * @{ + */ +#define LL_I2S_MCLK_OUTPUT_DISABLE 0x00000000U /*!< Master clock output is disabled */ +#define LL_I2S_MCLK_OUTPUT_ENABLE (SPI_I2SPR_MCKOE) /*!< Master clock output is enabled */ +/** + * @} + */ + +/** @defgroup I2S_LL_EC_AUDIO_FREQ Audio Frequency + * @{ + */ + +#define LL_I2S_AUDIOFREQ_192K 192000U /*!< Audio Frequency configuration 192000 Hz */ +#define LL_I2S_AUDIOFREQ_96K 96000U /*!< Audio Frequency configuration 96000 Hz */ +#define LL_I2S_AUDIOFREQ_48K 48000U /*!< Audio Frequency configuration 48000 Hz */ +#define LL_I2S_AUDIOFREQ_44K 44100U /*!< Audio Frequency configuration 44100 Hz */ +#define LL_I2S_AUDIOFREQ_32K 32000U /*!< Audio Frequency configuration 32000 Hz */ +#define LL_I2S_AUDIOFREQ_22K 22050U /*!< Audio Frequency configuration 22050 Hz */ +#define LL_I2S_AUDIOFREQ_16K 16000U /*!< Audio Frequency configuration 16000 Hz */ +#define LL_I2S_AUDIOFREQ_11K 11025U /*!< Audio Frequency configuration 11025 Hz */ +#define LL_I2S_AUDIOFREQ_8K 8000U /*!< Audio Frequency configuration 8000 Hz */ +#define LL_I2S_AUDIOFREQ_DEFAULT 2U /*!< Audio Freq not specified. Register I2SDIV = 2 */ +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup I2S_LL_Exported_Macros I2S Exported Macros + * @{ + */ + +/** @defgroup I2S_LL_EM_WRITE_READ Common Write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in I2S register + * @param __INSTANCE__ I2S Instance + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_I2S_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) + +/** + * @brief Read a value in I2S register + * @param __INSTANCE__ I2S Instance + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_I2S_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) +/** + * @} + */ + +/** + * @} + */ + + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup I2S_LL_Exported_Functions I2S Exported Functions + * @{ + */ + +/** @defgroup I2S_LL_EF_Configuration Configuration + * @{ + */ + +/** + * @brief Select I2S mode and Enable I2S peripheral + * @rmtoll I2SCFGR I2SMOD LL_I2S_Enable\n + * I2SCFGR I2SE LL_I2S_Enable + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_Enable(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SMOD | SPI_I2SCFGR_I2SE); +} + +/** + * @brief Disable I2S peripheral + * @rmtoll I2SCFGR I2SE LL_I2S_Disable + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_Disable(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SMOD | SPI_I2SCFGR_I2SE); +} + +/** + * @brief Check if I2S peripheral is enabled + * @rmtoll I2SCFGR I2SE LL_I2S_IsEnabled + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsEnabled(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SE) == (SPI_I2SCFGR_I2SE)) ? 1UL : 0UL); +} + +/** + * @brief Set I2S data frame length + * @rmtoll I2SCFGR DATLEN LL_I2S_SetDataFormat\n + * I2SCFGR CHLEN LL_I2S_SetDataFormat + * @param SPIx SPI Instance + * @param DataFormat This parameter can be one of the following values: + * @arg @ref LL_I2S_DATAFORMAT_16B + * @arg @ref LL_I2S_DATAFORMAT_16B_EXTENDED + * @arg @ref LL_I2S_DATAFORMAT_24B + * @arg @ref LL_I2S_DATAFORMAT_32B + * @retval None + */ +__STATIC_INLINE void LL_I2S_SetDataFormat(SPI_TypeDef *SPIx, uint32_t DataFormat) +{ + MODIFY_REG(SPIx->I2SCFGR, SPI_I2SCFGR_DATLEN | SPI_I2SCFGR_CHLEN, DataFormat); +} + +/** + * @brief Get I2S data frame length + * @rmtoll I2SCFGR DATLEN LL_I2S_GetDataFormat\n + * I2SCFGR CHLEN LL_I2S_GetDataFormat + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_I2S_DATAFORMAT_16B + * @arg @ref LL_I2S_DATAFORMAT_16B_EXTENDED + * @arg @ref LL_I2S_DATAFORMAT_24B + * @arg @ref LL_I2S_DATAFORMAT_32B + */ +__STATIC_INLINE uint32_t LL_I2S_GetDataFormat(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_DATLEN | SPI_I2SCFGR_CHLEN)); +} + +/** + * @brief Set I2S clock polarity + * @rmtoll I2SCFGR CKPOL LL_I2S_SetClockPolarity + * @param SPIx SPI Instance + * @param ClockPolarity This parameter can be one of the following values: + * @arg @ref LL_I2S_POLARITY_LOW + * @arg @ref LL_I2S_POLARITY_HIGH + * @retval None + */ +__STATIC_INLINE void LL_I2S_SetClockPolarity(SPI_TypeDef *SPIx, uint32_t ClockPolarity) +{ + SET_BIT(SPIx->I2SCFGR, ClockPolarity); +} + +/** + * @brief Get I2S clock polarity + * @rmtoll I2SCFGR CKPOL LL_I2S_GetClockPolarity + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_I2S_POLARITY_LOW + * @arg @ref LL_I2S_POLARITY_HIGH + */ +__STATIC_INLINE uint32_t LL_I2S_GetClockPolarity(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_CKPOL)); +} + +/** + * @brief Set I2S standard protocol + * @rmtoll I2SCFGR I2SSTD LL_I2S_SetStandard\n + * I2SCFGR PCMSYNC LL_I2S_SetStandard + * @param SPIx SPI Instance + * @param Standard This parameter can be one of the following values: + * @arg @ref LL_I2S_STANDARD_PHILIPS + * @arg @ref LL_I2S_STANDARD_MSB + * @arg @ref LL_I2S_STANDARD_LSB + * @arg @ref LL_I2S_STANDARD_PCM_SHORT + * @arg @ref LL_I2S_STANDARD_PCM_LONG + * @retval None + */ +__STATIC_INLINE void LL_I2S_SetStandard(SPI_TypeDef *SPIx, uint32_t Standard) +{ + MODIFY_REG(SPIx->I2SCFGR, SPI_I2SCFGR_I2SSTD | SPI_I2SCFGR_PCMSYNC, Standard); +} + +/** + * @brief Get I2S standard protocol + * @rmtoll I2SCFGR I2SSTD LL_I2S_GetStandard\n + * I2SCFGR PCMSYNC LL_I2S_GetStandard + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_I2S_STANDARD_PHILIPS + * @arg @ref LL_I2S_STANDARD_MSB + * @arg @ref LL_I2S_STANDARD_LSB + * @arg @ref LL_I2S_STANDARD_PCM_SHORT + * @arg @ref LL_I2S_STANDARD_PCM_LONG + */ +__STATIC_INLINE uint32_t LL_I2S_GetStandard(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SSTD | SPI_I2SCFGR_PCMSYNC)); +} + +/** + * @brief Set I2S transfer mode + * @rmtoll I2SCFGR I2SCFG LL_I2S_SetTransferMode + * @param SPIx SPI Instance + * @param Mode This parameter can be one of the following values: + * @arg @ref LL_I2S_MODE_SLAVE_TX + * @arg @ref LL_I2S_MODE_SLAVE_RX + * @arg @ref LL_I2S_MODE_MASTER_TX + * @arg @ref LL_I2S_MODE_MASTER_RX + * @retval None + */ +__STATIC_INLINE void LL_I2S_SetTransferMode(SPI_TypeDef *SPIx, uint32_t Mode) +{ + MODIFY_REG(SPIx->I2SCFGR, SPI_I2SCFGR_I2SCFG, Mode); +} + +/** + * @brief Get I2S transfer mode + * @rmtoll I2SCFGR I2SCFG LL_I2S_GetTransferMode + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_I2S_MODE_SLAVE_TX + * @arg @ref LL_I2S_MODE_SLAVE_RX + * @arg @ref LL_I2S_MODE_MASTER_TX + * @arg @ref LL_I2S_MODE_MASTER_RX + */ +__STATIC_INLINE uint32_t LL_I2S_GetTransferMode(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SCFG)); +} + +/** + * @brief Set I2S linear prescaler + * @rmtoll I2SPR I2SDIV LL_I2S_SetPrescalerLinear + * @param SPIx SPI Instance + * @param PrescalerLinear Value between Min_Data=0x02 and Max_Data=0xFF + * @retval None + */ +__STATIC_INLINE void LL_I2S_SetPrescalerLinear(SPI_TypeDef *SPIx, uint8_t PrescalerLinear) +{ + MODIFY_REG(SPIx->I2SPR, SPI_I2SPR_I2SDIV, PrescalerLinear); +} + +/** + * @brief Get I2S linear prescaler + * @rmtoll I2SPR I2SDIV LL_I2S_GetPrescalerLinear + * @param SPIx SPI Instance + * @retval PrescalerLinear Value between Min_Data=0x02 and Max_Data=0xFF + */ +__STATIC_INLINE uint32_t LL_I2S_GetPrescalerLinear(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->I2SPR, SPI_I2SPR_I2SDIV)); +} + +/** + * @brief Set I2S parity prescaler + * @rmtoll I2SPR ODD LL_I2S_SetPrescalerParity + * @param SPIx SPI Instance + * @param PrescalerParity This parameter can be one of the following values: + * @arg @ref LL_I2S_PRESCALER_PARITY_EVEN + * @arg @ref LL_I2S_PRESCALER_PARITY_ODD + * @retval None + */ +__STATIC_INLINE void LL_I2S_SetPrescalerParity(SPI_TypeDef *SPIx, uint32_t PrescalerParity) +{ + MODIFY_REG(SPIx->I2SPR, SPI_I2SPR_ODD, PrescalerParity << 8U); +} + +/** + * @brief Get I2S parity prescaler + * @rmtoll I2SPR ODD LL_I2S_GetPrescalerParity + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_I2S_PRESCALER_PARITY_EVEN + * @arg @ref LL_I2S_PRESCALER_PARITY_ODD + */ +__STATIC_INLINE uint32_t LL_I2S_GetPrescalerParity(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->I2SPR, SPI_I2SPR_ODD) >> 8U); +} + +/** + * @brief Enable the master clock output (Pin MCK) + * @rmtoll I2SPR MCKOE LL_I2S_EnableMasterClock + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_EnableMasterClock(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->I2SPR, SPI_I2SPR_MCKOE); +} + +/** + * @brief Disable the master clock output (Pin MCK) + * @rmtoll I2SPR MCKOE LL_I2S_DisableMasterClock + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_DisableMasterClock(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->I2SPR, SPI_I2SPR_MCKOE); +} + +/** + * @brief Check if the master clock output (Pin MCK) is enabled + * @rmtoll I2SPR MCKOE LL_I2S_IsEnabledMasterClock + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsEnabledMasterClock(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->I2SPR, SPI_I2SPR_MCKOE) == (SPI_I2SPR_MCKOE)) ? 1UL : 0UL); +} + +/** + * @} + */ + +/** @defgroup I2S_LL_EF_FLAG FLAG Management + * @{ + */ + +/** + * @brief Check if Rx buffer is not empty + * @rmtoll SR RXNE LL_I2S_IsActiveFlag_RXNE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_RXNE(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsActiveFlag_RXNE(SPIx); +} + +/** + * @brief Check if Tx buffer is empty + * @rmtoll SR TXE LL_I2S_IsActiveFlag_TXE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_TXE(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsActiveFlag_TXE(SPIx); +} + +/** + * @brief Get busy flag + * @rmtoll SR BSY LL_I2S_IsActiveFlag_BSY + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_BSY(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsActiveFlag_BSY(SPIx); +} + +/** + * @brief Get overrun error flag + * @rmtoll SR OVR LL_I2S_IsActiveFlag_OVR + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_OVR(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsActiveFlag_OVR(SPIx); +} + +/** + * @brief Get underrun error flag + * @rmtoll SR UDR LL_I2S_IsActiveFlag_UDR + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_UDR(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_UDR) == (SPI_SR_UDR)) ? 1UL : 0UL); +} + + +/** + * @brief Get channel side flag. + * @note 0: Channel Left has to be transmitted or has been received\n + * 1: Channel Right has to be transmitted or has been received\n + * It has no significance in PCM mode. + * @rmtoll SR CHSIDE LL_I2S_IsActiveFlag_CHSIDE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_CHSIDE(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_CHSIDE) == (SPI_SR_CHSIDE)) ? 1UL : 0UL); +} + +/** + * @brief Clear overrun error flag + * @rmtoll SR OVR LL_I2S_ClearFlag_OVR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_ClearFlag_OVR(SPI_TypeDef *SPIx) +{ + LL_SPI_ClearFlag_OVR(SPIx); +} + +/** + * @brief Clear underrun error flag + * @rmtoll SR UDR LL_I2S_ClearFlag_UDR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_ClearFlag_UDR(SPI_TypeDef *SPIx) +{ + __IO uint32_t tmpreg; + tmpreg = SPIx->SR; + (void)tmpreg; +} + +/** + * @brief Clear frame format error flag + * @rmtoll SR FRE LL_I2S_ClearFlag_FRE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_ClearFlag_FRE(SPI_TypeDef *SPIx) +{ + LL_SPI_ClearFlag_FRE(SPIx); +} + +/** + * @} + */ + +/** @defgroup I2S_LL_EF_IT Interrupt Management + * @{ + */ + +/** + * @brief Enable error IT + * @note This bit controls the generation of an interrupt when an error condition occurs (OVR, UDR and FRE in I2S mode). + * @rmtoll CR2 ERRIE LL_I2S_EnableIT_ERR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_EnableIT_ERR(SPI_TypeDef *SPIx) +{ + LL_SPI_EnableIT_ERR(SPIx); +} + +/** + * @brief Enable Rx buffer not empty IT + * @rmtoll CR2 RXNEIE LL_I2S_EnableIT_RXNE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_EnableIT_RXNE(SPI_TypeDef *SPIx) +{ + LL_SPI_EnableIT_RXNE(SPIx); +} + +/** + * @brief Enable Tx buffer empty IT + * @rmtoll CR2 TXEIE LL_I2S_EnableIT_TXE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_EnableIT_TXE(SPI_TypeDef *SPIx) +{ + LL_SPI_EnableIT_TXE(SPIx); +} + +/** + * @brief Disable error IT + * @note This bit controls the generation of an interrupt when an error condition occurs (OVR, UDR and FRE in I2S mode). + * @rmtoll CR2 ERRIE LL_I2S_DisableIT_ERR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_DisableIT_ERR(SPI_TypeDef *SPIx) +{ + LL_SPI_DisableIT_ERR(SPIx); +} + +/** + * @brief Disable Rx buffer not empty IT + * @rmtoll CR2 RXNEIE LL_I2S_DisableIT_RXNE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_DisableIT_RXNE(SPI_TypeDef *SPIx) +{ + LL_SPI_DisableIT_RXNE(SPIx); +} + +/** + * @brief Disable Tx buffer empty IT + * @rmtoll CR2 TXEIE LL_I2S_DisableIT_TXE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_DisableIT_TXE(SPI_TypeDef *SPIx) +{ + LL_SPI_DisableIT_TXE(SPIx); +} + +/** + * @brief Check if ERR IT is enabled + * @rmtoll CR2 ERRIE LL_I2S_IsEnabledIT_ERR + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsEnabledIT_ERR(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsEnabledIT_ERR(SPIx); +} + +/** + * @brief Check if RXNE IT is enabled + * @rmtoll CR2 RXNEIE LL_I2S_IsEnabledIT_RXNE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsEnabledIT_RXNE(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsEnabledIT_RXNE(SPIx); +} + +/** + * @brief Check if TXE IT is enabled + * @rmtoll CR2 TXEIE LL_I2S_IsEnabledIT_TXE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsEnabledIT_TXE(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsEnabledIT_TXE(SPIx); +} + +/** + * @} + */ + +/** @defgroup I2S_LL_EF_DMA DMA Management + * @{ + */ + +/** + * @brief Enable DMA Rx + * @rmtoll CR2 RXDMAEN LL_I2S_EnableDMAReq_RX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_EnableDMAReq_RX(SPI_TypeDef *SPIx) +{ + LL_SPI_EnableDMAReq_RX(SPIx); +} + +/** + * @brief Disable DMA Rx + * @rmtoll CR2 RXDMAEN LL_I2S_DisableDMAReq_RX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_DisableDMAReq_RX(SPI_TypeDef *SPIx) +{ + LL_SPI_DisableDMAReq_RX(SPIx); +} + +/** + * @brief Check if DMA Rx is enabled + * @rmtoll CR2 RXDMAEN LL_I2S_IsEnabledDMAReq_RX + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsEnabledDMAReq_RX(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsEnabledDMAReq_RX(SPIx); +} + +/** + * @brief Enable DMA Tx + * @rmtoll CR2 TXDMAEN LL_I2S_EnableDMAReq_TX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_EnableDMAReq_TX(SPI_TypeDef *SPIx) +{ + LL_SPI_EnableDMAReq_TX(SPIx); +} + +/** + * @brief Disable DMA Tx + * @rmtoll CR2 TXDMAEN LL_I2S_DisableDMAReq_TX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_DisableDMAReq_TX(SPI_TypeDef *SPIx) +{ + LL_SPI_DisableDMAReq_TX(SPIx); +} + +/** + * @brief Check if DMA Tx is enabled + * @rmtoll CR2 TXDMAEN LL_I2S_IsEnabledDMAReq_TX + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsEnabledDMAReq_TX(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsEnabledDMAReq_TX(SPIx); +} + +/** + * @} + */ + +/** @defgroup I2S_LL_EF_DATA DATA Management + * @{ + */ + +/** + * @brief Read 16-Bits in data register + * @rmtoll DR DR LL_I2S_ReceiveData16 + * @param SPIx SPI Instance + * @retval RxData Value between Min_Data=0x0000 and Max_Data=0xFFFF + */ +__STATIC_INLINE uint16_t LL_I2S_ReceiveData16(SPI_TypeDef *SPIx) +{ + return LL_SPI_ReceiveData16(SPIx); +} + +/** + * @brief Write 16-Bits in data register + * @rmtoll DR DR LL_I2S_TransmitData16 + * @param SPIx SPI Instance + * @param TxData Value between Min_Data=0x0000 and Max_Data=0xFFFF + * @retval None + */ +__STATIC_INLINE void LL_I2S_TransmitData16(SPI_TypeDef *SPIx, uint16_t TxData) +{ + LL_SPI_TransmitData16(SPIx, TxData); +} + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup I2S_LL_EF_Init Initialization and de-initialization functions + * @{ + */ + +ErrorStatus LL_I2S_DeInit(SPI_TypeDef *SPIx); +ErrorStatus LL_I2S_Init(SPI_TypeDef *SPIx, LL_I2S_InitTypeDef *I2S_InitStruct); +void LL_I2S_StructInit(LL_I2S_InitTypeDef *I2S_InitStruct); +void LL_I2S_ConfigPrescaler(SPI_TypeDef *SPIx, uint32_t PrescalerLinear, uint32_t PrescalerParity); + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ +#endif /* SPI_I2S_SUPPORT */ + +#endif /* defined (SPI1) || defined (SPI2) || defined (SPI3) */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F1xx_LL_SPI_H */ + diff --git a/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_spi.c b/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_spi.c new file mode 100644 index 0000000..5f557d3 --- /dev/null +++ b/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_spi.c @@ -0,0 +1,528 @@ +/** + ****************************************************************************** + * @file stm32f1xx_ll_spi.c + * @author MCD Application Team + * @brief SPI LL module driver. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +#if defined(USE_FULL_LL_DRIVER) + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_ll_spi.h" +#include "stm32f1xx_ll_bus.h" +#include "stm32f1xx_ll_rcc.h" + +#ifdef USE_FULL_ASSERT +#include "stm32_assert.h" +#else +#define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +/** @addtogroup STM32F1xx_LL_Driver + * @{ + */ + +#if defined (SPI1) || defined (SPI2) || defined (SPI3) + +/** @addtogroup SPI_LL + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup SPI_LL_Private_Constants SPI Private Constants + * @{ + */ +/* SPI registers Masks */ +#define SPI_CR1_CLEAR_MASK (SPI_CR1_CPHA | SPI_CR1_CPOL | SPI_CR1_MSTR | \ + SPI_CR1_BR | SPI_CR1_LSBFIRST | SPI_CR1_SSI | \ + SPI_CR1_SSM | SPI_CR1_RXONLY | SPI_CR1_DFF | \ + SPI_CR1_CRCNEXT | SPI_CR1_CRCEN | SPI_CR1_BIDIOE | \ + SPI_CR1_BIDIMODE) +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup SPI_LL_Private_Macros SPI Private Macros + * @{ + */ +#define IS_LL_SPI_TRANSFER_DIRECTION(__VALUE__) (((__VALUE__) == LL_SPI_FULL_DUPLEX) \ + || ((__VALUE__) == LL_SPI_SIMPLEX_RX) \ + || ((__VALUE__) == LL_SPI_HALF_DUPLEX_RX) \ + || ((__VALUE__) == LL_SPI_HALF_DUPLEX_TX)) + +#define IS_LL_SPI_MODE(__VALUE__) (((__VALUE__) == LL_SPI_MODE_MASTER) \ + || ((__VALUE__) == LL_SPI_MODE_SLAVE)) + +#define IS_LL_SPI_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_SPI_DATAWIDTH_8BIT) \ + || ((__VALUE__) == LL_SPI_DATAWIDTH_16BIT)) + +#define IS_LL_SPI_POLARITY(__VALUE__) (((__VALUE__) == LL_SPI_POLARITY_LOW) \ + || ((__VALUE__) == LL_SPI_POLARITY_HIGH)) + +#define IS_LL_SPI_PHASE(__VALUE__) (((__VALUE__) == LL_SPI_PHASE_1EDGE) \ + || ((__VALUE__) == LL_SPI_PHASE_2EDGE)) + +#define IS_LL_SPI_NSS(__VALUE__) (((__VALUE__) == LL_SPI_NSS_SOFT) \ + || ((__VALUE__) == LL_SPI_NSS_HARD_INPUT) \ + || ((__VALUE__) == LL_SPI_NSS_HARD_OUTPUT)) + +#define IS_LL_SPI_BAUDRATE(__VALUE__) (((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV2) \ + || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV4) \ + || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV8) \ + || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV16) \ + || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV32) \ + || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV64) \ + || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV128) \ + || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV256)) + +#define IS_LL_SPI_BITORDER(__VALUE__) (((__VALUE__) == LL_SPI_LSB_FIRST) \ + || ((__VALUE__) == LL_SPI_MSB_FIRST)) + +#define IS_LL_SPI_CRCCALCULATION(__VALUE__) (((__VALUE__) == LL_SPI_CRCCALCULATION_ENABLE) \ + || ((__VALUE__) == LL_SPI_CRCCALCULATION_DISABLE)) + +#define IS_LL_SPI_CRC_POLYNOMIAL(__VALUE__) ((__VALUE__) >= 0x1U) + +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup SPI_LL_Exported_Functions + * @{ + */ + +/** @addtogroup SPI_LL_EF_Init + * @{ + */ + +/** + * @brief De-initialize the SPI registers to their default reset values. + * @param SPIx SPI Instance + * @retval An ErrorStatus enumeration value: + * - SUCCESS: SPI registers are de-initialized + * - ERROR: SPI registers are not de-initialized + */ +ErrorStatus LL_SPI_DeInit(SPI_TypeDef *SPIx) +{ + ErrorStatus status = ERROR; + + /* Check the parameters */ + assert_param(IS_SPI_ALL_INSTANCE(SPIx)); + +#if defined(SPI1) + if (SPIx == SPI1) + { + /* Force reset of SPI clock */ + LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1); + + /* Release reset of SPI clock */ + LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI1); + + status = SUCCESS; + } +#endif /* SPI1 */ +#if defined(SPI2) + if (SPIx == SPI2) + { + /* Force reset of SPI clock */ + LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2); + + /* Release reset of SPI clock */ + LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI2); + + status = SUCCESS; + } +#endif /* SPI2 */ +#if defined(SPI3) + if (SPIx == SPI3) + { + /* Force reset of SPI clock */ + LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI3); + + /* Release reset of SPI clock */ + LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI3); + + status = SUCCESS; + } +#endif /* SPI3 */ + + return status; +} + +/** + * @brief Initialize the SPI registers according to the specified parameters in SPI_InitStruct. + * @note As some bits in SPI configuration registers can only be written when the SPI is disabled (SPI_CR1_SPE bit =0), + * SPI peripheral should be in disabled state prior calling this function. Otherwise, ERROR result will be returned. + * @param SPIx SPI Instance + * @param SPI_InitStruct pointer to a @ref LL_SPI_InitTypeDef structure + * @retval An ErrorStatus enumeration value. (Return always SUCCESS) + */ +ErrorStatus LL_SPI_Init(SPI_TypeDef *SPIx, LL_SPI_InitTypeDef *SPI_InitStruct) +{ + ErrorStatus status = ERROR; + + /* Check the SPI Instance SPIx*/ + assert_param(IS_SPI_ALL_INSTANCE(SPIx)); + + /* Check the SPI parameters from SPI_InitStruct*/ + assert_param(IS_LL_SPI_TRANSFER_DIRECTION(SPI_InitStruct->TransferDirection)); + assert_param(IS_LL_SPI_MODE(SPI_InitStruct->Mode)); + assert_param(IS_LL_SPI_DATAWIDTH(SPI_InitStruct->DataWidth)); + assert_param(IS_LL_SPI_POLARITY(SPI_InitStruct->ClockPolarity)); + assert_param(IS_LL_SPI_PHASE(SPI_InitStruct->ClockPhase)); + assert_param(IS_LL_SPI_NSS(SPI_InitStruct->NSS)); + assert_param(IS_LL_SPI_BAUDRATE(SPI_InitStruct->BaudRate)); + assert_param(IS_LL_SPI_BITORDER(SPI_InitStruct->BitOrder)); + assert_param(IS_LL_SPI_CRCCALCULATION(SPI_InitStruct->CRCCalculation)); + + if (LL_SPI_IsEnabled(SPIx) == 0x00000000U) + { + /*---------------------------- SPIx CR1 Configuration ------------------------ + * Configure SPIx CR1 with parameters: + * - TransferDirection: SPI_CR1_BIDIMODE, SPI_CR1_BIDIOE and SPI_CR1_RXONLY bits + * - Master/Slave Mode: SPI_CR1_MSTR bit + * - DataWidth: SPI_CR1_DFF bit + * - ClockPolarity: SPI_CR1_CPOL bit + * - ClockPhase: SPI_CR1_CPHA bit + * - NSS management: SPI_CR1_SSM bit + * - BaudRate prescaler: SPI_CR1_BR[2:0] bits + * - BitOrder: SPI_CR1_LSBFIRST bit + * - CRCCalculation: SPI_CR1_CRCEN bit + */ + MODIFY_REG(SPIx->CR1, + SPI_CR1_CLEAR_MASK, + SPI_InitStruct->TransferDirection | SPI_InitStruct->Mode | SPI_InitStruct->DataWidth | + SPI_InitStruct->ClockPolarity | SPI_InitStruct->ClockPhase | + SPI_InitStruct->NSS | SPI_InitStruct->BaudRate | + SPI_InitStruct->BitOrder | SPI_InitStruct->CRCCalculation); + + /*---------------------------- SPIx CR2 Configuration ------------------------ + * Configure SPIx CR2 with parameters: + * - NSS management: SSOE bit + */ + MODIFY_REG(SPIx->CR2, SPI_CR2_SSOE, (SPI_InitStruct->NSS >> 16U)); + + /*---------------------------- SPIx CRCPR Configuration ---------------------- + * Configure SPIx CRCPR with parameters: + * - CRCPoly: CRCPOLY[15:0] bits + */ + if (SPI_InitStruct->CRCCalculation == LL_SPI_CRCCALCULATION_ENABLE) + { + assert_param(IS_LL_SPI_CRC_POLYNOMIAL(SPI_InitStruct->CRCPoly)); + LL_SPI_SetCRCPolynomial(SPIx, SPI_InitStruct->CRCPoly); + } + status = SUCCESS; + } + +#if defined (SPI_I2S_SUPPORT) + /* Activate the SPI mode (Reset I2SMOD bit in I2SCFGR register) */ + CLEAR_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SMOD); +#endif /* SPI_I2S_SUPPORT */ + return status; +} + +/** + * @brief Set each @ref LL_SPI_InitTypeDef field to default value. + * @param SPI_InitStruct pointer to a @ref LL_SPI_InitTypeDef structure + * whose fields will be set to default values. + * @retval None + */ +void LL_SPI_StructInit(LL_SPI_InitTypeDef *SPI_InitStruct) +{ + /* Set SPI_InitStruct fields to default values */ + SPI_InitStruct->TransferDirection = LL_SPI_FULL_DUPLEX; + SPI_InitStruct->Mode = LL_SPI_MODE_SLAVE; + SPI_InitStruct->DataWidth = LL_SPI_DATAWIDTH_8BIT; + SPI_InitStruct->ClockPolarity = LL_SPI_POLARITY_LOW; + SPI_InitStruct->ClockPhase = LL_SPI_PHASE_1EDGE; + SPI_InitStruct->NSS = LL_SPI_NSS_HARD_INPUT; + SPI_InitStruct->BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2; + SPI_InitStruct->BitOrder = LL_SPI_MSB_FIRST; + SPI_InitStruct->CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE; + SPI_InitStruct->CRCPoly = 7U; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#if defined(SPI_I2S_SUPPORT) +/** @addtogroup I2S_LL + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup I2S_LL_Private_Constants I2S Private Constants + * @{ + */ +/* I2S registers Masks */ +#define I2S_I2SCFGR_CLEAR_MASK (SPI_I2SCFGR_CHLEN | SPI_I2SCFGR_DATLEN | \ + SPI_I2SCFGR_CKPOL | SPI_I2SCFGR_I2SSTD | \ + SPI_I2SCFGR_I2SCFG | SPI_I2SCFGR_I2SMOD ) + +#define I2S_I2SPR_CLEAR_MASK 0x0002U +/** + * @} + */ +/* Private macros ------------------------------------------------------------*/ +/** @defgroup I2S_LL_Private_Macros I2S Private Macros + * @{ + */ + +#define IS_LL_I2S_DATAFORMAT(__VALUE__) (((__VALUE__) == LL_I2S_DATAFORMAT_16B) \ + || ((__VALUE__) == LL_I2S_DATAFORMAT_16B_EXTENDED) \ + || ((__VALUE__) == LL_I2S_DATAFORMAT_24B) \ + || ((__VALUE__) == LL_I2S_DATAFORMAT_32B)) + +#define IS_LL_I2S_CPOL(__VALUE__) (((__VALUE__) == LL_I2S_POLARITY_LOW) \ + || ((__VALUE__) == LL_I2S_POLARITY_HIGH)) + +#define IS_LL_I2S_STANDARD(__VALUE__) (((__VALUE__) == LL_I2S_STANDARD_PHILIPS) \ + || ((__VALUE__) == LL_I2S_STANDARD_MSB) \ + || ((__VALUE__) == LL_I2S_STANDARD_LSB) \ + || ((__VALUE__) == LL_I2S_STANDARD_PCM_SHORT) \ + || ((__VALUE__) == LL_I2S_STANDARD_PCM_LONG)) + +#define IS_LL_I2S_MODE(__VALUE__) (((__VALUE__) == LL_I2S_MODE_SLAVE_TX) \ + || ((__VALUE__) == LL_I2S_MODE_SLAVE_RX) \ + || ((__VALUE__) == LL_I2S_MODE_MASTER_TX) \ + || ((__VALUE__) == LL_I2S_MODE_MASTER_RX)) + +#define IS_LL_I2S_MCLK_OUTPUT(__VALUE__) (((__VALUE__) == LL_I2S_MCLK_OUTPUT_ENABLE) \ + || ((__VALUE__) == LL_I2S_MCLK_OUTPUT_DISABLE)) + +#define IS_LL_I2S_AUDIO_FREQ(__VALUE__) ((((__VALUE__) >= LL_I2S_AUDIOFREQ_8K) \ + && ((__VALUE__) <= LL_I2S_AUDIOFREQ_192K)) \ + || ((__VALUE__) == LL_I2S_AUDIOFREQ_DEFAULT)) + +#define IS_LL_I2S_PRESCALER_LINEAR(__VALUE__) ((__VALUE__) >= 0x2U) + +#define IS_LL_I2S_PRESCALER_PARITY(__VALUE__) (((__VALUE__) == LL_I2S_PRESCALER_PARITY_EVEN) \ + || ((__VALUE__) == LL_I2S_PRESCALER_PARITY_ODD)) +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup I2S_LL_Exported_Functions + * @{ + */ + +/** @addtogroup I2S_LL_EF_Init + * @{ + */ + +/** + * @brief De-initialize the SPI/I2S registers to their default reset values. + * @param SPIx SPI Instance + * @retval An ErrorStatus enumeration value: + * - SUCCESS: SPI registers are de-initialized + * - ERROR: SPI registers are not de-initialized + */ +ErrorStatus LL_I2S_DeInit(SPI_TypeDef *SPIx) +{ + return LL_SPI_DeInit(SPIx); +} + +/** + * @brief Initializes the SPI/I2S registers according to the specified parameters in I2S_InitStruct. + * @note As some bits in SPI configuration registers can only be written when the SPI is disabled (SPI_CR1_SPE bit =0), + * SPI peripheral should be in disabled state prior calling this function. Otherwise, ERROR result will be returned. + * @param SPIx SPI Instance + * @param I2S_InitStruct pointer to a @ref LL_I2S_InitTypeDef structure + * @retval An ErrorStatus enumeration value: + * - SUCCESS: SPI registers are Initialized + * - ERROR: SPI registers are not Initialized + */ +ErrorStatus LL_I2S_Init(SPI_TypeDef *SPIx, LL_I2S_InitTypeDef *I2S_InitStruct) +{ + uint32_t i2sdiv = 2U; + uint32_t i2sodd = 0U; + uint32_t packetlength = 1U; + uint32_t tmp; + LL_RCC_ClocksTypeDef rcc_clocks; + uint32_t sourceclock; + ErrorStatus status = ERROR; + + /* Check the I2S parameters */ + assert_param(IS_I2S_ALL_INSTANCE(SPIx)); + assert_param(IS_LL_I2S_MODE(I2S_InitStruct->Mode)); + assert_param(IS_LL_I2S_STANDARD(I2S_InitStruct->Standard)); + assert_param(IS_LL_I2S_DATAFORMAT(I2S_InitStruct->DataFormat)); + assert_param(IS_LL_I2S_MCLK_OUTPUT(I2S_InitStruct->MCLKOutput)); + assert_param(IS_LL_I2S_AUDIO_FREQ(I2S_InitStruct->AudioFreq)); + assert_param(IS_LL_I2S_CPOL(I2S_InitStruct->ClockPolarity)); + + if (LL_I2S_IsEnabled(SPIx) == 0x00000000U) + { + /*---------------------------- SPIx I2SCFGR Configuration -------------------- + * Configure SPIx I2SCFGR with parameters: + * - Mode: SPI_I2SCFGR_I2SCFG[1:0] bit + * - Standard: SPI_I2SCFGR_I2SSTD[1:0] and SPI_I2SCFGR_PCMSYNC bits + * - DataFormat: SPI_I2SCFGR_CHLEN and SPI_I2SCFGR_DATLEN bits + * - ClockPolarity: SPI_I2SCFGR_CKPOL bit + */ + + /* Write to SPIx I2SCFGR */ + MODIFY_REG(SPIx->I2SCFGR, + I2S_I2SCFGR_CLEAR_MASK, + I2S_InitStruct->Mode | I2S_InitStruct->Standard | + I2S_InitStruct->DataFormat | I2S_InitStruct->ClockPolarity | + SPI_I2SCFGR_I2SMOD); + + /*---------------------------- SPIx I2SPR Configuration ---------------------- + * Configure SPIx I2SPR with parameters: + * - MCLKOutput: SPI_I2SPR_MCKOE bit + * - AudioFreq: SPI_I2SPR_I2SDIV[7:0] and SPI_I2SPR_ODD bits + */ + + /* If the requested audio frequency is not the default, compute the prescaler (i2sodd, i2sdiv) + * else, default values are used: i2sodd = 0U, i2sdiv = 2U. + */ + if (I2S_InitStruct->AudioFreq != LL_I2S_AUDIOFREQ_DEFAULT) + { + /* Check the frame length (For the Prescaler computing) + * Default value: LL_I2S_DATAFORMAT_16B (packetlength = 1U). + */ + if (I2S_InitStruct->DataFormat != LL_I2S_DATAFORMAT_16B) + { + /* Packet length is 32 bits */ + packetlength = 2U; + } + + /* I2S Clock source is System clock: Get System Clock frequency */ + LL_RCC_GetSystemClocksFreq(&rcc_clocks); + + /* Get the source clock value: based on System Clock value */ + sourceclock = rcc_clocks.SYSCLK_Frequency; + + /* Compute the Real divider depending on the MCLK output state with a floating point */ + if (I2S_InitStruct->MCLKOutput == LL_I2S_MCLK_OUTPUT_ENABLE) + { + /* MCLK output is enabled */ + tmp = (((((sourceclock / 256U) * 10U) / I2S_InitStruct->AudioFreq)) + 5U); + } + else + { + /* MCLK output is disabled */ + tmp = (((((sourceclock / (32U * packetlength)) * 10U) / I2S_InitStruct->AudioFreq)) + 5U); + } + + /* Remove the floating point */ + tmp = tmp / 10U; + + /* Check the parity of the divider */ + i2sodd = (tmp & (uint16_t)0x0001U); + + /* Compute the i2sdiv prescaler */ + i2sdiv = ((tmp - i2sodd) / 2U); + + /* Get the Mask for the Odd bit (SPI_I2SPR[8]) register */ + i2sodd = (i2sodd << 8U); + } + + /* Test if the divider is 1 or 0 or greater than 0xFF */ + if ((i2sdiv < 2U) || (i2sdiv > 0xFFU)) + { + /* Set the default values */ + i2sdiv = 2U; + i2sodd = 0U; + } + + /* Write to SPIx I2SPR register the computed value */ + WRITE_REG(SPIx->I2SPR, i2sdiv | i2sodd | I2S_InitStruct->MCLKOutput); + + status = SUCCESS; + } + return status; +} + +/** + * @brief Set each @ref LL_I2S_InitTypeDef field to default value. + * @param I2S_InitStruct pointer to a @ref LL_I2S_InitTypeDef structure + * whose fields will be set to default values. + * @retval None + */ +void LL_I2S_StructInit(LL_I2S_InitTypeDef *I2S_InitStruct) +{ + /*--------------- Reset I2S init structure parameters values -----------------*/ + I2S_InitStruct->Mode = LL_I2S_MODE_SLAVE_TX; + I2S_InitStruct->Standard = LL_I2S_STANDARD_PHILIPS; + I2S_InitStruct->DataFormat = LL_I2S_DATAFORMAT_16B; + I2S_InitStruct->MCLKOutput = LL_I2S_MCLK_OUTPUT_DISABLE; + I2S_InitStruct->AudioFreq = LL_I2S_AUDIOFREQ_DEFAULT; + I2S_InitStruct->ClockPolarity = LL_I2S_POLARITY_LOW; +} + +/** + * @brief Set linear and parity prescaler. + * @note To calculate value of PrescalerLinear(I2SDIV[7:0] bits) and PrescalerParity(ODD bit)\n + * Check Audio frequency table and formulas inside Reference Manual (SPI/I2S). + * @param SPIx SPI Instance + * @param PrescalerLinear value Min_Data=0x02 and Max_Data=0xFF. + * @param PrescalerParity This parameter can be one of the following values: + * @arg @ref LL_I2S_PRESCALER_PARITY_EVEN + * @arg @ref LL_I2S_PRESCALER_PARITY_ODD + * @retval None + */ +void LL_I2S_ConfigPrescaler(SPI_TypeDef *SPIx, uint32_t PrescalerLinear, uint32_t PrescalerParity) +{ + /* Check the I2S parameters */ + assert_param(IS_I2S_ALL_INSTANCE(SPIx)); + assert_param(IS_LL_I2S_PRESCALER_LINEAR(PrescalerLinear)); + assert_param(IS_LL_I2S_PRESCALER_PARITY(PrescalerParity)); + + /* Write to SPIx I2SPR */ + MODIFY_REG(SPIx->I2SPR, SPI_I2SPR_I2SDIV | SPI_I2SPR_ODD, PrescalerLinear | (PrescalerParity << 8U)); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +#endif /* SPI_I2S_SUPPORT */ + +#endif /* defined (SPI1) || defined (SPI2) || defined (SPI3) */ + +/** + * @} + */ + +#endif /* USE_FULL_LL_DRIVER */ + diff --git a/MDK-ARM/motor.uvguix.xushenghao b/MDK-ARM/motor.uvguix.xushenghao new file mode 100644 index 0000000..4c5aa97 --- /dev/null +++ b/MDK-ARM/motor.uvguix.xushenghao @@ -0,0 +1,3655 @@ + + + + -6.1 + +
### uVision Project, (C) Keil Software
+ + + E:\work\stm32\study\motor_cs103\User\system\bsp + + + + + + + 38003 + Registers + 140 100 + + + 346 + Code Coverage + 1010 100 + + + 204 + Performance Analyzer + 1170 175 175 100 + + + + + + 35141 + Event Statistics + + 200 50 700 + + + 1506 + Symbols + + 80 80 80 + + + 1936 + Watch 1 + + 200 133 133 + + + 1937 + Watch 2 + + 200 133 133 + + + 1935 + Call Stack + Locals + + 200 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 150 + + + 466 + Source Browser - *** Not Enabled *** + 500 + 300 + + + + + + + + 0 + 0 + 0 + 50 + 16 + + + + + + + 44 + 2 + 3 + + -32000 + -32000 + + + -1 + -1 + + + 183 + 147 + 1587 + 942 + + + + 0 + + 583 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000005000000020000000100000036453A5C776F726B5C73746D33325C73747564795C6D6F746F725F63733130335C557365725C73797374656D5C6273705C737069732E680000000006737069732E6800000000C5D4F200FFFFFFFF3D453A5C776F726B5C73746D33325C73747564795C6D6F746F725F63733130335C4D444B2D41524D5C737461727475705F73746D33326631303378622E730000000015737461727475705F73746D33326631303378622E7300000000FFDC7800FFFFFFFF2F453A5C776F726B5C73746D33325C73747564795C6D6F746F725F63733130335C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000BECEA100FFFFFFFF39453A5C776F726B5C73746D33325C73747564795C6D6F746F725F63733130335C557365725C6C69625C6472697665725C746D63323234302E630000000009746D63323234302E6300000000F0A0A100FFFFFFFF36453A5C776F726B5C73746D33325C73747564795C6D6F746F725F63733130335C557365725C73797374656D5C6273705C737069732E630000000006737069732E6300000000BCA8E100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F4000000660000008007000073020000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F40000004F00000090050000DD000000 + + + 16 + F40000006600000090050000F4000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000043020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000043020000 + + + 16 + D8000000EF000000F40100002B030000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C4000000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000043020000 + + + 16 + D8000000EF000000F40100002B030000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000043020000 + + + 16 + D8000000EF000000F40100002B030000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000007402000080070000DE030000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000001502000090050000B7020000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000770200007D070000C5030000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + F7000000660000008D050000C4000000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C4000000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C4000000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C4000000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C4000000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C4000000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000043020000 + + + 16 + D8000000EF000000F40100002B030000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000770200007D070000C5030000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000770200007D070000C5030000 + + + 16 + D8000000EF000000F40100002B030000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000770200007D070000C5030000 + + + 16 + D8000000EF000000F40100002B030000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000770200007D070000C5030000 + + + 16 + D8000000EF000000F40100002B030000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C4000000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 966 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000DE03000080070000F1030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 476 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000002C0200008D0500009E020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 3334 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DD00000090050000E1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F40000006600000090050000F4000000F40000004F00000090050000DD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A004000066000000900500003C020000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F40000005C020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F000000073020000000000004F000000F00000005C0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000011020000900500001502000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000002C02000090050000CE020000000000001502000090050000B702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000015020000CC020000B702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000005C02000080070000600200000100000001000010040000000100000008FDFFFF8C000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000007702000080070000F5030000000000006002000080070000DE0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF24536F757263652042726F77736572202D202A2A2A204E6F7420456E61626C6564202A2A2A00000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2936 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000C6932635F776169745F61636B960000000000000013000C6932635F776169745F61636B15686172745F7365745F70726573737572655F7265710842617564526174650F626C7565746F6F74685F737461746511737973746F6D5F696E7370656374696F6E10776F726B5F646174615F75706461746519706172616D735F686172745F73746F726167655F636865636B0D4750494F5F50574D5F496E69740C54494D5F4361705F496E69741566616C5F657865637574696F6E5F70726F636573730F6E6F696E69745F646174615F73657406E6B094E6BA900A6D656E75735F7461736B0A6C6564735F64696E6974176D656E75735F68616E646C655F696E7370656374696F6E0B6D617267696E5F6C656674196D656E75735F73686F775F7365745F7069645F77696E646F770C666C6F61745F746F5F737472146D6F64655F646961676E6F7369735F737461727400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 970 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000056D6F746F7296000000000000000100056D6F746F72000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2373 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1920 + 1080 + + + + 1 + Debug + + -1 + -1 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F40000004F00000036040000DD000000 + + + 16 + F40000006600000036040000F4000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000E4020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 109 + 109 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000E4020000 + + + 16 + D8000000EF000000F40100002B030000 + + + + 1465 + 1465 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F70000006600000033040000C4000000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 1935 + 1935 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 1936 + 1936 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 195 + 195 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000E4020000 + + + 16 + D8000000EF000000F40100002B030000 + + + + 196 + 196 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000E4020000 + + + 16 + D8000000EF000000F40100002B030000 + + + + 197 + 197 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000770200007D070000C5030000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 198 + 198 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000000103000036040000DE030000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000770200007D070000C5030000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 203 + 203 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + F40000006300000036040000DD000000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F70000006600000033040000C4000000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F70000006600000033040000C4000000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F70000006600000033040000C4000000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F70000006600000033040000C4000000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F70000006600000033040000C4000000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 38003 + 38003 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000E4020000 + + + 16 + D8000000EF000000F40100002B030000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000770200007D070000C5030000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000770200007D070000C5030000 + + + 16 + D8000000EF000000F40100002B030000 + + + + 437 + 437 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 440 + 440 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000770200007D070000C5030000 + + + 16 + D8000000EF000000F40100002B030000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000770200007D070000C5030000 + + + 16 + D8000000EF000000F40100002B030000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F70000006600000033040000C4000000 + + + 16 + D8000000EF000000A00300007D010000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500000C020000 + + + 16 + D8000000EF000000C8010000B8010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 966 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000DE03000080070000F1030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 0 + 0 + 0 + 0 + 476 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 1 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 000000001C0000006F02000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 3D040000660000007D070000C5030000 + + + 16 + 90060000150200004C0A0000F2020000 + + + + 3438 + 000000000C000000000000000020000001000000FFFFFFFFFFFFFFFFF4000000DD00000036040000E1000000010000000100001004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000F40000006600000036040000F4000000F40000004F00000036040000DD0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A004000066000000900500003C020000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F4000000FD020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F000000014030000000000004F000000F0000000FD0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF00000000FD020000360400000103000001000000010000100400000001000000000000000000000000000000000000000000000001000000C60000000000000001000000000000000000000001000000FFFFFFFFC003000001030000C4030000DE03000000000000020000000400000000000000000000000000000000000000000000000000000001000000C600000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF000000005C02000080070000600200000000000001000000040000000100000008FDFFFF8C000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000000000000000000007702000080070000F5030000000000006002000080070000DE0300000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF24536F757263652042726F77736572202D202A2A2A204E6F7420456E61626C6564202A2A2A00000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000040000001000000FFFFFFFFFFFFFFFF360400004F0000003A040000DE03000001000000020000100400000001000000000000000000000000000000000000000000000001000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000400000010000003A0400006600000080070000F50300003A0400004F00000080070000DE03000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7301000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727301000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0500000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000000000000000000 + + + 59392 + File + + 2936 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000C6932635F776169745F61636B960000000000000013000C6932635F776169745F61636B15686172745F7365745F70726573737572655F7265710842617564526174650F626C7565746F6F74685F737461746511737973746F6D5F696E7370656374696F6E10776F726B5F646174615F75706461746519706172616D735F686172745F73746F726167655F636865636B0D4750494F5F50574D5F496E69740C54494D5F4361705F496E69741566616C5F657865637574696F6E5F70726F636573730F6E6F696E69745F646174615F73657406E6B094E6BA900A6D656E75735F7461736B0A6C6564735F64696E6974176D656E75735F68616E646C655F696E7370656374696F6E0B6D617267696E5F6C656674196D656E75735F73686F775F7365745F7069645F77696E646F770C666C6F61745F746F5F737472146D6F64655F646961676E6F7369735F737461727400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 970 + 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000004001D000000000000000000000000000000000100000001000000018030800000000004001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000004006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000040000000000000000000000000000000000000100000001000000960000000300205000000000056D6F746F7296000000000000000100056D6F746F72000000000180EB880000000004002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000400230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2362 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1920 + 1080 + + + + + + 1 + 0 + + 100 + 2 + + ..\User\system\bsp\spis.h + 13 + 15 + 34 + 1 + + 0 + + + startup_stm32f103xb.s + 0 + 120 + 132 + 1 + + 0 + + + ../Core/Src/main.c + 14 + 58 + 69 + 1 + + 0 + + + ..\User\lib\driver\tmc2240.c + 26 + 30 + 43 + 1 + + 0 + + + ..\User\system\bsp\spis.c + 0 + 461 + 467 + 1 + + 0 + + + + +
diff --git a/MDK-ARM/motor.uvoptx b/MDK-ARM/motor.uvoptx index c491601..3477205 100644 --- a/MDK-ARM/motor.uvoptx +++ b/MDK-ARM/motor.uvoptx @@ -190,7 +190,30 @@ 1 x,0x0A + + 8 + 1 + _tmc2240 + + + 9 + 1 + wdata + + + 10 + 1 + rdata + + + + 1 + 0 + 0x20003440 + 0 + + 0 @@ -305,6 +328,18 @@ 0 0 0 + ../Core/Src/spi.c + spi.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 ../Core/Src/tim.c tim.c 0 @@ -312,7 +347,7 @@ 2 - 6 + 7 1 0 0 @@ -324,7 +359,7 @@ 2 - 7 + 8 1 0 0 @@ -344,7 +379,7 @@ 0 3 - 8 + 9 1 0 0 @@ -364,7 +399,7 @@ 0 4 - 9 + 10 1 0 0 @@ -384,7 +419,7 @@ 0 5 - 10 + 11 1 0 0 @@ -396,7 +431,7 @@ 5 - 11 + 12 1 0 0 @@ -408,7 +443,7 @@ 5 - 12 + 13 1 0 0 @@ -420,7 +455,7 @@ 5 - 13 + 14 1 0 0 @@ -432,7 +467,7 @@ 5 - 14 + 15 1 0 0 @@ -444,7 +479,7 @@ 5 - 15 + 16 1 0 0 @@ -456,7 +491,7 @@ 5 - 16 + 17 1 0 0 @@ -468,7 +503,7 @@ 5 - 17 + 18 1 0 0 @@ -478,6 +513,18 @@ 0 0 + + 5 + 19 + 1 + 0 + 0 + 0 + ..\User\system\bsp\spis.c + spis.c + 0 + 0 + @@ -488,7 +535,7 @@ 0 6 - 18 + 20 1 0 0 @@ -500,7 +547,7 @@ 6 - 19 + 21 1 0 0 @@ -512,7 +559,7 @@ 6 - 20 + 22 1 0 0 @@ -524,7 +571,7 @@ 6 - 21 + 23 1 0 0 @@ -536,7 +583,7 @@ 6 - 22 + 24 1 0 0 @@ -548,7 +595,7 @@ 6 - 23 + 25 1 0 0 @@ -560,7 +607,7 @@ 6 - 24 + 26 1 0 0 @@ -572,7 +619,7 @@ 6 - 25 + 27 1 0 0 @@ -584,7 +631,7 @@ 6 - 26 + 28 1 0 0 @@ -596,7 +643,7 @@ 6 - 27 + 29 1 0 0 @@ -608,7 +655,7 @@ 6 - 28 + 30 1 0 0 @@ -620,7 +667,7 @@ 6 - 29 + 31 1 0 0 @@ -632,7 +679,7 @@ 6 - 30 + 32 1 0 0 @@ -644,7 +691,7 @@ 6 - 31 + 33 1 0 0 @@ -656,7 +703,7 @@ 6 - 32 + 34 1 0 0 @@ -676,7 +723,7 @@ 0 7 - 33 + 35 1 0 0 @@ -688,7 +735,7 @@ 7 - 34 + 36 1 0 0 @@ -698,30 +745,6 @@ 0 0 - - 7 - 35 - 1 - 0 - 0 - 0 - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_pwr.c - stm32f1xx_ll_pwr.c - 0 - 0 - - - 7 - 36 - 1 - 0 - 0 - 0 - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_exti.c - stm32f1xx_ll_exti.c - 0 - 0 - 7 37 @@ -729,8 +752,8 @@ 0 0 0 - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_tim.c - stm32f1xx_ll_tim.c + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_spi.c + stm32f1xx_ll_spi.c 0 0 @@ -765,6 +788,42 @@ 0 0 0 + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_exti.c + stm32f1xx_ll_exti.c + 0 + 0 + + + 7 + 41 + 1 + 0 + 0 + 0 + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_pwr.c + stm32f1xx_ll_pwr.c + 0 + 0 + + + 7 + 42 + 1 + 0 + 0 + 0 + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_tim.c + stm32f1xx_ll_tim.c + 0 + 0 + + + 7 + 43 + 1 + 0 + 0 + 0 ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usart.c stm32f1xx_ll_usart.c 0 @@ -780,7 +839,7 @@ 0 8 - 41 + 44 1 0 0 @@ -792,7 +851,7 @@ 8 - 42 + 45 1 0 0 @@ -802,6 +861,18 @@ 0 0 + + 8 + 46 + 1 + 0 + 0 + 0 + ..\User\lib\driver\tmc2240.c + tmc2240.c + 0 + 0 + @@ -812,7 +883,7 @@ 0 9 - 43 + 47 1 0 0 @@ -824,7 +895,7 @@ 9 - 44 + 48 1 0 0 @@ -836,7 +907,7 @@ 9 - 45 + 49 1 0 0 @@ -848,7 +919,7 @@ 9 - 46 + 50 1 0 0 @@ -860,7 +931,7 @@ 9 - 47 + 51 1 0 0 diff --git a/MDK-ARM/motor.uvprojx b/MDK-ARM/motor.uvprojx index 06e1df5..988f013 100644 --- a/MDK-ARM/motor.uvprojx +++ b/MDK-ARM/motor.uvprojx @@ -459,6 +459,62 @@ + + spi.c + 1 + ../Core/Src/spi.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + tim.c 1 @@ -641,6 +697,11 @@ 1 ..\User\system\bsp\i2cs.c + + spis.c + 1 + ..\User\system\bsp\spis.c + @@ -908,121 +969,9 @@ - stm32f1xx_ll_pwr.c + stm32f1xx_ll_spi.c 1 - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_pwr.c - - - 2 - 0 - 0 - 0 - 0 - 1 - 2 - 2 - 2 - 2 - 11 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - - - - - - - - - - - stm32f1xx_ll_exti.c - 1 - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_exti.c - - - 2 - 0 - 0 - 0 - 0 - 1 - 2 - 2 - 2 - 2 - 11 - - - 1 - - - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 - - - - - - - - - - - - stm32f1xx_ll_tim.c - 1 - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_tim.c + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_spi.c 2 @@ -1187,6 +1136,174 @@ + + stm32f1xx_ll_exti.c + 1 + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_exti.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32f1xx_ll_pwr.c + 1 + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_pwr.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + stm32f1xx_ll_tim.c + 1 + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_tim.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + stm32f1xx_ll_usart.c 1 @@ -1258,6 +1375,11 @@ 1 ..\User\lib\driver\ssd1306_oled.c + + tmc2240.c + 1 + ..\User\lib\driver\tmc2240.c + diff --git a/MDK-ARM/motor/motor.hex b/MDK-ARM/motor/motor.hex index 12cb931..4928b66 100644 --- a/MDK-ARM/motor/motor.hex +++ b/MDK-ARM/motor/motor.hex @@ -1,23 +1,23 @@ :020000040800F2 -:100000008034002005010008CD1300088707000890 -:10001000C91300084D070008B119000800000000CE -:100020000000000000000000000000001D17000894 -:1000300085070008000000001D1600081F170008B3 +:100000009034002005010008091500088707000842 +:10001000051500084D070008ED1A00080000000053 +:100020000000000000000000000000005918000857 +:100030008507000800000000591700085B18000839 :100040001F0100081F0100081F0100081F01000810 :100050001F0100081F0100081F0100081F01000800 :100060001F0100081F0100081F0100081F010008F0 :100070001F0100081F010008650700087507000838 :100080001F0100081F0100081F0100081F010008D0 :100090001F0100081F0100081F0100081F010008C0 -:1000A0001F010008151800081F0100081F010008A3 -:1000B0001F010008E51800081F0100081F010008C3 +:1000A0001F010008511900081F0100081F01000866 +:1000B0001F010008211A00081F0100081F01000885 :1000C0001F0100081F0100081F0100081F01000890 -:1000D0001F010008A11900081F0100081F010008E6 +:1000D0001F010008DD1A00081F0100081F010008A9 :1000E0001F0100081F0100081F010008DFF810D0E1 -:1000F00000F01AFB0048004779230008AFF30080A6 -:10010000803400200648804706480047FEE7FEE7A7 +:1000F00000F01AFB00480047292B0008AFF30080EE +:10010000903400200648804706480047FEE7FEE797 :10011000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7B7 -:1001200011180008ED000008D2B201E000F8012B20 +:100120004D190008ED000008D2B201E000F8012BE3 :10013000491EFBD270470022F6E710B513460A4667 :1001400004461946FFF7F0FF204610BD421C10F888 :10015000011B0029FBD1801A7047F0B480EA01022C @@ -115,946 +115,1238 @@ :100710000146E9E7010510196941DDE908450019BD :100720006941BDE8F04DA2E7064C074D06E0E068E0 :1007300040F0010394E8070098471034AC42F6D328 -:10074000FFF7D8FC744100089441000800BFFEE7A1 +:10074000FFF7D8FCC0530008E053000800BFFEE7E5 :10075000024600BF1AB901E000BF00BFFCE700BFBE -:100760000120704710B50248006802F0B8FB10BDC8 -:100770006000002010B50248006802F0B0FB10BD18 -:1007800060000020704700BFFEE7000008B5054983 +:100760000120704710B50248006803F0CAFC10BDB4 +:100770005C00002010B50248006803F0C2FC10BD08 +:100780005C000020704700BFFEE7000008B5054987 :10079000C9690143034AD1611146C9690140009109 :1007A00000BF08BD0010024008B505498969014332 :1007B000034A9161114689690140009100BF08BD5B :1007C0000010024008B5054989690143034A916157 :1007D000114689690140009100BF08BD0010024028 :1007E00008B5054989690143034A91611146896940 -:1007F0000140009100BF08BD0010024010B54A1E24 -:10080000044B9A5C825822F001034A1E014CA25C00 -:10081000835010BDD434000810B54A1E044B9A5CB6 -:10082000825842F001034A1E014CA25C835010BD65 -:10083000D434000810B54A1E044B9A5C825842F02A -:1008400002034A1E014CA25C835010BDD434000840 -:1008500030B54B1E054CE35CC35823F4405313439F -:100860004C1E024D2C5D035130BD00009234000837 -:1008700030B54B1E064CE35C03445B686FF30F031B -:1008800013434C1E024D2C5D0444636030BD0000D8 -:10089000D434000830B54B1E054CE35CC35844F219 -:1008A0001004A34313434C1E014D2C5D035130BD76 -:1008B0009234000810B54B1E024CE35C0344DA602E -:1008C00010BD0000D434000830B54B1E054CE35C6D -:1008D000C35823F0800313434C1E024D2C5D03517B -:1008E00030BD00009234000830B54B1E054CE35C6F -:1008F000C35823F4406313434C1E024D2C5D035137 -:1009000030BD00009234000830B54B1E054CE35C4E -:10091000C35823F0200313434C1E024D2C5D03519A -:1009200030BD00009234000810B54B1E024CE35C51 -:1009300003449A6010BD0000D434000830B54B1E4B -:10094000054CE35CC35823F0400313434C1E024D97 -:100950002C5D035130BD00009234000830B54B1EB1 -:10096000054CE35CC35823F4407313434C1E024D03 -:100970002C5D035130BD0000923400082DE9F04198 -:1009800002460B461868C0F30F2595FAA5F0B0FA99 -:1009900080F480E00120A040284000287AD0082C74 -:1009A00004D240F2011000FA04F106E0A4F10800BC -:1009B0004FF00116864046F08061586808280ED135 -:1009C0001869D66826EA11260F0A97FAA7F7B7FA28 -:1009D00087F700FA07F73E43D66000BF00BF5868AC -:1009E00002EB116691FAA1FCBCFA8CFC4FEA8C0870 -:1009F0004FF00F0C0CFA08FC376827EA0C0791FA45 -:100A0000A1FCBCFA8CFC4FEA8C0C00FA0CFC47EA07 -:100A10000C07376000BF5868012802D058680928C1 -:100A200038D1986802EB116691FAA1FCBCFA8CFCF3 -:100A30004FEA8C084FF0030C0CFA08FC376827EAE1 -:100A40000C0791FAA1FCBCFA8CFC4FEA8C0C00FA62 -:100A50000CFC47EA0C07376000BFD86802EB116650 -:100A600091FAA1FCBCFA8CFC4FEA8C084FF0040C04 -:100A70000CFA08FC376827EA0C0791FAA1FCBCFACB -:100A80008CFC4FEA8C0C00FA0CFC47EA0C07376030 -:100A900000BF00BF641C25FA04F000287FF47AAF81 -:100AA000BDE8F08102469068C1F30F231840C1F3FE -:100AB0000F23984201D1012070470020FCE7C1F3C9 -:100AC0000F2242617047C1F30F2242617047C1F3A8 -:100AD0000F220261704770B500EB116391FAA1F526 -:100AE000B5FA85F5AE000F25B5401C68AC4391FA08 -:100AF000A1F5B5FA85F5AD0002FA05F52C431C60A9 -:100B000070BD000002480068401C01490860704741 -:100B1000240000204FF47A71B0FBF1F2521E4FF026 -:100B2000E0235A6100229A6105221A6100BF7047D2 -:100B300010B5044600F0A8FD2060206800F070FDAC -:100B40006060606800F07CFDA060606800F08AFD75 -:100B5000E06010BD014908607047000000000020FF -:100B6000016821F0800101607047816821F08001F7 -:100B700081607047016841F0010101607047C16800 -:100B800041F00101C160704710B5024613681C486E -:100B9000824208D0B2F1804F05D01A48824202D07A -:100BA0001948824204D123F070004C6840EA0403E3 -:100BB0001348824208D0B2F1804F05D011488242DA -:100BC00002D01148824204D123F44070CC6840EA3C -:100BD000040313608868D06200BF0888906200BF79 -:100BE0000748824203D10869106300BF00BF00BFFD -:100BF000506940F00100506100BF002010BD0000AE -:100C0000002C014000040040000800400146086933 -:100C1000C0F34000704701460869C0F38000704788 -:100C200001460869C0F3C000704701460869C0F377 -:100C3000001070470146086900F001007047014646 -:100C4000C868C0F3400070470146C868C0F3800020 -:100C500070470146C868C0F3C00070470146C868C5 -:100C6000C0F3001070470146C86800F001007047EB -:100C700070B50246012901D1002416E0042901D1F2 -:100C8000012412E0102901D102240EE0402901D1F3 -:100C900003240AE0B1F5807F01D1042405E0B1F519 -:100CA000806F01D1052400E006242346064CE55C54 -:100CB00002F1180428190468044DEE5C0425B540BF -:100CC0002C43046070BD00006F34000876340008C7 -:100CD00070B50246012901D1002416E0042901D192 -:100CE000012412E0102901D102240EE0402901D193 -:100CF00003240AE0B1F5807F01D1042405E0B1F5B9 -:100D0000806F01D1052400E006242346064CE55CF3 -:100D100002F1180428190468044DEE5C0825B5405A -:100D20002C43046070BD00006F3400087634000866 -:100D30002DE9F04106460C4615460127012C08D046 -:100D4000102C0CD0B4F5807F0FD0B4F5805F18D193 -:100D500011E02946304600F07BFB074612E02946A9 -:100D6000304600F0B1FB07460CE02946304600F063 -:100D7000EDFB074606E02946304600F023FC074617 -:100D800000E000BF00BF3846BDE8F08181637047D6 -:100D9000826844F207039A430A43826070474268BC -:100DA00022F070020A434260704708B50168009162 -:100DB00000BF4168009100BF08BD6FF040010160B5 -:100DC000704700002DE9FF4104460D46012700262B -:100DD000204600F055F8002833D1E96868680843D8 -:100DE00029690843E16841F20C6291430843E060DD -:100DF000A868216921F440510143216100BF68695D -:100E0000616921F440710143616100BF6846FFF7E9 -:100E10008FFE0E48844201D1039E08E00C488442B4 -:100E200001D1029E03E00B48844200D1029E46B1EC -:100E3000286830B10027314620462A6800F025F89E -:100E400000BF384604B0BDE8F08100000038014022 -:100E5000004400400048004001460868C0F34000DC -:100E6000704701460868C0F3800070470146086873 -:100E7000C0F3C000704701460868C0F38010704797 -:100E80000146C868C0F34030704770B501EBC1033C -:100E900003EB01139400B3FBF4F301EBC10404EB87 -:100EA00001149500B4FBF5F46425B4FBF5F404EBF0 -:100EB000C40505EB0414A3EB8403322404EB0313F1 -:100EC0006424B3FBF4F303F0F00301EBC10404EB7F -:100ED00001149500B4FBF5F46425B4FBF5F403EBC1 -:100EE000041401EBC10303EB01139500B3FBF5F30D -:100EF00001EBC10505EB01159600B5FBF6F564267F -:100F0000B5FBF6F505EBC50606EB0515A3EB85036A -:100F1000322505EB03136425B3FBF5F303F00F0350 -:100F200023449BB2836070BD38B5012014494969E0 -:100F30000143134A5161114649690140009100BFC4 -:100F400000BF00F06BFD05460022114600F040FA9C -:100F5000044621460E2000F071FD0E2000F044FDF5 -:100F600000F05CFD05460022114600F031FA04460F -:100F700021460F2000F062FD0F2000F035FD38BD46 -:100F80000010024000B585B014216846FFF7D3F881 -:100F90001020FFF709FC2020FFF706FC0420FFF7D4 -:100FA00003FC0820FFF700FC1D491E48FFF787FDE2 -:100FB0001D491E48FFF783FD19480090012001904C -:100FC000022002900020039069461648FFF7D6FCE5 -:100FD000174800900020019069461248FFF7CEFCA8 -:100FE000144800900020019069461348FFF7C6FCA2 -:100FF000124800900020019069460C48FFF7BEFCA3 -:1010000009480090012001900320029000200390E5 -:101010000120049069460548FFF7B0FC05B000BD0B -:10102000200020040010014030003004000C01407A -:10103000C000C004FDFD990400080140FFFFCF047B -:1010400030B585B014216846FFF775F84FF400609D -:10105000FFF7B8FB00F0EAFC05460022032100F090 -:10106000D7F904462146192000F0FCFC192000F0B5 -:10107000C8FC41F61F40ADF800000020019063203D -:10108000029000200390049069460948FFF77CFD18 -:101090000748FFF765FD00210548FFF779FE0021AD -:1010A0000348FFF77CFE0248FFF75FFD05B030BD47 -:1010B000002C014000B593B014210EA8FFF73BF8B7 -:1010C000202106A8FFF737F8142101A8FFF733F80D -:1010D0000120FFF75BFB0020ADF838000F9041F6D0 -:1010E0001F401090002011900EA94FF08040FFF794 -:1010F0004BFD00BF4FF08040006840F080004FF093 -:101100008041086000BF00214FF08040FFF740FEA3 -:1011100010218806FFF7DCFD702006900020079064 -:101120000890099002200A9006AA10214007FFF7B4 -:10113000FFFD10218806FFF79BFD00214FF0804046 -:10114000FFF72DFE4FF08040FFF70FFD0420FFF763 -:1011500039FB40F202200190092002900220039006 -:101160000020049001A90248FFF708FC13B000BD5D -:101170000008014030B585B014216846FEF7DBFF5A -:101180000220FFF703FB00F051FC0546002203217B -:1011900000F03EF9044621461D2000F063FC1D20AE -:1011A00000F02FFC41F61F40ADF800000020019038 -:1011B000632002900020039069460948FFF7E4FC91 -:1011C0000748FFF7CDFC00210548FFF7E1FD0021AE -:1011D0000348FFF7E4FD0248FFF7C7FC05B030BD48 -:1011E000000400402DE9F0418CB01C2105A8FEF759 -:1011F000A2FF14216846FEF79EFF4FF48040FFF7E0 -:10120000EFFA0420FFF7ECFA6848009009200190FB -:10121000032002900020039069466548FFF7AEFB6B -:10122000644800900420019069466148FFF7A6FBDE -:10123000002205216048FFF72DFB002205215E48B2 -:10124000FFF706FB002205215B48FFF75DFB00224C -:1012500005215948FFF772FB802205215648FFF708 -:1012600033FB002205215448FFF778FB00220521BB -:101270005148FFF739FB102204214F48FFF70AFBC2 -:10128000002204214C48FFF7E3FA002204214A48D7 -:10129000FFF73AFB002204214748FFF74FFB80226B -:1012A00004214548FFF710FB002204214248FFF7C4 -:1012B00055FB002204214048FFF716FB25213F4B38 -:1012C0001B68C3F30220052400250346C3F1070C65 -:1012D000BCF1040F02D94FF0040C01E0C3F1070C7C -:1012E000674603F1040CBCF1070F02D24FF0000C6B -:1012F00001E0A3F1030C66464FF0010C0CFA07FC69 -:10130000ACF1010C0CEA040C0CFA06FC4FF00108DD -:1013100008FA06F8A8F1010808EA05084CEA0802EC -:1013200000BF002904DB1007030E2548435407E0E3 -:101330001007040E21480C3001F00F031B1FC4548A -:1013400000BF2520002809DB00F01F020121914089 -:101350004209920002F1E022C2F8001100BF4FF4EE -:10136000E130059000200690079008900C2009902D -:1013700000200A900B9005A91248FFF723FD00BF3B -:101380001048006920F490400E4908610846406901 -:1013900020F02A00486100BF00BF0846C06840F442 -:1013A0000050C86000BF0CB0BDE8F081020002042C -:1013B0000008014004000404000002400CED00E0BD -:1013C00000E400E00038014000BFFEE700BFFEE798 -:1013D000F0B503460C4603F00701C1F107000428ED -:1013E00001D9042001E0C1F107000646081D0728C5 -:1013F00001D2002000E0C81E05460120B040401E7A -:101400002040A8400127AF407F1E17403843F0BD61 -:10141000F0B503460C4603F00701C1F107000428AC -:1014200001D9042001E0C1F107000646081D072884 -:1014300001D2002000E0C81E05460120B040401E39 -:101440002040A8400127AF407F1E17403843F0BD21 -:1014500070B50246106A20F001001062136A5568E8 -:10146000946924F0030424F070000E6840EA060436 -:1014700023F002000E6940EA060323F001004E68E3 -:1014800040EA06030F48824213D123F008004E6958 -:1014900040EA860323F004008E6840EA860325F4C0 -:1014A00080708E6940EA060525F40070CE6940EA36 -:1014B000460555609461C868506300BF1362002000 -:1014C00070BD0000002C01402DE9F04104460D469E -:1014D000206A20F010002062266AD4F80480A769F0 -:1014E00027F4407727F4E040296840EA012726F0F6 -:1014F0002000296940EA011626F01000696840EAD8 -:1015000001161148844213D126F08000696940EA2F -:10151000811626F04000A96840EA811628F4806010 -:10152000A96940EA810828F40060E96940EAC10835 -:10153000C4F80480A7612046E968FFF727FC26620B -:101540000020BDE8F0810000002C014070B502468B -:10155000106A20F480701062136A5568D46924F010 -:10156000030424F070000E6840EA060423F40070BF -:101570000E6940EA062323F480704E6840EA062391 -:101580000F48824213D123F400604E6940EA86235B -:1015900023F480608E6840EA862325F480508E69AB -:1015A00040EA061525F40050CE6940EA461555601C -:1015B000D461C868D06300BF1362002070BD000012 -:1015C000002C014070B50246106A20F48050106271 -:1015D000146A5568D36923F4407323F4E0400E681D -:1015E00040EA062324F400500E6940EA063424F44D -:1015F00080504E6840EA06340748824204D125F400 -:1016000080408E6940EA86155560D361C8681064D1 -:1016100000BF1462002070BD002C01407047000024 -:10162000014600BF0448406800F0F0000009034A8A -:10163000125C21FA02F0704700100240BC3400082E -:10164000014600BF0548406800F4E060044A02EB30 -:101650001020027821FA02F07047000000100240CA -:10166000CC340008014600BF0548406800F46050D3 -:10167000044A02EBD020027821FA02F07047000001 -:1016800000100240CC34000810B5002400BF0B4805 -:10169000406800F00C0020B1042804D0082808D1CC -:1016A00003E0074C07E0064C05E000F00BF80446A9 -:1016B00001E0034C00BF00BF204610BD00100240F7 -:1016C00000127A000021002200BF1148406800F497 -:1016D000803002461AB1B2F5803F0CD101E00D49CD -:1016E0000BE000BF0A484068C0F34040401C0A4B72 -:1016F000B3FBF0F101E0074900BF00BF00BF0448A1 -:10170000406800F47010022303EB90404843704798 -:101710000010024000093D0000127A007047704737 -:1017200010B502203749096821F007010143354A05 -:10173000116000BF00BF00BF3248006800F0070022 -:101740000228F8D100BF3048006840F480302E49AC -:10175000086000BF00BF00BF2B480068C0F34040D6 -:101760000028F8D04FF480304FF4E011264A526838 -:1017700022F47C1200F440330B431A43224B5A608C -:1017800000BF00BF1846006840F08070194608602E -:1017900000BF00BF00BF1C480068C0F340600028C5 -:1017A000F8D000201849496821F0F0010143164A99 -:1017B000516000BF10151146496821F4E0610143F2 -:1017C000516000BF00201146496821F46051014377 -:1017D000516000BF02201146496821F00301014316 -:1017E000516000BF00BF00BF0748406800F00C0018 -:1017F0000828F8D10548FFF78DF90448FFF7AAF942 -:1018000010BD0000002002400010024000A24A0467 -:101810007047000010B53148FFF70CFA01285CD181 -:1018200000BF2E48FFF7F2F901280AD12B48FFF735 -:1018300006FA012805D100BF001F2849086100BF32 -:1018400000BF2648FFF7E7F901280AD12348FFF730 -:10185000FBF9012805D100BF801F2049086100BFA6 -:1018600000BF1E48FFF7DCF901280BD11B48FFF72A -:10187000F0F9012806D100BF6FF008001749086190 -:1018800000BF00BF1548FFF7D0F901280BD113485E -:10189000FFF7E4F9012806D100BF6FF010000F49EF -:1018A000086100BF00BF0D48FFF7C4F901280AD145 -:1018B0000A48FFF7D8F9012805D100BFC01E074923 -:1018C000086100BF00BF00BFFFF71CF900BF04485C -:1018D0000068401C0249086000BF10BD002C014098 -:1018E0005C00002010B52D48FFF7A4F9012853D162 -:1018F00000BF2A48FFF78AF901280AD12748FFF7D5 -:101900009EF9012805D100BF001F2449086100BFCE -:1019100000BF2248FFF77FF901280AD11F48FFF7CF -:1019200093F9012805D100BF801F1C49086100BF41 -:1019300000BF1A48FFF774F901280BD11748FFF7C9 -:1019400088F9012806D100BF6FF00800134908612B -:1019500000BF00BF1148FFF768F901280BD10F48FD -:10196000FFF77CF9012806D100BF6FF010000B498A -:10197000086100BF00BF0948FFF75CF901280AD1E0 -:101980000648FFF770F9012805D100BFC01E0349C2 -:10199000086100BF00BF00BF10BD00000004004090 -:1019A00010B50248006801F0C5FB10BD60000020C2 -:1019B00000BFFEE70FB47CB50C0009AD01D0611E7D -:1019C00000E00021CDE90001064B6A46294608984F -:1019D00000F0A8F8002C02D0009A002111707CBC05 -:1019E0005DF814FB7B1F0008002809DB00F01F02D4 -:1019F000012191404209920002F1E022C2F8001157 -:101A00007047002809DB00F01F02012191404209C4 -:101A1000920002F1E022C2F800117047024800680B -:101A2000C0F30220704700000CED00E0024800689F -:101A3000C0F30220704700000CED00E010B5002854 -:101A400004DB0A07130E054A135406E00A07140EB6 -:101A5000034A00F00F031B1FD45410BD00E400E044 -:101A600018ED00E010B5002804DB0A07130E054A44 -:101A7000135406E00A07140E034A00F00F031B1F5D -:101A8000D45410BD00E400E018ED00E002E008C806 -:101A9000121F08C1002AFAD170477047002001E0E8 -:101AA00001C1121F002AFBD170470000014601F15D -:101AB000100000E0001D02681AB9024A1268904244 -:101AC000F8D370473800002010B50648046803E0DA -:101AD0002046FFF7EBFF0446034800688442F7D333 -:101AE00010BD0000340000203800002010B504466E -:101AF0002146002000F034FD10BD10B501E000F8D3 -:101B0000011B131EA2F10104A2B2F8D110BD10B541 -:101B100001E000F8011B131EA2F10104A2B2F8D1EA -:101B200010BD00002DE9FF4F8DB00F460546002681 -:101B300006E025280BD0DDE90F1290476D1C761CBE -:101B400028780028F5D111B03046BDE8F08F002488 -:101B5000A246A1460122E94900E0044315F8013FED -:101B6000203B02FA03F00842F7D128782A2810D047 -:101B70006FF02F022878A0F13001092914D80AEB60 -:101B80008A0102EB410144F0020400EB010A6D1CE2 -:101B9000F0E701CF5FEA000A03D544F40054CAF12C -:101BA000000A44F002046D1C28782E2817D115F87D -:101BB000010F44F004042A280ED06FF02F02287879 -:101BC000A0F1300109290AD809EB890102EB410192 -:101BD00000EB01096D1CF2E757F8049B6D1C287897 -:101BE0006C280FD006DC4C2817D068280DD06A2846 -:101BF00014D104E0742810D07A280FD10DE044F4F9 -:101C000000140AE044F4801401E044F440146978BC -:101C1000814202D104F580146D1C6D1C28786E2859 -:101C20001ED00CDC632830D004DC00288BD0582870 -:101C300011D19FE0642867D069280CD164E0732833 -:101C40002DD004DC6F2872D0702804D194E0752860 -:101C50006ED078286DD0DDE90F129047761C4BE1ED -:101C6000C4F30250022806D0032809D0042801CF6B -:101C700009D0066040E101CFF117C0E900613BE106 -:101C800001CF068038E1067036E117F8040B8DF8B5 -:101C9000000000208DF80100EB46012003E057F81A -:101CA00004BB4FF0FF3061074FF0000102D40DE09C -:101CB00008F10101884649450FDA8045F8DB1BF839 -:101CC00008100029F4D108E008F10101884681429A -:101CD000FADB1BF808100029F6D1DDE90F23AAEB87 -:101CE00008008146214600F031F9304400EB080637 -:101CF00004E0DDE90F121BF8010B9047B8F1010871 -:101D0000F7D221464846F2E00A21C4F302524FF0CE -:101D1000000B0891022A04D001CFC117032A09D071 -:101D20000AE0FF1D27F00707F7E8020108E02CE0B2 -:101D30001EE01FE000B2C117042A01D140B2C11752 -:101D4000021E71F1000206DA0023D0EB030063EB00 -:101D500001012D2202E0220504D52B228DF824203A -:101D6000012203E0E20701D02022F7E7904653E08A -:101D70000A210BE0102109E010214FF0000B44F084 -:101D800004044FF00809089103E008214FF0000B0C -:101D90000891C4F30252022A04D001CF0021032A81 -:101DA00006D006E0FF1D27F00707F7E8020103E071 -:101DB00080B2042A00D1C0B24FF0000822072BD510 -:101DC0002A78702A07D0DDF820C08CF0100C5CEA6D -:101DD0000B0C05D00EE040228DF82420012208E0F3 -:101DE00050EA010306D030238DF824308DF82520E9 -:101DF00002229046089B83F0080353EA0B030BD1A1 -:101E000050EA010201D1620706D530228DF8242064 -:101E10004FF00108A9F101092A78582A04D038A204 -:101E20000B9208AA0A920BE03AA2F9E75B46089ADD -:101E3000FEF784FB0B9B9B5C0A9A521E0A9213705E -:101E400050EA0102F2D10A98ADEB000000F1200B3C -:101E5000600702D524F4803401E04FF00109D94530 -:101E600002DDA9EB0B0000E0002000EB0B01414478 -:101E70000890AAEB010AE00306D4DDE90F2321460E -:101E8000504600F063F806444FF0000908E009A945 -:101E900011F80900DDE90F12904709F10109761CDC -:101EA000C145F4DBE0030CD5DDE90F2321465046A4 -:101EB00000F04CF8064404E0DDE90F1230209047B2 -:101EC000761C0899481E08900029F5DC08E00A985D -:101ED0000A990078491C0A91DDE90F129047761C97 -:101EE000BBF10001ABF1010BF1DC21465046DDE90D -:101EF0000F2300F019F806446D1C21E609280100A3 -:101F0000303132333435363738396162636465666F -:101F10000000000030313233343536373839414231 -:101F200043444546000000002DE9F04104460025E9 -:101F30001E461746880404D405E039462020B047E1 -:101F40006D1C641EF9D52846BDE8F0812DE9F041ED -:101F5000044600251E469046C80301D5302700E000 -:101F60002027880404D505E041463846B0476D1C5B -:101F7000641EF9D52846BDE8F0814A68002A06D0DB -:101F80000A68531C0B6010704868401E4860704718 -:101F900010B515A1032000F005FCC82000F06EF874 -:101FA00000F002FB002405E0204600F0A1FB04F154 -:101FB0000A00C4B2642CF7DD00200E4908600E4907 -:101FC000086000BF0D48FEF7D5FD0C48FEF7D7FDB1 -:101FD00000BF00BF0A48FEF7CDFD0948FEF7CFFD60 -:101FE00000BF00F0DBFA10BD4C4F4144494E472E74 -:101FF0002E2E0000040000200C000020002C0140C8 -:102000000004004010B5034800F00EF8024800F04C -:1020100061F910BD040000200C00002010B501F093 -:1020200059F800F052FE10BD08B50146002000909E -:10203000086810B1112813D108E000BF00BF0B4899 -:102040000068486000BF1120086000BF074A486868 -:102050001268101A642801D2002008BD00BFEDE705 -:102060000020086000900320F7E700005C000020DB -:1020700001490860704700002000002070B5044648 -:102080001E2094FBF0F594FBF0F100FB114604E0F8 -:1020900047F2305000F00CF86D1E002DF8D12EB133 -:1020A0004FF47A7106FB01F000F002F870BD0000F9 -:1020B00070B5034600224FF0E02675690D4E366874 -:1020C00003FB06F44FF0E026B16910E04FF0E02684 -:1020D000B06988420BD0884202D20E1A324402E024 -:1020E0002E1A0E4432440146A24200D300E0EDE72E -:1020F00000BF70BD2000002010B500BF01220E49B6 -:102100000E48FEF7E8FC00BF0B490C48FEF7DFFC69 -:102110000B490A48FEF7DBFC0420FFF7C9FF06491C -:102120000648FEF7D0FC0420FFF7C2FF044903482D -:10213000FEF7C9FC10BD000010001004000C0140A7 -:102140002000200410B500BF01220E490E48FEF702 -:10215000C2FC00BF0D490C48FEF7B5FC09490A480E -:10216000FEF7B1FC0420FFF7A3FF08490648FEF77D -:10217000AEFC04490448FEF7AAFC0420FFF798FFD0 -:1021800010BD000010001004000C014020002004CD -:1021900010B50024082213491348FEF79CFC11498E -:1021A0001148FEF794FC0420FFF782FF0F490E4808 -:1021B000FEF78DFC0420FFF77BFF07E0601CC4B234 -:1021C000FA2C03DDFFF7BEFF002010BD05490648CD -:1021D000FEF768FC0028F1D104490348FEF773FCC0 -:1021E0000120F2E710001004000C01402000200440 -:1021F00070B50446002500BF012217491748FEF7B5 -:102200006AFC00BF16491548FEF75DFC00BF1FE0E1 -:10221000E00920B110491148FEF759FC03E00E49CE -:102220000E48FEF750FC6006040E0220FFF740FF48 -:102230000B490A48FEF74BFC0220FFF739FF08491B -:102240000648FEF740FC0220FFF732FF681CC5B2CB -:10225000082DDDDB70BD000010001004000C0140F3 -:102260002000200438B5044600208DF800008DF8C9 -:102270000140FFF741FF7820FFF7BAFFFFF788FF23 -:102280009DF80000FFF7B4FFFFF782FF9DF8010003 -:10229000FFF7AEFFFFF77CFFFFF754FF38BD38B5FF -:1022A000044640208DF800008DF80140FFF724FF20 -:1022B0007820FFF79DFFFFF76BFF9DF80000FFF709 -:1022C00097FFFFF765FF9DF80100FFF791FFFFF70C -:1022D0005FFF38BD38B5044600200090206810B17B -:1022E0002E2837D12CE000BF1D481E4BD968C0F303 -:1022F0000F2222EA010301EA020543EA0543194DD0 -:102300002B6100BF18A20221002000F055FC1849E3 -:1023100008680968491C164B1960FEF796F80546CF -:1023200000232A460221282000F052FA00F022FD64 -:1023300000BF10480068606000BF2E20206000BF12 -:102340000C4960680968081A642801D2002038BD69 -:1023500000BFC9E70020206000900320F7E70000DD -:102360002000200400100140207469636B3A0000D3 -:102370001C0000205C00002008B501202749896965 -:102380000143264A9161114689690140009100BFCD -:1023900000BF00071146C9690143D1611146C969EF -:1023A0000140009100BF00BF032002461C4B19688A -:1023B0004FF6FF0319401B4B0B4343EA0221184B16 -:1023C000196000BF00BF1848406820F0E06040F08E -:1023D00000701549486000BFFFF7A2F91348006874 -:1023E0001349B0FBF1F084B22046FFF741FEFEF73F -:1023F000C9FDFEF799FDFEF75DFEFEF7F3FEFEF761 -:102400001FFEFEF7B7FE002000F014F8FFF706FEEF -:10241000FFF7BEFD01E0FFF7F5FDFCE7001002400D -:102420000CED00E00000FA05000001400000002073 -:1024300040420F0010B504460C4951F824104A00E0 -:102440000B4951F82400002100F09EF8094951F889 -:1024500024200749083951F82400002100F094F89D -:10246000012103480830015510BD0000183500084F -:1024700050000020283500082DE9F04704460F469B -:102480000025A9462348005D20B922481838016874 -:10249000204688471FB94FF0FF30BDE8F0871E483F -:1024A00050F82400B7FBF0F61B4850F82400B7FBA7 -:1024B000F0F100FB117000B1761C184850F82400B0 -:1024C000451E22E01348083850F8240030F8150063 -:1024D00010B909F1010901E04FF00009B14513D12C -:1024E0004FF0000809E00B48083850F8240005EBCD -:1024F000080220F8126008F10108B045F3D306483D -:1025000050F824006843C8E76D1E002DDADA4FF05A -:10251000FF30C2E7580000202035000818350008B9 -:1025200010B501460023002207E00B4850F82100B7 -:1025300030F8120000B15B1C521C084850F8210012 -:102540009042F2D864205843044C54F82140B0FB28 -:10255000F4F0C0B210BD0000500000201835000893 -:1025600070B504460E4631462046FFF785FF054606 -:10257000681C08B9002070BD024850F824002844A7 -:10258000F9E700004800002030B5034601E003F8F9 -:10259000011B141EA2F10102F9D130BD10B500F0EB -:1025A00003F800F0E7FB10BD10B54FF48062002186 -:1025B0000448FFF7ACFA4FF48062FF210248FFF7AE -:1025C000A6FA10BD80280020802C00202DE9FC4FA9 -:1025D00004460D4616461F46301B01D5A01B00E0E1 -:1025E000301B8146781B01D5E81B00E0781B824632 -:1025F000B44201DA012001E04FF0FF300190BD420A -:1026000001DA012001E04FF0FF300090A9EB0A0051 -:102610000FFA80F821E0294620460B9A00F022F8B4 -:10262000B44202D1BD4200D118E04FEA48000FFA8F -:1026300080FBCAF10000834506DDA8EB0A000FFA13 -:1026400080F801982044C4B2CB4506DA08EB0900B3 -:102650000FFA80F800982844C5B2DCE700BFBDE857 -:10266000FC8F0000F0B503461446802B01DA4029A8 -:1026700000DBF0BD012C1CD1CD1701EB5575ED1021 -:1026800003EBC515194E755D0A46CE1701EB56765C -:10269000F610A1EBC6070126BE403543EEB2084650 -:1026A000CD1701EB5575ED1003EBC5150F4F7E559A -:1026B0001AE0CD1701EB5575ED1003EBC5150B4E68 -:1026C000755D0A46CE1701EB5676F610A1EBC607EC -:1026D0000126BE40B5430846CE1701EB5676F610EC -:1026E00003EBC616014FBD5500BFC2E7802800208E -:1026F0003EB504460A25012005F118010A236C2283 -:102700000090184600F01CF801200090201DC2B275 -:1027100005F11A0107230C2000F0BCFA234606A29B -:10272000052101A8FFF746F901AA02212C2000F09B -:1027300071FA00F01FFB3EBD253364252500000023 -:102740002DE9F84104460D4616461F46DDF81C806B -:10275000A019C2B22B4629462046CDF80080FFF7CB -:1027600035FFE819C3B2A019C2B2E819C1B22046B8 -:10277000CDF80080FFF72AFFE819C3B222462946A8 -:102780002046CDF80080FFF721FFE919CBB2A1194F -:10279000CAB2A119C8B22946CDF80080FFF716FFCA -:1027A000BDE8F88170B505460C462046FDF7CEFC25 -:1027B00000EB40008021A1EB4000C0F34706224619 -:1027C0002946304600F0F8F900F0D4FA70BD000058 -:1027D0002DE9F04F87B005460E4691469A460020F7 -:1027E00003900490059002900024834600214846FF -:1027F000FDF790FE07D22D222046611CCCB203A922 -:102800000A5489F00049E3494846FDF78DFE02D29B -:1028100007B0BDE8F08FC4F10800C0B20290DE49F5 -:102820004846FDF781FE59D8DB494846FDF71FFDB4 -:102830008046DA49FDF791FC0746FDF724FEC2B257 -:102840002046611CCCB203A90A544846FDF702FE9B -:1028500042F2107190FBF1F201FB12004FF47A7119 -:1028600090FBF1F03030C2B22046611CCCB203A91B -:102870000A544846FDF7EEFD4FF47A7190FBF1F2F1 -:1028800001FB1200642190FBF1F03030C2B220460F -:10289000611CCCB203A90A544846FDF7DBFD642154 -:1028A00090FBF1F201FB12000A2190FBF1F03030B5 -:1028B000C2B22046611CCCB203A90A544846FDF7B7 -:1028C000C9FD0A2190FBF1F201FB12003030C2B2C7 -:1028D0002046611CCCB203A90A54C2E0B049484664 -:1028E000FDF722FE48D84846FDF7B4FD42F21071CC -:1028F00090FBF1F201FB12004FF47A7190FBF1F0C2 -:102900003030C2B22046611CCCB203A90A544846FA -:10291000FDF7A0FD4FF47A7190FBF1F201FB12007C -:10292000642190FBF1F03030C2B22046611CCCB281 -:1029300003A90A544846FDF78DFD642190FBF1F28E -:1029400001FB12000A2190FBF1F03030C2B22046A8 -:10295000611CCCB203A90A544846FDF77BFD0A214D -:1029600090FBF1F201FB12003030C2B22046611C34 -:10297000CCB203A90A5474E08A494846FDF7D4FD55 -:1029800034D84846FDF766FD4FF47A7190FBF1F2BA -:1029900001FB1200642190FBF1F03030C2B22046FE -:1029A000611CCCB203A90A544846FDF753FD6421CB -:1029B00090FBF1F201FB12000A2190FBF1F03030A4 -:1029C000C2B22046611CCCB203A90A544846FDF7A6 -:1029D00041FD0A2190FBF1F201FB12003030C2B23E -:1029E0002046611CCCB203A90A543AE06E4948461D -:1029F000FDF79AFD21D84846FDF72CFD642190FB98 -:102A0000F1F201FB12000A2190FBF1F03030C2B26A -:102A10002046611CCCB203A90A544846FDF71AFDB2 -:102A20000A2190FBF1F201FB12003030C2B22046C5 -:102A3000611CCCB203A90A5413E000214846FDF7FB -:102A400073FD0ED84846FDF705FD0A2190FBF1F213 -:102A500001FB12003030C2B22046611CCCB203A987 -:102A60000A54BAF1000F6ADD072C68DA2E222046DC -:102A7000611CCCB203A90A544846FDF7EBFC804622 -:102A8000FDF7DAFC07464946FDF7BCFB8146BAF183 -:102A9000010F1ED1082C1CDA43494846FDF7B5FB4F -:102AA00081464846FDF722FD0022404BCDE900015A -:102AB000FDF71BFC0746FDF7FAFC0A2190FBF1F23B -:102AC00001FB12003030C2B22046611CCCB203A917 -:102AD0000A54BAF1020F32DB082C30DA3149484689 -:102AE000FDF793FB81464846FDF7B4FC642190FB5B -:102AF000F1F201FB12000A2190FBF1F03030C2B27A -:102B00002046611CCCB203A90A54082C17DA4846A7 -:102B1000FDF7ECFC0022254BCDE90001FDF7E5FBBC -:102B20000746FDF7C4FC0A2190FBF1F201FB1200FD -:102B30003030C2B22046611CCCB203A90A5422E054 -:102B400003A810F80B002038C0B20290782D02DDE7 -:102B50000025701CC6B200240DE0029800EB400076 -:102B6000134901EB4000005D05EBC6112144114AF9 -:102B70005054601CC4B2062CEFDBA81DC5B20BF18B -:102B8000010000F0FF0B03A810F80B000028D7D1BC -:102B900000BF3DE60000FA4600401C4600004042EF -:102BA00000007A440000C842000020410000E03FDD -:102BB0005A35000880280020F0B513460025002271 -:102BC00000241EE01E5D203EF5B27E2802DD0020BE -:102BD0004E1CF1B200220EE005EB45060B4F07EB51 -:102BE0004606B65C00EBC1171744DFF824C00CF8AA -:102BF0000760561CF2B2062AEEDB861DF0B2661C98 -:102C0000F4B21E5D002EDDD1F0BD00005A35000883 -:102C100080280020F0B5034614460022002000253D -:102C200030E0665D203EF2B2782B02DD00234E1CC0 -:102C3000F1B200200CE000EB0216144FBE5D03EB76 -:102C4000C1170744DFF848C00CF80760461CF0B213 -:102C50000828F0DB00200EE000EB021608360B4FD0 -:102C6000BF5D4E1C03EBC6160644DFF824C00CF80B -:102C70000670461CF0B20828EEDB03F10806F3B23A -:102C80006E1CF5B2665D002ECBD1F0BD8237000818 -:102C9000802800202DE9F84306460D461746984641 -:102CA000DDF8209000240CE02819C3B2F019C2B25C -:102CB0002819C1B23046CDF80090FFF787FC601CA0 -:102CC000C4B24445F0DBBDE8F88310B5AE20FFF791 -:102CD000C9FA2020FFF7C6FA1020FFF7C3FAC82070 -:102CE000FFF7C0FA0020FFF7BDFA1020FFF7BAFA8D -:102CF0004020FFF7B7FA8120FFF7B4FAFF20FFF773 -:102D0000B1FAA120FFF7AEFAA620FFF7ABFAA82090 -:102D1000FFF7A8FA3F20FFF7A5FAA420FFF7A2FAD1 -:102D2000D320FFF79FFA0020FFF79CFAD520FFF78A -:102D300099FAF020FFF796FAD920FFF793FA2220AC -:102D4000FFF790FADA20FFF78DFA1220FFF78AFAE0 -:102D5000DB20FFF787FA2020FFF784FA8D20FFF7AA -:102D600081FA1420FFF77EFAAF20FFF77BFAFFF716 -:102D700015FC10BD70B500242DE0002600200DE0EC -:102D800000EBC4111D4A515C00EBC4121C4B9A5C51 -:102D9000914201D0012603E0411CC8B28028EFDB3C -:102DA00000BFB6B104F1B001C8B2FFF75BFA012071 -:102DB000FFF758FA1020FFF755FA002507E005EB5A -:102DC000C4110E4A505CFFF76AFA681CC5B2802D28 -:102DD000F5DB601CC4B2082CCFDB094807494FF46F -:102DE000806203E011F8013B00F8013B131EA2F1E1 -:102DF0000104A2B2F6D100BF70BD000080280020FF -:102E0000802C002010B5044604B910BD0020208598 -:102E1000A07D012808D1606A30B1218C89040A0C98 -:102E20000021606AFEF769FE00BFEEE72DE9F05F62 -:102E30000646884615469946DDE90B7BDDF828A055 -:102E40000EB1012100E0002108462921FDF780FC98 -:102E50004420FEF74BFE04460CB1012100E00021A6 -:102E600008462C21FDF774FC0120E0750020207637 -:102E7000C4F83C902584C4F840B0A786002D0CDD32 -:102E80002846FEF733FEE061E16909B1012100E067 -:102E9000002108463E21FDF75BFC002F0CDD384683 -:102EA000FEF724FE2063216B09B1012100E000211F -:102EB00008464521FDF74CFC84F8158084F82CA0C9 -:102EC00066602046BDE8F09F10B5044604B910BD09 -:102ED000002060852046FFF795FF00BFF7E710B59B -:102EE00004460CB1012100E00021084640F2D71150 -:102EF000FDF72EFC012084F838002169A068FDF759 -:102F00007DFC2069082865D2DFE800F06404111E0A -:102F10002C3A485600BFA0680168C1F3400121B1B6 -:102F2000A0680221416000BF00BF00BF53E000BFA6 -:102F3000A0680168C1F3401121B1A068202141605F -:102F400000BF00BF00BF46E000BFA0680168C1F33A -:102F5000402129B1A0684FF40071416000BF00BF5B -:102F600000BF38E000BFA0680168C1F3403129B15B -:102F7000A0684FF40051416000BF00BF00BF2AE0CD -:102F800000BFA0680168C1F3404129B1A0684FF4B7 -:102F90000031416000BF00BF00BF1CE000BFA0685F -:102FA0000168C1F3405129B1A0684FF4001141609C -:102FB00000BF00BF00BF0EE000BFA0680168C1F302 -:102FC000406129B1A0684FF00071416000BF00BFAF -:102FD00000BF00E000BF00BF606800BF00BF00BFCF -:102FE00000F10C0252E8002F42F0400100F10C0207 -:102FF00042E80013002BF3D100BF00BF206908286E -:1030000065D2DFE800F06404111E2C3A485600BF78 -:10301000A0680168C1F3C00121B1A0680821416026 -:1030200000BF00BF00BF53E000BFA0680168C1F34C -:10303000C01121B1A0688021416000BF00BF00BF66 -:1030400046E000BFA0680168C1F3C02129B1A068B3 -:103050004FF40061416000BF00BF00BF38E000BF17 -:10306000A0680168C1F3C03129B1A0684FF40041E4 -:10307000416000BF00BF00BF2AE000BFA068016838 -:10308000C1F3C04129B1A0684FF40021416000BFE5 -:1030900000BF00BF1CE000BFA0680168C1F3C051C1 -:1030A00029B1A0684FF40001416000BF00BF00BF1C -:1030B0000EE000BFA0680168C1F3C06129B1A0683B -:1030C0004FF00061416000BF00BF00BF00E000BFE3 -:1030D00000BF10BD0EB51348006808BB0020F021EA -:1030E0000122114BCDE9002102900A4601210F482F -:1030F000FFF79CFE0B4908600020096808700C4827 -:10310000084909688860052006490968C8600420E4 -:1031100004490968086100210248006800F0E2F8EB -:103120000EBD000060000020673400080038014038 -:103130000000024038B5044604B938BD6068C16873 -:10314000C1F34011B9B160680168C1F3401191B198 -:10315000608D218C884202DB2046FFF7B5FE616856 -:103160004A68D2B2608D411C6185E1690A54002031 -:103170002076E0753FE06068C168C1F30011002966 -:1031800039D060680168C1F30011002933D0607D37 -:1031900001282BD1D4E902014A1E514B9A5C02440A -:1031A0005268208C801A6085207DF8B9D4E902012C -:1031B000FDF724FBE06B80B1608D00280DDD608D94 -:1031C000218C884209DC628D2078E36BE1699847A5 -:1031D000228C0021E069FEF790FC228CD4E90201E8 -:1031E000FDF746FBD4E90201FDF716FB00206085E0 -:1031F0006068FDF7DAFD6068C168C1F3801151B104 -:103200006068FDF738FE30B1206C08B1206C804753 -:103210006068FDF7D2FDA07D01285ED101256068C0 -:10322000C168C1F3002171B16068016801F001015A -:1032300049B1022560680168009100BF41680091B2 -:1032400000BF00BF00BF6068FDF706FE68B16068A0 -:10325000FDF702FE48B1042560680168009100BFD7 -:103260004168009100BF00BF00BF6068FDF7F9FD35 -:1032700060B16068FDF7F5FD40B1606801680091DC -:1032800000BF4168009100BF00BF00BF6068FDF74C -:10329000EDFD68B16068FDF7E9FD48B11025606893 -:1032A0000168009100BF4168009100BF00BF00BFEE -:1032B000012D11D0606A78B1618D491E88B2228DCE -:1032C000616A01EB82014880228D616A01F8225017 -:1032D000218D491C218500BF00BF00BF2DE70000E4 -:1032E000D434000870B504460D46607D90B9A575CC -:1032F000606800BF00BF00BF00F10C0252E8002F61 -:1033000042F0200100F10C0242E80013002BF3D13F -:1033100000BF70E00020A0756068FDF746FD2169E0 -:10332000A068FDF76BFAD4E90201FDF767FA60685F -:10333000011D0E463246D4E90201FDF7F5FAE269B5 -:10334000D4E90201FDF7B6FA228CD4E90201FDF7B7 -:103350008FFAD4E90201FDF76DFAD4E90201FDF715 -:103360005BFA606800BF00BF00BF00F1140252E8C2 -:10337000002F42F0400100F1140242E80013002B3C -:10338000F3D100BF00BF606800BF00BF00BF00F105 -:103390000C0252E8002F42F0100100F10C0242E84A -:1033A0000013002BF3D100BF00BF6068011D0E4663 -:1033B00032462169A068FDF7B7FA226B2169A0683F -:1033C000FDF778FA2169A068FDF734FA606800BF5C -:1033D00000BF00BF00F1140252E8002F42F080014C -:1033E00000F1140242E80013002BF3D100BF00BF2C -:1033F000012084F83800A07D012833D1606A68B9C3 -:10340000218C8800FEF772FB6062616A09B10121BC -:1034100000E0002108468221FDF79AF9606800BFAC -:1034200000BF00BF00F10C0252E8002F42F480718F -:1034300000F10C0242E80013002BF3D100BF00BFE3 -:10344000606800BF00BF00BF00F1140252E8002F07 -:1034500042F0010100F1140242E80013002BF3D105 -:1034600000BF00BF70BD7047081C3044586C80001E -:103470000000000404040000080000000800000828 -:103480000000000800020406080A0C000102030400 -:103490000506081C3044586C800000000004040439 -:1034A00000000800000008000008000000080002FA -:1034B0000406080A0C0001020304050600000000CF -:1034C00000000000010203040607080900000000D4 -:1034D00001020304081C3044586C80000000000402 -:1034E00004040000080000000800000800000008B4 -:1034F00000020406080A0C000102030405065F6CC2 -:10350000697374006C69737420616C6C20636F6DF7 -:103510006D616E6400000000000400000000000007 -:10352000080000000800000000200000000000006B -:10353000081C3044586C80000000000404040000A3 -:10354000080000000800000800000008000204064F -:10355000080A0C0001020304050600000000000038 -:103560000000002F000000000700070000147F1477 -:103570007F1400242A7F2A12006264081323003675 -:103580004955225000000503000000001C224100A4 -:10359000000041221C000014083E08140008083EE8 -:1035A0000808000000A060000008080808080000E3 -:1035B00060600000002010080402003E5149453EB2 -:1035C0000000427F400000426151494600214145D0 -:1035D0004B31001814127F10002745454539003C37 -:1035E0004A49493000017109050300364949493605 -:1035F00000064949291E00003636000000005636F4 -:1036000000000008142241000014141414140000D7 -:103610004122140800020151090600324959513E65 -:10362000007C1211127C007F49494936003E41411D -:103630004122007F4141221C007F49494941007FCE -:1036400009090901003E4149497A007F0808087FBD -:103650000000417F4100002040413F01007F0814ED -:103660002241007F40404040007F020C027F007FEB -:103670000408107F003E4141413E007F09090906D0 -:10368000003E4151215E007F091929460046494903 -:1036900049310001017F0101003F4040403F001FD0 -:1036A0002040201F003F4038403F0063140814634F -:1036B00000070870080700615149454300007F4139 -:1036C000410000552A552A55000041417F00000461 -:1036D000020102040040404040400000010204009A -:1036E000002054545478007F4844443800384444FF -:1036F000442000384444487F00385454541800088B -:103700007E0901020018A4A4A47C007F08040478A8 -:103710000000447D4000004080847D00007F102830 -:1037200044000000417F4000007C04180478007CC5 -:103730000804047800384444443800FC2424241845 -:103740000018242418FC007C080404080048545481 -:10375000542000043F444020003C4040207C001C9A -:103760002040201C003C4030403C004428102844AD -:10377000001CA0A0A07C004464544C4414141414F5 -:103780001414000000000000000000000000000011 -:103790000000000000F800000000000000333000CE -:1037A000000000100C06100C0600000000000000D5 -:1037B000000040C07840C0784000043F04043F044B -:1037C0000400007088FC08300000001820FF211E53 -:1037D0000000F008F000E018000000211C031E218A -:1037E0001E0000F00888700000001E212324192705 -:1037F000211010160E000000000000000000000064 -:103800000000000000E0180402000000000718207B -:10381000400000020418E0000000004020180700EB -:103820000000404080F0804040000202010F010291 -:103830000200000000F0000000000101011F010172 -:103840000100000000000000000080B070000000D7 -:103850000000000000000000000000010101010163 -:1038600001010000000000000000003030000000F6 -:1038700000000000000080601804006018060100CD -:10388000000000E010080810E000000F10202010D9 -:103890000F00001010F8000000000020203F202042 -:1038A00000000070080808887000003028242221D9 -:1038B000300000300888884830000018202020118F -:1038C0000E000000C02010F8000000070424243F70 -:1038D000240000F808888808080000192120201119 -:1038E0000E0000E0108888180000000F1120201141 -:1038F0000E0000380808C83808000000003F00002B -:1039000000000070880808887000001C2221212215 -:103910001C0000E010080810E00000003122221115 -:103920000F00000000C0C0000000000000303000A8 -:103930000000000000800000000000008060000027 -:103940000000000080402010080000010204081060 -:10395000200040404040404040000404040404046F -:10396000040000081020408000000020100804021D -:103970000100007048080808F0000000003036011F -:103980000000C030C828E810E000071827242314DE -:103990000B000000C038E0000000203C230202279A -:1039A000382008F8888888700000203F20202011E7 -:1039B0000E00C03008080808380007182020201022 -:1039C000080008F808080810E000203F2020201018 -:1039D0000F0008F88888E8081000203F20202320E6 -:1039E000180008F88888E8081000203F200003002D -:1039F0000000C03008080838000007182020221EE8 -:103A0000020008F808000008F808203F2101012101 -:103A10003F20000808F8080800000020203F202070 -:103A2000000000000808F8080800C08080807F00BF -:103A3000000008F888C028180800203F2001263818 -:103A4000200008F8080000000000203F202020206F -:103A5000300008F8F800F8F80800203F003F003F69 -:103A6000200008F830C00008F808203F20000718A0 -:103A70003F00E01008080810E0000F102020201080 -:103A80000F0008F808080808F000203F2101010194 -:103A90000000E01008080810E0000F182424385037 -:103AA0004F0008F8888888887000203F2000030CA9 -:103AB00030200070880808083800003820212122B2 -:103AC0001C00180808F8080818000000203F200013 -:103AD000000008F808000008F808001F2020202037 -:103AE0001F000878880000C83808000007380E0159 -:103AF0000000F80800F80008F800033C0700073C45 -:103B00000300081868808068180820302C03032CF4 -:103B100030200838C800C83808000000203F2000C6 -:103B2000000010080808C838080020382621202086 -:103B30001800000000FE020202000000007F40406A -:103B40004000000C30C000000000000000010638FA -:103B5000C00000020202FE000000004040407F0062 -:103B60000000000004020202040000000000000047 -:103B70000000000000000000000080808080808045 -:103B8000808000020204000000000000000000002D -:103B90000000000080808080000000192422222282 -:103BA0003F2008F8008080000000003F1120201115 -:103BB0000E000000008080800000000E11202020F8 -:103BC0001100000000808088F800000E11202010F5 -:103BD0003F200000808080800000001F22222222DF -:103BE0001300008080F0888888180020203F202063 -:103BF00000000000808080808000006B949494938B -:103C0000600008F8008080800000203F2100002034 -:103C10003F2000809898000000000020203F2020D6 -:103C20000000000000809898000000C08080807F25 -:103C3000000008F8000080808000203F24022D3022 -:103C40002000000808F8000000000020203F20208D -:103C500000008080808080808000203F20003F2006 -:103C6000003F8080008080800000203F21000020F5 -:103C70003F200000808080800000001F2020202046 -:103C80001F00808000808000000080FFA1202011A4 -:103C90000E000000008080808000000E112020A017 -:103CA000FF80808080008080800020203F212000D5 -:103CB00001000000808080808000003324242424C0 -:103CC0001900008080E0808000000000001F20209C -:103CD00000008080000000808000001F2020201055 -:103CE0003F20808080000080808000010E30080628 -:103CF000010080800080008080800F300C030C3039 -:103D00000F0000808000808080000020312E0E3166 -:103D10002000808080000080808080818E70180666 -:103D2000010000808080808080000021302C2221D2 -:103D3000300000000000807C020200000000003F14 -:103D4000404000000000FF00000000000000FF00F5 -:103D500000000002027C800000000040403F0000A4 -:103D6000000000060101020204040000000000003F -:103D700000000003050911FF118905C300E000F0F0 -:103D800000F8000000000000004428FF11AA4400D1 -:103D90000000000000000000000000000000000023 -:103DA0000000000000000000000000000000000013 -:103DB0000000000000000000000000000000000003 -:103DC00000000000000000000000000083013844F3 -:103DD000829292740183000000000000007C44C7BE -:103DE000017D7D7D7D017D7D7D7D017D7D7D7D01F3 -:103DF000FF000000000000010001000100010001BF -:103E000000010000000000000000000101000000AF -:103E100000000000000000000000000000000000A2 -:103E20000000000000000000000000000000000092 -:103E30000000000000000000000000000000000082 -:103E40000000000000000000000000000101000070 -:103E5000000000000101000000000000000000015F -:103E60000101010101010101010101010101010142 -:103E70000100000000000000000000404040404001 -:103E800000006D6D6D6D6D00006060606060000031 -:103E900040404040400000000000000000000000E2 -:103EA0000000000000000000000000000000000012 -:103EB0000000000000000000000000000000000002 -:103EC00000000000000000000000000000000000F2 -:103ED00000000000000000000000000000000000E2 -:103EE00000000000000000000000000000000000D2 -:103EF0000000000000000000000000DBDBDBDBDB7B -:103F00000000DBDBDBDBDB0000DBDBDBDBDB000023 -:103F1000DBDBDBDBDB0000DADADADADA0000D8D868 -:103F2000D8D8D80000C0C0C0C0C00000C0C0C0C049 -:103F3000C00000C0C0C0C0C00000C0C0C0C0C00041 -:103F400000808080808000000000000000000000F1 -:103F50000000000000000000000000000000000061 -:103F60000000000000000000000000000000000051 -:103F70000000000000000000000000060606060623 -:103F800000000606060606000006060606060000F5 -:103F900006060606060000060606E6662000060679 -:103FA00086060600000606060686000006060606C9 -:103FB000060000868686868680808686068686C07F -:103FC000C08686860606D0307606060606000006FF -:103FD0000606060600000606060606000006060699 -:103FE00006060000060606060600000000000000A7 -:103FF00000000000000000000000000000000000C1 -:1040000000000000000000000000000000000000B0 -:10401000000000000000000000000000601C00FE26 -:1040200000010200C41820029E63B20E00FF8181CD -:10403000FF00008040300F00000000FF0023EAAACC -:10404000BFAAEA033F00FF000000000000000000DC -:104050000000000000000000000000000000000060 -:104060000000000000000000000000000000000050 -:104070000000000000808080000000000080808040 -:104080000000000000000000000000000000000030 -:10409000000000000000000000000E0C08000001FD -:1040A0000101010100000001000000010081808089 -:1040B0008180818080808001010101000000010079 -:1040C000000001000101090C0E00000000000000CA -:1040D00000000000000000000000C0C0C0C0C0C060 -:1040E000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0 -:1040F000C000001E21404050215E001E2140405063 -:10410000215E000000000000000000000000000030 -:10411000000000000000000000000000000000009F -:1041200000000000000000000000000000FFFFC1D0 -:10413000C1FFFFC1C1FFFF00000000000000000040 -:10414000000000000000000000000000000000006F -:1041500000000000000000000000FFFF80FCF3EF03 -:10416000F3FC80FF80EEEEEEF5FBFF9CBEB6B6885A -:10417000FF000000944100080000002074000000CF -:104180008C1A000808420008740000200C3400005B -:104190009C1A00080024F400000000000000000049 -:1041A000000000000000000000000000000000000F -:1041B00000000000000000000000000000000000FF -:1041C00000000000000000000000000000000000EF -:1041D0000000000035240008212500088000002090 -:1041E00000C00120802000203C00002000000000D2 -:1041F0000000000000000000FE3400080435000844 -:08420000C6E533B4C91A000839 +:1007F0000140009100BF08BD0010024008B5054946 +:1008000089690143034A9161114689690140009158 +:1008100000BF08BD0010024010B54A1E044B9A5C90 +:10082000825822F001034A1E014CA25C835010BD85 +:10083000F846000810B54A1E044B9A5C825842F0F4 +:1008400001034A1E014CA25C835010BDF84600080B +:1008500010B54A1E044B9A5C825842F002034A1EAD +:10086000014CA25C835010BDF846000830B54B1E09 +:10087000054CE35CC35823F4405313434C1E024D14 +:100880002C5D035130BD0000B646000830B54B1E4C +:10089000064CE35C03445B686FF30F0313434C1E89 +:1008A000024D2C5D0444636030BD0000F846000832 +:1008B00030B54B1E054CE35CC35844F21004A3430F +:1008C00013434C1E014D2C5D035130BDB64600084C +:1008D00010B54B1E024CE35C0344DA6010BD00000F +:1008E000F846000830B54B1E054CE35CC35823F0B6 +:1008F000800313434C1E024D2C5D035130BD00009C +:10090000B646000830B54B1E054CE35CC35823F4D3 +:10091000406313434C1E024D2C5D035130BD00005B +:10092000B646000830B54B1E054CE35CC35823F0B7 +:10093000200313434C1E024D2C5D035130BD0000BB +:10094000B646000810B54B1E024CE35C03449A60A7 +:1009500010BD0000F846000830B54B1E054CE35CA6 +:10096000C35823F0400313434C1E024D2C5D03512A +:1009700030BD0000B646000830B54B1E054CE35CA8 +:10098000C35823F4407313434C1E024D2C5D035196 +:1009900030BD0000B64600082DE9F04102460B4686 +:1009A0001868C0F30F2595FAA5F0B0FA80F480E03E +:1009B0000120A040284000287AD0082C04D240F220 +:1009C000011000FA04F106E0A4F108004FF001164E +:1009D000864046F08061586808280ED11869D668AC +:1009E00026EA11260F0A97FAA7F7B7FA87F700FA4F +:1009F00007F73E43D66000BF00BF586802EB1166A0 +:100A000091FAA1FCBCFA8CFC4FEA8C084FF00F0C59 +:100A10000CFA08FC376827EA0C0791FAA1FCBCFA2B +:100A20008CFC4FEA8C0C00FA0CFC47EA0C07376090 +:100A300000BF5868012802D05868092838D1986842 +:100A400002EB116691FAA1FCBCFA8CFC4FEA8C080F +:100A50004FF0030C0CFA08FC376827EA0C0791FAF0 +:100A6000A1FCBCFA8CFC4FEA8C0C00FA0CFC47EAA7 +:100A70000C07376000BFD86802EB116691FAA1FC41 +:100A8000BCFA8CFC4FEA8C084FF0040C0CFA08FC02 +:100A9000376827EA0C0791FAA1FCBCFA8CFC4FEAF4 +:100AA0008C0C00FA0CFC47EA0C07376000BF00BF53 +:100AB000641C25FA04F000287FF47AAFBDE8F081C9 +:100AC00002469068C1F30F231840C1F30F239842E8 +:100AD00001D1012070470020FCE7C1F30F224261E1 +:100AE0007047C1F30F2242617047C1F30F220261C8 +:100AF000704770B500EB116391FAA1F5B5FA85F571 +:100B0000AE000F25B5401C68AC4391FAA1F5B5FACB +:100B100085F5AD0002FA05F52C431C6070BD0000A0 +:100B200002480068401C014908607047200000200E +:100B30004FF47A71B0FBF1F2521E4FF0E0235A618C +:100B400000229A6105221A6100BF704710B5044661 +:100B500000F038FE2060206800F000FE60606068F1 +:100B600000F00CFEA060606800F01AFEE06010BDAE +:100B7000016841F040010160704730B50246012331 +:100B800000BF1068C0F3801038BBD1E900042043D7 +:100B90008C682043CC6820430C6920434C69204377 +:100BA0008C692043CC6920430C6A204314684FF6BB +:100BB000BF75AC4320431060506820F004004C69BE +:100BC00040EA14405060086AB0F5005F04D1486AFA +:100BD00084B2146100BF00BF0023184630BD00007E +:100BE000014908607047000000000020016821F002 +:100BF000800101607047816821F080018160704749 +:100C0000016841F0010101607047C16841F00101D4 +:100C1000C160704710B5024613681C48824208D074 +:100C2000B2F1804F05D01A48824202D01948824260 +:100C300004D123F070004C6840EA04031348824258 +:100C400008D0B2F1804F05D01148824202D011483D +:100C5000824204D123F44070CC6840EA040313605C +:100C60008868D06200BF0888906200BF074882424F +:100C700003D10869106300BF00BF00BF506940F096 +:100C80000100506100BF002010BD0000002C014099 +:100C9000000400400008004001460869C0F340001D +:100CA000704701460869C0F3800070470146086933 +:100CB000C0F3C000704701460869C0F300107047D8 +:100CC0000146086900F0010070470146C868C0F39A +:100CD000400070470146C868C0F380007047014675 +:100CE000C868C0F3C00070470146C868C0F3001070 +:100CF00070470146C86800F00100704770B50246B1 +:100D0000012901D1002416E0042901D1012412E0B7 +:100D1000102901D102240EE0402901D103240AE068 +:100D2000B1F5807F01D1042405E0B1F5806F01D1D8 +:100D3000052400E006242346064CE55C02F1180475 +:100D400028190468044DEE5C0425B5402C4304606A +:100D500070BD0000934600089A46000870B5024630 +:100D6000012901D1002416E0042901D1012412E057 +:100D7000102901D102240EE0402901D103240AE008 +:100D8000B1F5807F01D1042405E0B1F5806F01D178 +:100D9000052400E006242346064CE55C02F1180415 +:100DA00028190468044DEE5C0825B5402C43046006 +:100DB00070BD0000934600089A4600082DE9F041F6 +:100DC00006460C4615460127012C08D0102C0CD0E5 +:100DD000B4F5807F0FD0B4F5805F18D111E02946BB +:100DE000304600F0D3FB074612E02946304600F0BB +:100DF00009FC07460CE02946304600F045FC074652 +:100E000006E02946304600F07BFC074600E000BFC4 +:100E100000BF3846BDE8F08181637047826844F2C4 +:100E200007039A430A4382607047426822F07002C7 +:100E30000A434260704708B50168009100BF4168ED +:100E4000009100BF08BD6FF04001016070470000D5 +:100E50002DE9FF4104460D4601270026204600F0FB +:100E600055F8002833D1E9686868084329690843C0 +:100E7000E16841F20C6291430843E060A86821698F +:100E800021F440510143216100BF6869616921F487 +:100E900040710143616100BF6846FFF757FE0E488D +:100EA000844201D1039E08E00C48844201D1029E95 +:100EB00003E00B48844200D1029E46B1286830B15D +:100EC0000027314620462A6800F025F800BF384642 +:100ED00004B0BDE8F081000000380140004400404B +:100EE0000048004001460868C0F3400070470146D2 +:100EF0000868C0F38000704701460868C0F3C0006E +:100F0000704701460868C0F3801070470146C86802 +:100F1000C0F34030704770B501EBC10303EB011320 +:100F20009400B3FBF4F301EBC10404EB011495004E +:100F3000B4FBF5F46425B4FBF5F404EBC40505EB50 +:100F40000414A3EB8403322404EB03136424B3FBE3 +:100F5000F4F303F0F00301EBC10404EB011495007A +:100F6000B4FBF5F46425B4FBF5F403EB041401EBD6 +:100F7000C10303EB01139500B3FBF5F301EBC105CE +:100F800005EB01159600B5FBF6F56426B5FBF6F505 +:100F900005EBC50606EB0515A3EB8503322505EB2E +:100FA00003136425B3FBF5F303F00F0323449BB253 +:100FB000836070BD38B50120144949690143134A63 +:100FC0005161114649690140009100BF00BF00F026 +:100FD000C3FD05460022114600F098FA044621465A +:100FE0000E2000F0C9FD0E2000F09CFD00F0B4FDC5 +:100FF00005460022114600F089FA044621460F20DA +:1010000000F0BAFD0F2000F08DFD38BD0010024049 +:1010100000B585B014216846FFF78DF81020FFF762 +:10102000C3FB2020FFF7C0FB0420FFF7BDFB082017 +:10103000FFF7BAFB26492748FFF74FFD41F6180195 +:101040002548FFF74AFD25492548FFF746FD20487A +:101050000090012001900220029000200390694638 +:101060001C48FFF799FC1F4800900020019069463A +:101070001848FFF791FC1C48009000200190694639 +:101080001548FFF789FC41F61800009001200190F7 +:10109000022002900020039069460F48FFF77CFC75 +:1010A000124800900020019069460D48FFF774FC3B +:1010B0000A48009001200190032002900020039034 +:1010C0000120049069460648FFF766FC05B000BDA4 +:1010D00020002004001001400008014030003004CE +:1010E000000C0140C000C0049D059904FFFFCF041F +:1010F00000B58FB0282105A8FFF71DF81421684618 +:10110000FFF719F84FF48050FFF75CFB0420FFF75E +:1011100059FB4AF2A00000900920019003200290A0 +:101120000020039069461348FFF736FC44F2400064 +:1011300000900420019069460E48FFF72DFC002026 +:1011400005904FF4827006900020079002200890CE +:101150000120099040020A9020200B9000200C9062 +:101160000D900A200E9005A90348FFF706FD0FB069 +:1011700000BD0000000801400030014030B585B0DE +:1011800014216846FEF7D7FF4FF40060FFF728FBF5 +:1011900000F0EAFC05460022032100F0D7F90446DE +:1011A0002146192000F0FCFC192000F0C8FC41F693 +:1011B0001F40ADF800000020019063200290002045 +:1011C0000390049069460948FFF724FD0748FFF79C +:1011D0000DFD00210548FFF721FE00210348FFF720 +:1011E00024FE0248FFF707FD05B030BD002C01408A +:1011F00000B593B014210EA8FEF79DFF202106A88C +:10120000FEF799FF142101A8FEF795FF0120FFF7D3 +:10121000BDFA0020ADF838000F9041F61F40109045 +:10122000002011900EA94FF08040FFF7F3FC00BFA3 +:101230004FF08040006840F080004FF0804108602F +:1012400000BF00214FF08040FFF7E8FD1021880625 +:10125000FFF784FD70200690002007900890099009 +:1012600002200A9006AA10214007FFF7A7FD1021CF +:101270008806FFF743FD00214FF08040FFF7D5FDC2 +:101280004FF08040FFF7B7FC0420FFF7A9FA40F2C7 +:101290000220019009200290022003900020049077 +:1012A00001A90248FFF778FB13B000BD0008014018 +:1012B00030B585B014216846FEF73DFF0220FFF7E8 +:1012C00065FA00F051FC05460022032100F03EF9CA +:1012D000044621461D2000F063FC1D2000F02FFC79 +:1012E00041F61F40ADF800000020019063200290FD +:1012F0000020039069460948FFF78CFC0748FFF778 +:1013000075FC00210548FFF789FD00210348FFF720 +:101310008CFD0248FFF76FFC05B030BD00040040B3 +:101320002DE9F0418CB01C2105A8FEF704FF142123 +:101330006846FEF700FF4FF48040FFF75FFA042095 +:10134000FFF75CFA684800900920019003200290A2 +:101350000020039069466548FFF71EFB6448009033 +:101360000420019069466148FFF716FB0022052121 +:101370006048FFF79DFA002205215E48FFF776FAE4 +:10138000002205215B48FFF7CDFA002205215948CC +:10139000FFF7E2FA802205215648FFF7A3FA002260 +:1013A00005215448FFF7E8FA002205215148FFF7CC +:1013B000A9FA102204214F48FFF77AFA00220421EB +:1013C0004C48FFF753FA002204214A48FFF7AAFAD3 +:1013D000002204214748FFF7BFFA80220421454834 +:1013E000FFF780FA002204214248FFF7C5FA0022E5 +:1013F00004214048FFF786FA25213F4B1B68C3F3C1 +:101400000220052400250346C3F1070CBCF1040F9C +:1014100002D94FF0040C01E0C3F1070C674603F159 +:10142000040CBCF1070F02D24FF0000C01E0A3F155 +:10143000030C66464FF0010C0CFA07FCACF1010CF2 +:101440000CEA040C0CFA06FC4FF0010808FA06F846 +:10145000A8F1010808EA05084CEA080200BF0029C3 +:1014600004DB1007030E2548435407E01007040E61 +:1014700021480C3001F00F031B1FC45400BF25206E +:10148000002809DB00F01F0201219140420992006F +:1014900002F1E022C2F8001100BF4FF4E1300590E4 +:1014A00000200690079008900C20099000200A90D8 +:1014B0000B9005A91248FFF7CBFC00BF104800694C +:1014C00020F490400E4908610846406920F02A0047 +:1014D000486100BF00BF0846C06840F40050C860C3 +:1014E00000BF0CB0BDE8F08102000204000801401A +:1014F00004000404000002400CED00E000E400E001 +:101500000038014000BFFEE700BFFEE7F0B503462C +:101510000C4603F00701C1F10700042801D904209B +:1015200001E0C1F107000646081D072801D200208E +:1015300000E0C81E05460120B040401E2040A840E3 +:101540000127AF407F1E17403843F0BDF0B503467A +:101550000C4603F00701C1F10700042801D904205B +:1015600001E0C1F107000646081D072801D200204E +:1015700000E0C81E05460120B040401E2040A840A3 +:101580000127AF407F1E17403843F0BD70B50246BB +:10159000106A20F001001062136A5568946924F003 +:1015A000030424F070000E6840EA060423F00200F1 +:1015B0000E6940EA060323F001004E6840EA060384 +:1015C0000F48824213D123F008004E6940EA860397 +:1015D00023F004008E6840EA860325F480708E694B +:1015E00040EA060525F40070CE6940EA46055560DC +:1015F0009461C868506300BF1362002070BD000092 +:10160000002C01402DE9F04104460D46206A20F0EF +:1016100010002062266AD4F80480A76927F4407776 +:1016200027F4E040296840EA012726F020002969D4 +:1016300040EA011626F01000696840EA01161148D8 +:10164000844213D126F08000696940EA811626F0B1 +:101650004000A96840EA811628F48060A96940EA40 +:10166000810828F40060E96940EAC108C4F80480F0 +:10167000A7612046E968FFF7CFFB26620020BDE89E +:10168000F0810000002C014070B50246106A20F481 +:1016900080701062136A5568D46924F0030424F042 +:1016A00070000E6840EA060423F400700E6940EAF8 +:1016B000062323F480704E6840EA06230F488242D6 +:1016C00013D123F400604E6940EA862323F480603E +:1016D0008E6840EA862325F480508E6940EA06151C +:1016E00025F40050CE6940EA46155560D461C868BB +:1016F000D06300BF1362002070BD0000002C0140C9 +:1017000070B50246106A20F480501062146A556861 +:10171000D36923F4407323F4E0400E6840EA0623C3 +:1017200024F400500E6940EA063424F480504E68D8 +:1017300040EA06340748824204D125F480408E698D +:1017400040EA86155560D361C868106400BF146212 +:10175000002070BD002C014070470000014600BF12 +:101760000448406800F0F0000009034A125C21FAC6 +:1017700002F0704700100240E0460008014600BF3A +:101780000548406800F4E060044A02EB102002784B +:1017900021FA02F07047000000100240F0460008F5 +:1017A000014600BF0548406800F46050044A02EB5F +:1017B000D020027821FA02F07047000000100240A9 +:1017C000F046000810B5002400BF0B48406800F048 +:1017D0000C0020B1042804D0082808D103E0074CED +:1017E00007E0064C05E000F00BF8044601E0034C6E +:1017F00000BF00BF204610BD0010024000127A005A +:101800000021002200BF1148406800F480300246E9 +:101810001AB1B2F5803F0CD101E00D490BE000BFD9 +:101820000A484068C0F34040401C0A4BB3FBF0F14B +:1018300001E0074900BF00BF00BF0448406800F452 +:101840007010022303EB90404843704700100240A1 +:1018500000093D0000127A007047704710B5022061 +:101860003749096821F007010143354A116000BF7B +:1018700000BF00BF3248006800F007000228F8D11E +:1018800000BF3048006840F480302E49086000BF37 +:1018900000BF00BF2B480068C0F340400028F8D0CC +:1018A0004FF480304FF4E011264A526822F47C1243 +:1018B00000F440330B431A43224B5A6000BF00BF71 +:1018C0001846006840F080701946086000BF00BFED +:1018D00000BF1C480068C0F340600028F8D000201A +:1018E0001849496821F0F0010143164A516000BFD0 +:1018F00010151146496821F4E0610143516000BFB1 +:1019000000201146496821F460510143516000BF35 +:1019100002201146496821F003010143516000BFD4 +:1019200000BF00BF0748406800F00C000828F8D14D +:101930000548FFF7FDF80448FFF752F910BD000015 +:10194000002002400010024000A24A04704700003C +:1019500010B53148FFF7B4F901285CD100BF2E481B +:10196000FFF79AF901280AD12B48FFF7AEF90128B1 +:1019700005D100BF001F2849086100BF00BF2648ED +:10198000FFF78FF901280AD12348FFF7A3F90128AF +:1019900005D100BF801F2049086100BF00BF1E485D +:1019A000FFF784F901280BD11B48FFF798F90128AC +:1019B00006D100BF6FF008001749086100BF00BFE3 +:1019C0001548FFF778F901280BD11348FFF78CF978 +:1019D000012806D100BF6FF010000F49086100BF59 +:1019E00000BF0D48FFF76CF901280AD10A48FFF73C +:1019F00080F9012805D100BFC01E0749086100BF5A +:101A000000BF00BFFFF78CF800BF04480068401C0F +:101A10000249086000BF10BD002C014058000020A2 +:101A200010B52D48FFF74CF9012853D100BF2A48C3 +:101A3000FFF732F901280AD12748FFF746F90128B4 +:101A400005D100BF001F2449086100BF00BF224824 +:101A5000FFF727F901280AD11F48FFF73BF90128B2 +:101A600005D100BF801F1C49086100BF00BF1A4894 +:101A7000FFF71CF901280BD11748FFF730F90128AF +:101A800006D100BF6FF008001349086100BF00BF16 +:101A90001148FFF710F901280BD10F48FFF724F97F +:101AA000012806D100BF6FF010000B49086100BF8C +:101AB00000BF0948FFF704F901280AD10648FFF7DB +:101AC00018F9012805D100BFC01E0349086100BFF5 +:101AD00000BF00BF10BD00000004004010B5024868 +:101AE000006802F039FC10BD5C00002000BFFEE77A +:101AF0000FB47CB50C0009AD01D0611E00E00021DF +:101B0000CDE90001064B6A462946089800F020F905 +:101B1000002C02D0009A002111707CBC5DF814FBEF +:101B200005230008002809DB00F01F020121914075 +:101B30004209920002F1E022C2F800117047002829 +:101B400009DB00F01F02012191404209920002F1DD +:101B5000E022C2F80011704702480068C0F302207A +:101B6000704700000CED00E002480068C0F302205E +:101B7000704700000CED00E010B5002804DB0A07F8 +:101B8000130E054A135406E00A07140E034A00F028 +:101B90000F031B1FD45410BD00E400E018ED00E05B +:101BA00010B5002804DB0A07130E054A135406E09B +:101BB0000A07140E034A00F00F031B1FD45410BD74 +:101BC00000E400E018ED00E002E008C8121F08C1C0 +:101BD000002AFAD170477047002001E001C1121FAE +:101BE000002AFBD1704700002DE9F04704460D465E +:101BF00090461F46DDE908690CB1012100E0002193 +:101C000008468821FEF7A4FD0DB1012100E0002166 +:101C100008468921FEF79CFDA16D09B1012100E074 +:101C2000002108468A21FEF793FD6567C4F8788095 +:101C3000E667012084F8800084F881000FB1C4F8C1 +:101C40008470B9F1000F01D0C4F88890A16D01F142 +:101C50000C0000BF711E114A515C2944886000BF0E +:101C600000BF0120686000BF00BF0220686000BFA5 +:101C700000BF701E1146085C285840F00201701E1B +:101C8000105C295000BFA06D416841F00201416025 +:101C900000BFA06DFEF76CFFBDE8F087224700088B +:101CA000014601F1100000E0001D02681AB9024A65 +:101CB00012689042F8D370473400002070B5044693 +:101CC0000D460CB1012100E0002108467E21FEF7FF +:101CD0003FFD0DB1012100E0002108467F21FEF704 +:101CE00037FD002084F85C00A5652846FEF740FF1C +:101CF00070BD000010B50648046803E02046FFF7F9 +:101D0000CFFF0446034800688442F7D310BD0000AB +:101D1000300000203400002010B504462146002089 +:101D200000F0F8FF10BD10B501E000F8011B131E14 +:101D3000A2F10104A2B2F8D110BD10B501E000F883 +:101D4000011B131EA2F10104A2B2F8D110BD0000C4 +:101D50002DE9FF4F8DB00F460546002606E02528E9 +:101D60000BD0DDE90F1290476D1C761C28780028F7 +:101D7000F5D111B03046BDE8F08F0024A246A1464F +:101D80000122E94900E0044315F8013F203B02FA33 +:101D900003F00842F7D128782A2810D06FF02F02DC +:101DA0002878A0F13001092914D80AEB8A0102EB46 +:101DB000410144F0020400EB010A6D1CF0E701CF81 +:101DC0005FEA000A03D544F40054CAF1000A44F063 +:101DD00002046D1C28782E2817D115F8010F44F045 +:101DE00004042A280ED06FF02F022878A0F13001C9 +:101DF00009290AD809EB890102EB410100EB01092D +:101E00006D1CF2E757F8049B6D1C28786C280FD0E6 +:101E100006DC4C2817D068280DD06A2814D104E0BD +:101E2000742810D07A280FD10DE044F400140AE091 +:101E300044F4801401E044F440146978814202D1F2 +:101E400004F580146D1C6D1C28786E281ED00CDCE7 +:101E5000632830D004DC00288BD0582811D19FE0B3 +:101E6000642867D069280CD164E073282DD004DC85 +:101E70006F2872D0702804D194E075286ED078282D +:101E80006DD0DDE90F129047761C4BE1C4F3025090 +:101E9000022806D0032809D0042801CF09D0066003 +:101EA00040E101CFF117C0E900613BE101CF0680BD +:101EB00038E1067036E117F8040B8DF800000020B9 +:101EC0008DF80100EB46012003E057F804BB4FF00A +:101ED000FF3061074FF0000102D40DE008F101016D +:101EE000884649450FDA8045F8DB1BF808100029C1 +:101EF000F4D108E008F1010188468142FADB1BF8C1 +:101F000008100029F6D1DDE90F23AAEB080081466D +:101F1000214600F031F9304400EB080604E0DDE929 +:101F20000F121BF8010B9047B8F10108F7D22146B8 +:101F30004846F2E00A21C4F302524FF0000B089128 +:101F4000022A04D001CFC117032A09D00AE0FF1DDD +:101F500027F00707F7E8020108E02CE01EE01FE089 +:101F600000B2C117042A01D140B2C117021E71F19B +:101F7000000206DA0023D0EB030063EB01012D22FF +:101F800002E0220504D52B228DF82420012203E053 +:101F9000E20701D02022F7E7904653E00A210BE048 +:101FA000102109E010214FF0000B44F004044FF021 +:101FB0000809089103E008214FF0000B0891C4F3D1 +:101FC0000252022A04D001CF0021032A06D006E0E3 +:101FD000FF1D27F00707F7E8020103E080B2042A9B +:101FE00000D1C0B24FF0000822072BD52A78702A02 +:101FF00007D0DDF820C08CF0100C5CEA0B0C05D08B +:102000000EE040228DF82420012208E050EA01036E +:1020100006D030238DF824308DF8252002229046FA +:10202000089B83F0080353EA0B030BD150EA01022B +:1020300001D1620706D530228DF824204FF0010827 +:10204000A9F101092A78582A04D038A20B9208AACB +:102050000A920BE03AA2F9E75B46089AFEF76EFA9D +:102060000B9B9B5C0A9A521E0A92137050EA010263 +:10207000F2D10A98ADEB000000F1200B600702D509 +:1020800024F4803401E04FF00109D94502DDA9EBC9 +:102090000B0000E0002000EB0B0141440890AAEB8C +:1020A000010AE00306D4DDE90F232146504600F083 +:1020B00063F806444FF0000908E009A911F8090087 +:1020C000DDE90F12904709F10109761CC145F4DBE7 +:1020D000E0030CD5DDE90F232146504600F04CF813 +:1020E000064404E0DDE90F1230209047761C089981 +:1020F000481E08900029F5DC08E00A980A99007843 +:10210000491C0A91DDE90F129047761CBBF10001D2 +:10211000ABF1010BF1DC21465046DDE90F2300F065 +:1021200019F806446D1C21E60928010030313233CC +:102130003435363738396162636465660000000003 +:1021400030313233343536373839414243444546ED +:10215000000000002DE9F041044600251E46174608 +:10216000880404D405E039462020B0476D1C641E65 +:10217000F9D52846BDE8F0812DE9F0410446002557 +:102180001E469046C80301D5302700E0202788046A +:1021900004D505E041463846B0476D1C641EF9D5AC +:1021A0002846BDE8F0810FB4DDE900108A68C0F36D +:1021B0000F231A40C0F30F239A4201D1012200E0FD +:1021C0000022D0B204B070477CB504460CB10121A6 +:1021D00000E000210846CF21FEF7BAFAA169D1E953 +:1021E0000401CDE90001A5696E6995E80F00B047CB +:1021F0007CBD2DE9F0470746884614461D464FF042 +:1022000000090FB1012100E000210846FA21FEF784 +:102210009FFA0CB1012100E000210846FB21FEF7E6 +:1022200097FA0DB1012100E000210846FC21FEF7DC +:102230008FFA384600F03BFE4146384600F025FF55 +:102240008146002606E0FF21384600F01EFFA0551B +:10225000701CC6B2AE42F6DB384600F00DFE4846B2 +:10226000BDE8F0872DE9FC4104462169D1E904016C +:10227000CDE900012669F7683B4696E80700B847B4 +:1022800094F860102046226B90476620015D20463E +:10229000226B904705462169D1E90401CDE900018F +:1022A0002669D6E902733A46D6E90001B8472846BE +:1022B000BDE8FC8170B50446002508E02846691C8D +:1022C0008DB244F62061884200DD07E000BF204661 +:1022D000FFF7C8FF00F001000028EFD100BF70BD7C +:1022E0000FB4DDE90001C1F30F22426100BF04B069 +:1022F00070470FB4DDE90001C1F30F22026100BF96 +:1023000004B070474A68002A06D00A68531C0B6064 +:1023100010704868401E4860704710B504460CB104 +:10232000012100E000210846A321FEF711FAD4F8AC +:10233000880018B12046D4F888108847D4F8840063 +:1023400018B12046D4F88410884710BDF0B5034674 +:10235000002083F88100DC6F586F661E224FBE5D3F +:10236000865926F00107661EDFF87CC01CF806605F +:10237000875100BFDC6F586F661E6746BE5D06441E +:10238000F16000BFDC6F586F661EBE5D0644766864 +:102390006FF30F061643671E1CF8077007447E6034 +:1023A00000BFDC6F586F661E6746BE5D865946F0FB +:1023B0000107661E1CF80660875100BF002507E074 +:1023C000681C85B24CF25030854201DD00BF03E04D +:1023D00093F881000028F3D000BF93F88100012812 +:1023E00000D1F0BD0020FCE72247000870B504468C +:1023F0000D4600260CB1012100E00021084640F204 +:102400002911FEF7A5F9204600F051FD2946204686 +:1024100000F03BFE0021204600F037FE0646204635 +:1024200000F02AFD304670BD2DE9FC4105460E4600 +:1024300000270DB1012100E00021084640F23D11C6 +:10244000FEF786F92C460CB1012100E00021084678 +:1024500040F2DE21FEF77CF9A169D1E90401CDE962 +:102460000001D4F818C0DCF80C8043469CE8070053 +:10247000C04700BF284600F01AFD3146284600F04C +:1024800004FE0746284600F0F7FC3846BDE8FC810C +:102490002DE9FC4705460E4617464FF000080DB1E2 +:1024A000012100E0002108464FF4A871FEF750F921 +:1024B0002C460CB1012100E00021084640F2D32156 +:1024C000FEF746F9A169D1E90401CDE90001D4F88C +:1024D00018C0DCE902934A46DCE90001C84700BFA6 +:1024E000284600F0E4FC002407E03178284600F09C +:1024F000CCFD8046761C601C84B2BC42F5DB2846CD +:1025000000F0BAFC4046BDE8FC872DE9F0410446E6 +:102510000E46154600270CB1012100E000210846B7 +:102520004FF48A71FEF714F9204600F0C0FC3146E2 +:10253000204600F0AAFD07462946204600F0A5FDEA +:10254000204600F099FC3846BDE8F0810FB430B564 +:10255000DDE90301C268C1F30F2323EA020402EAA2 +:10256000030544EA0544046100BF30BC5DF814FB78 +:102570007CB504462169D1E90401CDE90001256952 +:10258000EE68334695E80700B0476320015D2046BA +:10259000226B90472169D1E90401CDE90001256949 +:1025A000D5E902633246D5E90001B0477CBD7CB570 +:1025B00004462169D1E90401CDE900012569EE68ED +:1025C000334695E80700B0476220015D2046226B44 +:1025D00090472169D1E90401CDE900012569D5E9D8 +:1025E00002633246D5E90001B0477CBD2DE9F041D8 +:1025F00006460F4614461D464FF000080EB1012155 +:1026000000E000210846DE21FEF7A2F80CB101210E +:1026100000E000210846DF21FEF79AF80DB1012104 +:1026200000E000210846E021FEF792F8304600F075 +:102630003EFC3946304600F028FD804604E0217813 +:10264000304600F022FD641C281EA5F10101CDB228 +:10265000F5D1304600F010FC4046BDE8F0810000A6 +:1026600010B515A1032001F06FF8C82000F0B0F8F4 +:1026700000F06CFF002405E0204601F00BF804F1A7 +:102680000A00C4B2642CF7DD00200E4908600E4930 +:10269000086000BF0D48FEF7B3FA0C48FEF7B5FA24 +:1026A00000BF00BF0A48FEF7ABFA0948FEF7ADFAD3 +:1026B00000BF00F044FF10BD4C4F4144494E472E2F +:1026C0002E2E0000040000200C000020002C0140F1 +:1026D0000004004010B5034800F04EF8024800F036 +:1026E000D1F910BD040000200C00002030B587B0E7 +:1026F00001F002FE01F0BBFA40F60800010A1C4A94 +:10270000516100BF4100104600F0A6F8049048F265 +:102710008001174800F0A0F8019042F2200114480F +:1027200000F09AF8039044F24001114800F094F848 +:1027300002900021084600F08FF80590002108461D +:1027400000F08AF8069001A9002001F069FB002042 +:1027500001F052FB0468002001F04EFB00680549BF +:10276000856C2046A847002001F01EFB07B030BD55 +:10277000000801400030014038B5044600200090B8 +:10278000206810B1112816D10BE000BF002001F025 +:1027900071FB00BF0A480068606000BF1120206024 +:1027A00000BF074960680968081A642801D2002040 +:1027B00038BD00BFEAE70020206000900320F7E763 +:1027C0005800002001490860704700001C000020EC +:1027D00070B504461E2094FBF0F594FBF0F100FB6D +:1027E000114604E047F2305000F012F86D1E002D43 +:1027F000F8D12EB14FF47A7106FB01F000F008F821 +:1028000070BD00E000BF011EA0F10100FAD17047C9 +:1028100070B5034600224FF0E02675690D4E36680C +:1028200003FB06F44FF0E026B16910E04FF0E0261C +:10283000B06988420BD0884202D20E1A324402E0BC +:102840002E1A0E4432440146A24200D300E0EDE7C6 +:1028500000BF70BD1C0000202DE9F04105460E466A +:1028600018273946002000F055FA04460CB1012122 +:1028700000E0002108463621FDF76AFF256066600A +:102880000548A0600548E060054820610548606192 +:102890002046BDE8F0810000F3220008E122000894 +:1028A0004D250008A721000810B500BF01220E49E0 +:1028B0000E48FEF71EF900BF0B490C48FEF715F94C +:1028C0000B490A48FEF711F90420FFF7A1FF06495A +:1028D0000648FEF706F90420FFF79AFF044903486B +:1028E000FEF7FFF810BD000010001004000C0140BE +:1028F0002000200410B500BF01220E490E48FEF74B +:10290000F8F800BF0D490C48FEF7EBF809490A48F2 +:10291000FEF7E7F80420FFF77BFF08490648FEF7BB +:10292000E4F804490448FEF7E0F80420FFF770FFDC +:1029300010BD000010001004000C01402000200415 +:1029400010B50024082213491348FEF7D2F81149A4 +:102950001148FEF7CAF80420FFF75AFF0F490E4846 +:10296000FEF7C3F80420FFF753FF07E0601CC4B272 +:10297000FA2C03DDFFF7BEFF002010BD0549064815 +:10298000FEF79EF80028F1D104490348FEF7A9F8A4 +:102990000120F2E710001004000C01402000200488 +:1029A00070B50446002500BF012217491748FEF7FD +:1029B000A0F800BF16491548FEF793F800BF1FE0C6 +:1029C000E00920B110491148FEF78FF803E00E49E5 +:1029D0000E48FEF786F86006040E0220FFF718FF87 +:1029E0000B490A48FEF781F80220FFF711FF08495A +:1029F0000648FEF776F80220FFF70AFF681CC5B20A +:102A0000082DDDDB70BD000010001004000C01403B +:102A10002000200438B5044600208DF800008DF811 +:102A20000140FFF741FF7820FFF7BAFFFFF788FF6B +:102A30009DF80000FFF7B4FFFFF782FF9DF801004B +:102A4000FFF7AEFFFFF77CFFFFF754FF38BD38B547 +:102A5000044640208DF800008DF80140FFF724FF68 +:102A60007820FFF79DFFFFF76BFF9DF80000FFF751 +:102A700097FFFFF765FF9DF80100FFF791FFFFF754 +:102A80005FFF38BD38B5044600200090206810B1C3 +:102A9000282837D12CE000BF1D481E4BD968C0F351 +:102AA0000F2222EA010301EA020543EA0543194D18 +:102AB0002B6100BF18A20221002001F04FF8184935 +:102AC00008680968491C164B1960FDF7BEFC0546ED +:102AD00000232A460221282000F04CFE01F01CF9B8 +:102AE00000BF10480068606000BF2820206000BF61 +:102AF0000C4960680968081A642801D2002038BDB2 +:102B000000BFC9E70020206000900320F7E7000025 +:102B10002000200400100140207469636B3A00001B +:102B2000180000205800002008B5012028498969B4 +:102B30000143274A9161114689690140009100BF14 +:102B400000BF00071146C9690143D1611146C96937 +:102B50000140009100BF00BF032002461D4B1968D1 +:102B60004FF6FF0319401C4B0B4343EA0221194B5C +:102B7000196000BF00BF1948406820F0E06040F0D5 +:102B800000701649486000BFFEF768FE14480068F0 +:102B90001449B0FBF1F084B22046FFF713FEFEF7B4 +:102BA00037FAFEF707FAFEF723FBFEF7B9FBFEF74D +:102BB000E5FAFEF77DFBFEF79BFA002000F014F823 +:102BC000FFF794FDFFF74CFD01E0FFF783FDFCE705 +:102BD000001002400CED00E00000FA05000001408A +:102BE0000000002040420F0010B504460C4951F887 +:102BF00024104A000B4951F82400002100F09EF8EF +:102C0000094951F824200749083951F824000021C6 +:102C100000F094F8012103480830015510BD000070 +:102C2000644700084C000020744700082DE9F04775 +:102C300004460F460025A9462348005D20B92248D6 +:102C400018380168204688471FB94FF0FF30BDE8AB +:102C5000F0871E4850F82400B7FBF0F61B4850F8E8 +:102C60002400B7FBF0F100FB117000B1761C18488E +:102C700050F82400451E22E01348083850F824007C +:102C800030F8150010B909F1010901E04FF0000911 +:102C9000B14513D14FF0000809E00B48083850F84F +:102CA000240005EB080220F8126008F10108B04585 +:102CB000F3D3064850F824006843C8E76D1E002D82 +:102CC000DADA4FF0FF30C2E7540000206C4700080A +:102CD0006447000810B501460023002207E00B48B6 +:102CE00050F8210030F8120000B15B1C521C08485B +:102CF00050F821009042F2D864205843044C54F814 +:102D00002140B0FBF4F0C0B210BD00004C00002028 +:102D10006447000870B504460E4631462046FFF76A +:102D200085FF0546681C08B9002070BD024850F8B0 +:102D300024002844F9E700004400002030B5034691 +:102D400001E003F8011B141EA2F10102F9D130BD0C +:102D50000FB42DE9F04105460D9F022D01DA012146 +:102D600000E0002108463821FDF7F2FC90263146AC +:102D70000020FFF7CFFF044600BF201D07A918223F +:102D800003E011F8013B00F8013B131EA2F101061C +:102D9000B2B2F6D100BF67802570012084F85C00D4 +:102DA0002449A1642449E1642449616524492165D9 +:102DB000002D2ED12348E061234921622349A162DD +:102DC0002349E16223496162234921632349616305 +:102DD0002349E1632349A1632349216423496164B1 +:102DE000052084F860000121612001550621622040 +:102DF000015504216320015503216420015502215E +:102E000065200155A521662001550021712001553D +:102E10000AE0012D04D11648E0611649216203E061 +:102E200061210020FDF794FC2046BDE8F0015DF82B +:102E300014FB0000BD1C0008E91B00084D2300081E +:102E40001B2300080B250008ED230008ED250008D2 +:102E5000F3210008C92100088B3000081332000854 +:102E6000112F0008F9320008073500083930000832 +:102E700029240008912400087CB504460CB10121E6 +:102E800000E00021084640F2E921FDF761FC2169DC +:102E9000D1E90401CDE900012569D5E90263324693 +:102EA000D5E90001B047204600F01BF87CBD7CB599 +:102EB00004460CB1012100E00021084640F2F52152 +:102EC000FDF746FC2169D1E90401CDE9000125693E +:102ED000EE68334695E80700B047204600F001F859 +:102EE0007CBD70B5044600250CB1012100E0002135 +:102EF000084640F26511FDF72BFC6588002D06DDC4 +:102F000000E000BF281EA5F101018DB2F9D170BD0E +:102F10002DE9FC4704460D46174698464FF0010A36 +:102F200000260CB1012100E00021084640F28D216D +:102F3000FDF70EFC0FB1012100E00021084640F230 +:102F40008E21FDF705FCB8F1000F01DD012100E045 +:102F50000021084640F28F21FDF7FAFB2169D1E9F3 +:102F60000401CDE90001D4F810C0DCF80C904B4608 +:102F70009CE80700C8476420015D2046226B90470B +:102F8000064616B90020BDE8FC876720005D0228D0 +:102F900010D1C5F307212046226B904706460EB993 +:102FA0000020F0E7E9B22046226B9047064626BB98 +:102FB0000020E8E76720005D032819D1C5F3074129 +:102FC0002046226B904706460EB90020DBE7C5F38A +:102FD00007212046226B904706460EB90020D2E713 +:102FE000E9B22046226B9047064636B90020CAE770 +:102FF0004FF42E710020FDF7ABFB4FF000090AE003 +:103000006620015D2046226B904707F8090009F110 +:1030100001001FFA80F9C145F2DB2169D1E9040101 +:10302000CDE90001D4F810C0DCE902934A46DCE99E +:103030000001C8475046A6E72DE9FC4104460D466D +:103040002169D1E90401CDE900012769D7F80CC055 +:10305000634697E80700E04729462046226B9047E1 +:103060006620015D2046226B904706462169D1E922 +:103070000401CDE900012769D7E902C36246D7E917 +:103080000001E0473046BDE8FC812DE9FC470446DD +:103090000D464FF0FF080CB1012100E00021084669 +:1030A00040F2B111FDF754FB94F85C0001287CD18B +:1030B000002795E026460EB1012100E000210846D8 +:1030C00040F22231FDF744FBF168D1E90401CDE97A +:1030D0000001D6F80CC0DCF80C904B469CE80700C9 +:1030E000C84700BF2046FFF7FCFE05F08000C0B1D6 +:1030F00026460EB1012100E00021084640F20131D0 +:10310000FDF726FB7168D1E90401CDE90001D6F88D +:1031100004C0DCE902934A46DCE90001C84700BF6D +:1031200018E026460EB1012100E0002108464FF4C8 +:103130004371FDF70DFB7168D1E90401CDE9000190 +:10314000D6F804C0DCF80C904B469CE80700C84752 +:1031500000BF00BF2046FFF7C4FE26460EB1012186 +:1031600000E00021084640F21731FDF7F1FAF1685E +:10317000D1E90401CDE90001D6F80CC0DCE90293E5 +:103180004A46DCE90001C84700BF2046FFF7A9FE18 +:103190006806050E4FEA48604FEA1068A0680068AC +:1031A000E0B1264616B1012101E01FE000210846EA +:1031B00040F22D31FDF7CCFAB168D1E90401CDE937 +:1031C0000001D6F808C0DCF814909CE80F00C8474E +:1031D000012803D108F1010000F0FF08781CC7B2F4 +:1031E000082FFFF667AF4046BDE8FC87A06D00F1F1 +:1031F0000C010D7000BF4FF4FA620121204600F06F +:1032000031F808B9FF20EFE7A06D017B8846404602 +:10321000EAE77CB504460CB1012100E00021084634 +:1032200040F2C521FDF794FA2169D1E90401CDE905 +:1032300000012569EE68334695E80700B0470A208B +:10324000FFF7DFFA2169D1E90401CDE90001256921 +:10325000D5E902633246D5E90001B0470A20FFF7FD +:10326000D0FA7CBD2DE9F04104460D4616460027F4 +:103270000CB1012100E00021084640F27311FDF776 +:1032800067FA022D0FD107E038467F1CB04202D901 +:103290000020BDE8F08100BFA06D8168C1F340014E +:1032A0000029F1D026E0012D0ED106E038467F1C22 +:1032B000B04201D90020ECE700BFA06D816801F0A9 +:1032C00001010029F2D015E0802D0ED106E038462C +:1032D0007F1CB04201D90020DBE700BFA06D8168F0 +:1032E000C1F3C0110029F2D004E04FF4D0710020E6 +:1032F000FDF72EFA0120CCE72DE9FC5F04460D46D0 +:10330000174698464FF0010A00260CB1012100E053 +:103310000021084640F20621FDF71AFA0FB10121FB +:1033200000E00021084640F20721FDF711FAB8F14C +:10333000000F01DD012100E0002108464FF4027179 +:10334000FDF706FAA16E09B1012100E0002108464F +:1033500040F20921FDF7FCF9D4F868902046FFF708 +:1033600026F92169D1E90401CDE90001D4F810C0A2 +:10337000DCF80CB05B469CE80700D8476520015D8F +:103380002046226B9047064616B90020BDE8FC9FF8 +:103390006720005D022810D1C5F307212046226B6B +:1033A000904706460EB90020F0E7E9B22046226BAE +:1033B00090470646DEB90020E8E7C5F307412046FE +:1033C000226B904706460EB90020DFE7C5F30721C0 +:1033D0002046226B904706460EB90020D6E7E9B298 +:1033E0002046226B904706460EB90020CEE76EE0DD +:1033F00039782046226B904706460EB90020C5E773 +:103400007F1C7120005D002861D16D1CB5FBF9F0B7 +:1034100009FB105000285AD1B8F1000F57DD21697F +:10342000D1E90401CDE90001D4F810C0DCE902B310 +:103430005A46DCE90001D8472046FEF73BFF20460C +:10344000FFF7B5F82169D1E90401CDE90001D4F80D +:1034500010C0DCF80CB05B469CE80700D84765203C +:10346000015D2046226B904706460EB900208DE78D +:103470006720005D022810D1C5F307212046226B8A +:10348000904706460EB9002080E7E9B22046226B3D +:1034900090470646DEB9002078E7C5F3074120468D +:1034A000226B904706460EB900206FE7C5F307214F +:1034B0002046226B904706460EB9002066E7E9B227 +:1034C0002046226B904706460EB900205EE7B8F111 +:1034D0000000A8F101011FFA81F889D12169D1E921 +:1034E0000401CDE90001D4F810C0DCE902B35A466A +:1034F000DCE90001D8472046FEF7DCFE2046FFF756 +:1035000037F8504642E770B504460D4616460CB1F2 +:10351000012100E0002108464FF41E71FDF718F963 +:103520002046FFF744F8324629462046E36998478B +:103530002046FEF7BFFE2046FFF71AF870BD10B513 +:1035400000F004F800F0E8FB10BD000010B54FF4E7 +:10355000806200210448FEF7F0FB4FF48062FF21F7 +:103560000248FEF7EAFB10BD80280020802C0020D6 +:103570002DE9FC4F04460D4616461F46301B01D56B +:10358000A01B00E0301B8146781B01D5E81B00E042 +:10359000781B8246B44201DA012001E04FF0FF308F +:1035A0000190BD4201DA012001E04FF0FF300090B0 +:1035B000A9EB0A000FFA80F821E0294620460B9A71 +:1035C00000F022F8B44202D1BD4200D118E04FEA27 +:1035D00048000FFA80FBCAF10000834506DDA8EB26 +:1035E0000A000FFA80F801982044C4B2CB4506DAED +:1035F00008EB09000FFA80F800982844C5B2DCE710 +:1036000000BFBDE8FC8F0000F0B503461446802BD8 +:1036100001DA402900DBF0BD012C1CD1CD1701EBF4 +:103620005575ED1003EBC515194E755D0A46CE179D +:1036300001EB5676F610A1EBC6070126BE403543D6 +:10364000EEB20846CD1701EB5575ED1003EBC5152D +:103650000F4F7E551AE0CD1701EB5575ED1003EBBA +:10366000C5150B4E755D0A46CE1701EB5676F61062 +:10367000A1EBC6070126BE40B5430846CE1701EBB5 +:103680005676F61003EBC616014FBD5500BFC2E7D4 +:10369000802800203EB504460A25012005F11801C6 +:1036A0000A236C220090184600F01CF801200090BC +:1036B000201DC2B205F11A0107230C2000F0BCFA4C +:1036C000234606A2052101A8FEF712FA01AA02214B +:1036D0002C2000F071FA00F01FFB3EBD253364255D +:1036E000250000002DE9F84104460D4616461F4608 +:1036F000DDF81C80A019C2B22B4629462046CDF821 +:103700000080FFF735FFE819C3B2A019C2B2E8196B +:10371000C1B22046CDF80080FFF72AFFE819C3B2F6 +:10372000224629462046CDF80080FFF721FFE919FF +:10373000CBB2A119CAB2A119C8B22946CDF80080EE +:10374000FFF716FFBDE8F88170B505460C46204628 +:10375000FCF7FCFC00EB40008021A1EB4000C0F333 +:10376000470622462946304600F0F8F900F0D4FA20 +:1037700070BD00002DE9F04F87B005460E4691461A +:103780009A460020039004900590029000248346FE +:1037900000214846FCF7BEFE07D22D222046611CC0 +:1037A000CCB203A90A5489F00049E3494846FCF722 +:1037B000BBFE02D207B0BDE8F08FC4F10800C0B272 +:1037C0000290DE494846FCF7AFFE59D8DB4948462F +:1037D000FCF74DFD8046DA49FCF7BFFC0746FCF7D5 +:1037E00052FEC2B22046611CCCB203A90A5448461C +:1037F000FCF730FE42F2107190FBF1F201FB120077 +:103800004FF47A7190FBF1F03030C2B22046611C67 +:10381000CCB203A90A544846FCF71CFE4FF47A7157 +:1038200090FBF1F201FB1200642190FBF1F03030CB +:10383000C2B22046611CCCB203A90A544846FCF728 +:1038400009FE642190FBF1F201FB12000A2190FBBA +:10385000F1F03030C2B22046611CCCB203A90A5448 +:103860004846FCF7F7FD0A2190FBF1F201FB12003C +:103870003030C2B22046611CCCB203A90A54C2E067 +:10388000B0494846FCF750FE48D84846FCF7E2FDF0 +:1038900042F2107190FBF1F201FB12004FF47A71C9 +:1038A00090FBF1F03030C2B22046611CCCB203A9CB +:1038B0000A544846FCF7CEFD4FF47A7190FBF1F2C2 +:1038C00001FB1200642190FBF1F03030C2B22046BF +:1038D000611CCCB203A90A544846FCF7BBFD642125 +:1038E00090FBF1F201FB12000A2190FBF1F0303065 +:1038F000C2B22046611CCCB203A90A544846FCF768 +:10390000A9FD0A2190FBF1F201FB12003030C2B296 +:103910002046611CCCB203A90A5474E08A49484687 +:10392000FCF702FE34D84846FCF794FD4FF47A7158 +:1039300090FBF1F201FB1200642190FBF1F03030BA +:10394000C2B22046611CCCB203A90A544846FCF717 +:1039500081FD642190FBF1F201FB12000A2190FB32 +:10396000F1F03030C2B22046611CCCB203A90A5437 +:103970004846FCF76FFD0A2190FBF1F201FB1200B3 +:103980003030C2B22046611CCCB203A90A543AE0DE +:103990006E494846FCF7C8FD21D84846FCF75AFD59 +:1039A000642190FBF1F201FB12000A2190FBF1F07F +:1039B0003030C2B22046611CCCB203A90A5448463A +:1039C000FCF748FD0A2190FBF1F201FB12003030B8 +:1039D000C2B22046611CCCB203A90A5413E00021F4 +:1039E0004846FCF7A1FD0ED84846FCF733FD0A21F6 +:1039F00090FBF1F201FB12003030C2B22046611C94 +:103A0000CCB203A90A54BAF1000F6ADD072C68DAB8 +:103A10002E222046611CCCB203A90A544846FCF76A +:103A200019FD8046FCF708FD07464946FCF7EAFB0E +:103A30008146BAF1010F1ED1082C1CDA43494846D1 +:103A4000FCF7E3FB81464846FCF750FD0022404B63 +:103A5000CDE90001FCF749FC0746FCF728FD0A21E7 +:103A600090FBF1F201FB12003030C2B22046611C23 +:103A7000CCB203A90A54BAF1020F32DB082C30DAB7 +:103A800031494846FCF7C1FB81464846FCF7E2FC59 +:103A9000642190FBF1F201FB12000A2190FBF1F08E +:103AA0003030C2B22046611CCCB203A90A54082CA3 +:103AB00017DA4846FCF71AFD0022254BCDE9000134 +:103AC000FCF713FC0746FCF7F2FC0A2190FBF1F22D +:103AD00001FB12003030C2B22046611CCCB203A9F7 +:103AE0000A5422E003A810F80B002038C0B202905C +:103AF000782D02DD0025701CC6B200240DE002986E +:103B000000EB4000134901EB4000005D05EBC611DE +:103B10002144114A5054601CC4B2062CEFDBA81D8E +:103B2000C5B20BF1010000F0FF0B03A810F80B0069 +:103B30000028D7D100BF3DE60000FA4600401C46F1 +:103B40000000404200007A440000C84200002041CA +:103B50000000E03FA647000880280020F0B513468B +:103B60000025002200241EE01E5D203EF5B27E28C6 +:103B700002DD00204E1CF1B200220EE005EB4506EE +:103B80000B4F07EB4606B65C00EBC1171744DFF896 +:103B900024C00CF80760561CF2B2062AEEDB861D24 +:103BA000F0B2661CF4B21E5D002EDDD1F0BD000047 +:103BB000A647000880280020F0B5034614460022DE +:103BC0000020002530E0665D203EF2B2782B02DD59 +:103BD00000234E1CF1B200200CE000EB0216144F43 +:103BE000BE5D03EBC1170744DFF848C00CF807605F +:103BF000461CF0B20828F0DB00200EE000EB0216B5 +:103C000008360B4FBF5D4E1C03EBC6160644DFF8AB +:103C100024C00CF80670461CF0B20828EEDB03F155 +:103C20000806F3B26E1CF5B2665D002ECBD1F0BD76 +:103C3000CE490008802800202DE9F84306460D46AD +:103C400017469846DDF8209000240CE02819C3B2EE +:103C5000F019C2B22819C1B23046CDF80090FFF772 +:103C600087FC601CC4B24445F0DBBDE8F88310B5A6 +:103C7000AE20FEF7CFFE2020FEF7CCFE1020FEF790 +:103C8000C9FEC820FEF7C6FE0020FEF7C3FE1020C6 +:103C9000FEF7C0FE4020FEF7BDFE8120FEF7BAFE13 +:103CA000FF20FEF7B7FEA120FEF7B4FEA620FEF728 +:103CB000B1FEA820FEF7AEFE3F20FEF7ABFEA4202B +:103CC000FEF7A8FED320FEF7A5FE0020FEF7A2FE19 +:103CD000D520FEF79FFEF020FEF79CFED920FEF7D0 +:103CE00099FE2220FEF796FEDA20FEF793FE1220C0 +:103CF000FEF790FEDB20FEF78DFE2020FEF78AFE09 +:103D00008D20FEF787FE1420FEF784FEAF20FEF71D +:103D100081FEFFF714FC10BD70B500242DE00026D5 +:103D200000200DE000EBC4111D4A515C00EBC412F1 +:103D30001C4B9A5C914201D0012603E0411CC8B2A1 +:103D40008028EFDB00BFB6B104F1B001C8B2FEF7C6 +:103D500061FE0120FEF75EFE1020FEF75BFE0025EF +:103D600007E005EBC4110E4A505CFEF770FE681CBC +:103D7000C5B2802DF5DB601CC4B2082CCFDB09482E +:103D800007494FF4806203E011F8013B00F8013B62 +:103D9000131EA2F10104A2B2F6D100BF70BD000053 +:103DA00080280020802C00201FB5044680208DF83C +:103DB000080000208DF809008DF80A008DF80B002E +:103DC00001208DF80C0002A9204600F0F1F8002037 +:103DD000009001908DF808006A4602A9204600F084 +:103DE0007DF89DF8040004EB4401024A02EB8101D6 +:103DF00048601FBD8030002010B50446012C01DA58 +:103E0000012100E0002108464721FCF7A1FC04EB5A +:103E10004400024901EB800010BD0000803000200A +:103E20007FB504460D46012C01DA012100E0002196 +:103E300008463E21FCF78CFC04EB44000C4901EBE6 +:103E4000800600200390D5E90412E8688DE8070099 +:103E5000002095E80E00FEF77BFF3060316809B165 +:103E6000012100E0002108464221FCF771FC7FBDE2 +:103E7000803000207FB50546012D01DA012100E0E8 +:103E8000002108464D21FCF763FC05EB4500124973 +:103E900001EB800600200290039000900190212009 +:103EA0008DF808006A4602A9284600F017F8002499 +:103EB0009DF80100044324029DF8020004432402FB +:103EC0009DF80300044324029DF804000443B460F9 +:103ED000204604B070BD0000803000202DE9FC4178 +:103EE00006460F469046012E01DA012100E000212E +:103EF00008461521FCF72CFC06EB46002B4901EB8C +:103F0000800420680169D1E90401CDE9000120683D +:103F10000569D5F80CC0634695E80700E047002521 +:103F200007E0795D2068026B904708F80500681C7F +:103F300085B2052DF5DB20680169D1E90401CDE9E1 +:103F4000000120680569D5E902C36246D5E9000190 +:103F5000E04700BF00BF00BF20680169D1E904014C +:103F6000CDE9000120680569D5F80CC0634695E8E5 +:103F70000700E047002507E0795D2068026B904765 +:103F800008F80500681C85B2052DF5DB206801697D +:103F9000D1E90401CDE9000120680569D5E902C332 +:103FA0006246D5E90001E047BDE8FC818030002091 +:103FB0002DE9FC4105460F46012D01DA012100E003 +:103FC000002108460721FCF7C3FB05EB4500154916 +:103FD00001EB800420680169D1E90401CDE9000109 +:103FE00020680669D6F80CC0634696E80700E047EB +:103FF000002605E0B95D2068026B9047701C86B210 +:10400000052EF7DB20680169D1E90401CDE9000143 +:1040100020680669D6E902C36246D6E90001E04796 +:10402000BDE8FC818030002010B5044604B910BD05 +:1040300000202085A07D012808D1606A30B1218C44 +:1040400089040A0C0021606AFDF76DFE00BFEEE7EF +:104050002DE9F05F0646884615469946DDE90B7B5B +:10406000DDF828A00EB1012100E000210846292139 +:10407000FCF76EFB4420FDF74FFE04460CB1012116 +:1040800000E0002108462C21FCF762FB0120E075CE +:1040900000202076C4F83C902584C4F840B0A78660 +:1040A000002D0CDD2846FDF737FEE061E16909B11E +:1040B000012100E0002108463E21FCF749FB002FCA +:1040C0000CDD3846FDF728FE2063216B09B1012184 +:1040D00000E0002108464521FCF73AFB84F81580F2 +:1040E00084F82CA066602046BDE8F09F10B5044619 +:1040F00004B910BD002060852046FFF795FF00BF82 +:10410000F7E710B504460CB1012100E00021084694 +:1041100040F2D711FCF71CFB012084F8380021691C +:10412000A068FCF779FB2069082865D2DFE800F079 +:104130006404111E2C3A485600BFA0680168C1F300 +:10414000400121B1A0680221416000BF00BF00BF53 +:1041500053E000BFA0680168C1F3401121B1A0681D +:104160002021416000BF00BF00BF46E000BFA06843 +:104170000168C1F3402129B1A0684FF4007141608A +:1041800000BF00BF00BF38E000BFA0680168C1F3F6 +:10419000403129B1A0684FF40051416000BF00BF19 +:1041A00000BF2AE000BFA0680168C1F3404129B107 +:1041B000A0684FF40031416000BF00BF00BF1CE0A9 +:1041C00000BFA0680168C1F3405129B1A0684FF455 +:1041D0000011416000BF00BF00BF0EE000BFA0683B +:1041E0000168C1F3406129B1A0684FF000714160DE +:1041F00000BF00BF00BF00E000BF00BF606800BF9D +:1042000000BF00BF00F10C0252E8002F42F0400155 +:1042100000F10C0242E80013002BF3D100BF00BFF5 +:104220002069082865D2DFE800F06404111E2C3AEA +:10423000485600BFA0680168C1F3C00121B1A06861 +:104240000821416000BF00BF00BF53E000BFA0686D +:104250000168C1F3C01121B1A0688021416000BF95 +:1042600000BF00BF46E000BFA0680168C1F3C021E5 +:1042700029B1A0684FF40061416000BF00BF00BFDA +:1042800038E000BFA0680168C1F3C03129B1A0685F +:104290004FF40041416000BF00BF00BF2AE000BFF3 +:1042A000A0680168C1F3C04129B1A0684FF40021A2 +:1042B000416000BF00BF00BF1CE000BFA0680168F4 +:1042C000C1F3C05129B1A0684FF40001416000BFA3 +:1042D00000BF00BF0EE000BFA0680168C1F3C0616D +:1042E00029B1A0684FF00061416000BF00BF00BF6E +:1042F00000E000BF00BF10BD0EB51348006808BB4A +:104300000020F0210122114BCDE9002102900A4644 +:1043100001210F48FFF79CFE0B4908600020096847 +:1043200008700C4808490968886005200649096832 +:10433000C860042004490968086100210248006837 +:1043400000F0E2F80EBD00005C0000208B46000883 +:10435000003801400000024038B5044604B938BDB9 +:104360006068C168C1F34011B9B160680168C1F308 +:10437000401191B1608D218C884202DB2046FFF70D +:10438000B5FE61684A68D2B2608D411C6185E16901 +:104390000A5400202076E0753FE06068C168C1F3F0 +:1043A0000011002939D060680168C1F300110029AB +:1043B00033D0607D01282BD1D4E902014A1E514B34 +:1043C0009A5C02445268208C801A6085207DF8B97E +:1043D000D4E90201FCF720FAE06B80B1608D00287F +:1043E0000DDD608D218C884209DC628D2078E36BC5 +:1043F000E1699847228C0021E069FDF794FC228C4A +:10440000D4E90201FCF742FAD4E90201FCF712FAFE +:10441000002060856068FCF70EFD6068C168C1F32C +:10442000801151B16068FCF76CFD30B1206C08B1AF +:10443000206C80476068FCF706FDA07D01285ED1F6 +:1044400001256068C168C1F3002171B1606801682D +:1044500001F0010149B1022560680168009100BFC7 +:104460004168009100BF00BF00BF6068FCF73AFDE3 +:1044700068B16068FCF736FD48B1042560680168E2 +:10448000009100BF4168009100BF00BF00BF60689D +:10449000FCF72DFD60B16068FCF729FD40B1606854 +:1044A0000168009100BF4168009100BF00BF00BFDC +:1044B0006068FCF721FD68B16068FCF71DFD48B13C +:1044C000102560680168009100BF4168009100BF3D +:1044D00000BF00BF012D11D0606A78B1618D491E07 +:1044E00088B2228D616A01EB82014880228D616A67 +:1044F00001F82250218D491C218500BF00BF00BF5B +:104500002DE70000F846000870B504460D46607DB2 +:1045100090B9A575606800BF00BF00BF00F10C0234 +:1045200052E8002F42F0200100F10C0242E8001393 +:10453000002BF3D100BF70E00020A0756068FCF78D +:104540007AFC2169A068FCF767F9D4E90201FCF75D +:1045500063F96068011D0E463246D4E90201FCF79A +:10456000F1F9E269D4E90201FCF7B2F9228CD4E94D +:104570000201FCF78BF9D4E90201FCF769F9D4E9EF +:104580000201FCF757F9606800BF00BF00BF00F1EF +:10459000140252E8002F42F0400100F1140242E8F8 +:1045A0000013002BF3D100BF00BF606800BF00BF45 +:1045B00000BF00F10C0252E8002F42F0100100F1A0 +:1045C0000C0242E80013002BF3D100BF00BF60686B +:1045D000011D0E4632462169A068FCF7B3F9226B33 +:1045E0002169A068FCF774F92169A068FCF730F92B +:1045F000606800BF00BF00BF00F1140252E8002F46 +:1046000042F0800100F1140242E80013002BF3D1C4 +:1046100000BF00BF012084F83800A07D012833D1FD +:10462000606A68B9218C8800FDF776FB6062616A78 +:1046300009B1012100E0002108468221FCF788F839 +:10464000606800BF00BF00BF00F10C0252E8002FFD +:1046500042F4807100F10C0242E80013002BF3D108 +:1046600000BF00BF606800BF00BF00BF00F11402C0 +:1046700052E8002F42F0010100F1140242E8001359 +:10468000002BF3D100BF00BF70BD7047081C304441 +:10469000586C8000000000040404000008000000C2 +:1046A000080000080000000800020406080A0C00C8 +:1046B000010203040506081C3044586C8000000009 +:1046C00000040404000008000000080000080000C6 +:1046D000000800020406080A0C0001020304050693 +:1046E00000000000000000000102030406070809A2 +:1046F0000000000001020304081C3044586C8000D4 +:104700000000000404040000080000000800000885 +:104710000000000800020406080A0C00010203045D +:104720000506081C3044586C800000000004040496 +:104730000000080000000800000800000008000257 +:104740000406080A0C000102030405065F6C697385 +:1047500074006C69737420616C6C20636F6D6D61A3 +:104760006E6400000004000000000000080000006B +:10477000080000000020000000000000081C304479 +:10478000586C8000000000040404000008000000D1 +:10479000080000080000000800020406080A0C00D7 +:1047A0000102030405060000000000000000002FC5 +:1047B000000000000700070000147F147F1400248D +:1047C0002A7F2A12006264081323003649552250BA +:1047D00000000503000000001C22410000004122EF +:1047E0001C000014083E08140008083E08080000D9 +:1047F00000A06000000808080808000060600000D1 +:10480000002010080402003E5149453E0000427F4E +:104810004000004261514946002141454B3100189A +:1048200014127F10002745454539003C4A4949305C +:104830000001710905030036494949360006494916 +:10484000291E000036360000000056360000000821 +:1048500014224100001414141414000041221408FE +:1048600000020151090600324959513E007C1211E3 +:10487000127C007F49494936003E41414122007F78 +:104880004141221C007F49494941007F0909090132 +:10489000003E4149497A007F0808087F0000417FB7 +:1048A0004100002040413F01007F08142241007F69 +:1048B00040404040007F020C027F007F0408107FD0 +:1048C000003E4141413E007F09090906003E415139 +:1048D000215E007F091929460046494949310001F6 +:1048E000017F0101003F4040403F001F2040201F4A +:1048F000003F4038403F006314081463000708700D +:10490000080700615149454300007F4141000055BF +:104910002A552A55000041417F000004020102048B +:104920000040404040400000010204000020545478 +:104930005478007F484444380038444444200038C8 +:104940004444487F00385454541800087E0901023A +:104950000018A4A4A47C007F080404780000447D0F +:104960004000004080847D00007F1028440000004B +:10497000417F4000007C04180478007C080404781F +:1049800000384444443800FC24242418001824240B +:1049900018FC007C08040408004854545420000407 +:1049A0003F444020003C4040207C001C2040201C14 +:1049B000003C4030403C004428102844001CA0A08B +:1049C000A07C004464544C441414141414140000C7 +:1049D00000000000000000000000000000000000D7 +:1049E00000F800000000000000333000000000105C +:1049F0000C06100C0600000000000000000040C083 +:104A00007840C0784000043F04043F040400007074 +:104A100088FC08300000001820FF211E0000F0086C +:104A2000F000E018000000211C031E211E0000F011 +:104A30000888700000001E21232419272110101659 +:104A40000E00000000000000000000000000000058 +:104A500000E01804020000000007182040000002D7 +:104A60000418E0000000004020180700000040404B +:104A700080F0804040000202010F010202000000AD +:104A800000F0000000000101011F01010100000011 +:104A900000000000000080B0700000000000000076 +:104AA00000000000000000010101010101010000FF +:104AB0000000000000000030300000000000000096 +:104AC000000080601804006018060100000000E08B +:104AD00010080810E000000F102020100F00001038 +:104AE00010F8000000000020203F2020000000708F +:104AF0000808088870000030282422213000003087 +:104B00000888884830000018202020110E0000007E +:104B1000C02010F8000000070424243F240000F8FF +:104B20000888880808000019212020110E0000E0E4 +:104B3000108888180000000F112020110E00003886 +:104B40000808C83808000000003F0000000000709E +:104B5000880808887000001C222121221C0000E027 +:104B600010080810E0000000312222110F000000A0 +:104B700000C0C00000000000003030000000000055 +:104B800000800000000000008060000000000000C5 +:104B9000804020100800000102040810200040405E +:104BA00040404040400004040404040404000008A1 +:104BB0001020408000000020100804020100007056 +:104BC00048080808F0000000003036010000C0303E +:104BD000C828E810E0000718272423140B00000061 +:104BE000C038E0000000203C23020227382008F8EB +:104BF000888888700000203F202020110E00C030DF +:104C0000080808083800071820202010080008F8B5 +:104C100008080810E000203F202020100F0008F8AE +:104C20008888E8081000203F20202320180008F87A +:104C30008888E8081000203F200003000000C030F2 +:104C400008080838000007182020221E020008F873 +:104C500008000008F808203F210101213F2000083A +:104C600008F8080800000020203F20200000000075 +:104C70000808F8080800C08080807F00000008F85D +:104C800088C028180800203F20012638200008F896 +:104C9000080000000000203F20202020300008F8FD +:104CA000F800F8F80800203F003F003F200008F817 +:104CB00030C00008F808203F200007183F00E0102F +:104CC00008080810E0000F10202020100F0008F83E +:104CD00008080808F000203F210101010000E01051 +:104CE00008080810E0000F18242438504F0008F876 +:104CF000888888887000203F2000030C30200070D6 +:104D00008808080838000038202121221C001808D3 +:104D100008F8080818000000203F2000000008F8EC +:104D200008000008F808001F202020201F00087835 +:104D3000880000C83808000007380E010000F80895 +:104D400000F80008F800033C0700073C03000818BF +:104D500068808068180820302C03032C3020083825 +:104D6000C800C83808000000203F200000001008DC +:104D70000808C83808002038262120201800000024 +:104D800000FE020202000000007F40404000000CD4 +:104D900030C000000000000000010638C000000222 +:104DA0000202FE000000004040407F0000000000C2 +:104DB00004020202040000000000000000000000E5 +:104DC00000000000000080808080808080800002E1 +:104DD00002040000000000000000000000000000CD +:104DE0008080808000000019242222223F2008F8C1 +:104DF000008080000000003F112020110E00000004 +:104E0000008080800000000E112020201100000092 +:104E100000808088F800000E112020103F20000044 +:104E2000808080800000001F222222221300008048 +:104E300080F0888888180020203F20200000000093 +:104E4000808080808000006B94949493600008F8C8 +:104E5000008080800000203F210000203F20008053 +:104E60009898000000000020203F20200000000053 +:104E700000809898000000C08080807F000008F8C3 +:104E8000000080808000203F24022D302000000898 +:104E900008F8000000000020203F20200000808053 +:104EA000808080808000203F20003F20003F808065 +:104EB000008080800000203F210000203F20000073 +:104EC000808080800000001F202020201F00808024 +:104ED00000808000000080FFA12020110E00000053 +:104EE000008080808000000E112020A0FF80808044 +:104EF00080008080800020203F21200001000000F1 +:104F000080808080800000332424242419000080C5 +:104F100080E0808000000000001F202000008080D2 +:104F2000000000808000001F202020103F20808093 +:104F300080000080808000010E3008060100808023 +:104F40000080008080800F300C030C300F00008048 +:104F50008000808080000020312E0E312000808073 +:104F600080000080808080818E70180601000080A3 +:104F70008080808080000021302C222130000000C1 +:104F80000000807C020200000000003F4040000062 +:104F90000000FF00000000000000FF000000000211 +:104FA000027C800000000040403F0000000000063E +:104FB00001010202040400000000000000000003E0 +:104FC000050911FF118905C300E000F000F8000099 +:104FD00000000000004428FF11AA44000000000067 +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000830138448292927476 +:105020000183000000000000007C44C7017D7D7DFD +:105030007D017D7D7D7D017D7D7D7D01FF00000009 +:10504000000000010001000100010001000100005A +:10505000000000000000000101000000000000004E +:105060000000000000000000000000000000000040 +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000000000020 +:10509000000000000000000001010000000000000E +:1050A00001010000000000000000000101010101F9 +:1050B00001010101010101010101010101000000E3 +:1050C00000000000000000404040404000006D6DC6 +:1050D0006D6D6D00006060606060000040404040A9 +:1050E0004000000000000000000000000000000080 +:1050F00000000000000000000000000000000000B0 +:10510000000000000000000000000000000000009F +:10511000000000000000000000000000000000008F +:10512000000000000000000000000000000000007F +:10513000000000000000000000000000000000006F +:1051400000000000000000DBDBDBDBDB0000DBDB62 +:10515000DBDBDB0000DBDBDBDBDB0000DBDBDBDB0B +:10516000DB0000DADADADADA0000D8D8D8D8D800EA +:1051700000C0C0C0C0C00000C0C0C0C0C00000C0EF +:10518000C0C0C0C00000C0C0C0C0C00000808080DF +:10519000808000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000060606060600000606B5 +:1051D0000606060000060606060600000606060687 +:1051E000060000060606E66620000606860606009D +:1051F000000606060686000006060606060000866D +:105200008686868680808686068686C0C086868656 +:105210000606D030760606060600000606060606D6 +:105220000000060606060600000606060606000042 +:105230000606060606000000000000000000000050 +:10524000000000000000000000000000000000005E +:10525000000000000000000000000000000000004E +:105260000000000000000000601C00FE00010200C1 +:10527000C41820029E63B20E00FF8181FF000080EF +:1052800040300F00000000FF0023EAAABFAAEA0393 +:105290003F00FF00000000000000000000000000D0 +:1052A00000000000000000000000000000000000FE +:1052B00000000000000000000000000000000000EE +:1052C00000808080000000000080808000000000DE +:1052D00000000000000000000000000000000000CE +:1052E0000000000000000E0C080000010101010197 +:1052F0000000000100000001008180808180818029 +:105300008080800101010100000001000000010017 +:105310000101090C0E000000000000000000000068 +:10532000000000000000C0C0C0C0C0C0C0C0C0C0FD +:10533000C0C0C0C0C0C0C0C0C0C0C0C0C000001E8F +:1053400021404050215E001E21404050215E00005F +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:10537000000000000000000000FFFFC1C1FFFFC1EE +:10538000C1FFFF000000000000000000000000005E +:10539000000000000000000000000000000000000D +:1053A000000000000000FFFF80FCF3EFF3FC80FF33 +:1053B00080EEEEEEF5FBFF9CBEB6B688FF00000067 +:1053C000E05300080000002070000000C81B000827 +:1053D000505400087000002020340000D81B000842 +:1053E0000024F400000000000000000000000000A5 +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000E92B000870 +:10542000D52C00088000002000C001208020002032 +:105430003800002000000000000000000000000014 +:105440004C47000852470008C6E533B4F51C000875 :04000005080000ED02 :00000001FF diff --git a/Public/STM32_PID_电机.pdf b/Public/STM32_PID_电机.pdf deleted file mode 100644 index f98f14f..0000000 Binary files a/Public/STM32_PID_电机.pdf and /dev/null differ diff --git a/Public/TMC2240_datasheet_rev1_20231.pdf b/Public/TMC2240_datasheet_rev1_20231.pdf new file mode 100644 index 0000000..8477189 Binary files /dev/null and b/Public/TMC2240_datasheet_rev1_20231.pdf differ diff --git a/User/application/app.c b/User/application/app.c index 529428f..933b385 100644 --- a/User/application/app.c +++ b/User/application/app.c @@ -13,14 +13,8 @@ static uint8_t business_inspection(struct flow *fl) FL_HEAD(fl); for (;;) { - + tmc2240_position_read(TMC2240_1); FL_LOCK_DELAY(fl, FL_CLOCK_SEC); - // ssd1306_clear_buffer(); - // ssd1306_f8x16_string(0, 0, " PERCENT:"); - // ssd1306_f8x16_number(88, 0, 100, 0); - // ssd1306_f8x16_string(0, 2, " CUR:"); - // ssd1306_f8x16_number(48, 2, 0, 0); - // ssd1306_update_screen(); } FL_TAIL(fl); } diff --git a/User/application/app.h b/User/application/app.h index 8ff7a13..7cbd894 100644 --- a/User/application/app.h +++ b/User/application/app.h @@ -11,8 +11,6 @@ typedef struct { - float32 pwm_percent; - uint32_t pwm_feq; } app_t; extern app_t app; diff --git a/User/board/board.c b/User/board/board.c index 7c203f4..f178a13 100644 --- a/User/board/board.c +++ b/User/board/board.c @@ -1,4 +1,5 @@ #include "board.h" + uart_t *uart = NULL; static void uart_rx_cb(uint8_t uart_index, uint8_t *data, uint16_t len) @@ -39,4 +40,18 @@ void board_init(void) { uart_init(); ssd1306_init(); + + { + GPIO_RESET(TMC2240_EN_GPIO_Port, TMC2240_EN_Pin); + spi_gpio_group_t gpios; + gpios.cs = gpio_create(TMC2240_CS_GPIO_Port, TMC2240_CS_Pin); + gpios.mosi = gpio_create(TMC2240_MOSI_GPIO_Port, TMC2240_MOSI_Pin); + gpios.sck = gpio_create(TMC2240_SCK_GPIO_Port, TMC2240_SCK_Pin); + gpios.miso = gpio_create(TMC2240_MISO_GPIO_Port, TMC2240_MISO_Pin); + gpios.rst = gpio_create(NULL, 0); + gpios.rdy = gpio_create(NULL, 0); + tmc2240_init(TMC2240_1, &gpios); + tmc2240_get(TMC2240_1)->spi->interface.hardware_enable(tmc2240_get(TMC2240_1)->spi, SPI1); + tmc2240_config(TMC2240_1); + } } diff --git a/User/board/board.h b/User/board/board.h index 1568bba..9e0166e 100644 --- a/User/board/board.h +++ b/User/board/board.h @@ -2,7 +2,7 @@ #define __BOARD_H__ #include "lib.h" #include "ssd1306_oled.h" - +#include "tmc2240.h" #define UART_RXSIZE (240u) // 接收240个字节 #define UART_TXSIZE (240u) // 发送240个字节 @@ -11,6 +11,11 @@ #define PWM_CHANNEL LL_TIM_CHANNEL_CH2 #define WORK_TIM TIM3 +typedef struct +{ + /* data */ +} motor_t; + extern uart_t *uart; void board_init(void); diff --git a/User/lib/driver/tmc2240.c b/User/lib/driver/tmc2240.c new file mode 100644 index 0000000..d4e92fb --- /dev/null +++ b/User/lib/driver/tmc2240.c @@ -0,0 +1,96 @@ +#include "tmc2240.h" + +tmc2240_t _tmc2240[TMC2240_MAX]; + +static void tmc2240_write(tmc2240_index_e index, uint8_t *data) +{ + DBG_ASSERT(index < TMC2240_MAX __DBG_LINE); + tmc2240_t *tmc = &_tmc2240[index]; + + tmc->spi->gpios.cs->reset(*tmc->spi->gpios.cs); + for (uint16_t i = 0; i < 5; i++) + { + tmc->spi->interface.u.normal.spi_send(tmc->spi, data[i]); + } + + tmc->spi->gpios.cs->set(*tmc->spi->gpios.cs); +} + +static void tmc2240_read(tmc2240_index_e index, uint8_t *wdata, uint8_t *rdata) +{ + DBG_ASSERT(index < TMC2240_MAX __DBG_LINE); + tmc2240_t *tmc = &_tmc2240[index]; + + tmc->spi->gpios.cs->reset(*tmc->spi->gpios.cs); + for (uint16_t i = 0; i < 5; i++) // 循环读取数据 + { + rdata[i] = tmc->spi->interface.u.normal.spi_send(tmc->spi, wdata[i]); + } + tmc->spi->gpios.cs->set(*tmc->spi->gpios.cs); + + __NOP(); + __NOP(); + __NOP(); + + tmc->spi->gpios.cs->reset(*tmc->spi->gpios.cs); + for (uint16_t i = 0; i < 5; i++) // 循环读取数据 + { + rdata[i] = tmc->spi->interface.u.normal.spi_send(tmc->spi, wdata[i]); + } + tmc->spi->gpios.cs->set(*tmc->spi->gpios.cs); +} + +void tmc2240_config(tmc2240_index_e index) +{ + uint8_t wdata[5]; + wdata[0] = 0x80 | TMC2240_REG_GCONF; // 写入 GCONF 寄存器 + wdata[1] = 0x00; + wdata[2] = 0x00; + wdata[3] = 0x00; + wdata[4] = 0x01; + tmc2240_write(index, wdata); + + // 读取 GCONF 寄存器 + uint8_t rdata[5] = {0}; + wdata[0] = TMC2240_REG_GCONF; + tmc2240_read(index, wdata, rdata); + _tmc2240[index].data.gconf = rdata[4]; +} + +void tmc2240_init(tmc2240_index_e index, spi_gpio_group_t *gpios) +{ + DBG_ASSERT(index < TMC2240_MAX __DBG_LINE); + tmc2240_t *tmc = &_tmc2240[index]; + + tmc->spi = spi_create(SPI_TYPE_NORMAL, *gpios, 0); + DBG_ASSERT(tmc->spi != NULL __DBG_LINE); +} + +tmc2240_t *tmc2240_get(tmc2240_index_e index) +{ + DBG_ASSERT(index < TMC2240_MAX __DBG_LINE); + return &_tmc2240[index]; +} + +int32_t tmc2240_position_read(tmc2240_index_e index) +{ + DBG_ASSERT(index < TMC2240_MAX __DBG_LINE); + tmc2240_t *tmc = &_tmc2240[index]; + uint8_t wdata[5] = {0}; + uint8_t rdata[5] = {0}; + + wdata[0] = 0x21; // XACTUAL register address + tmc2240_read(index, wdata, rdata); + + int32_t response = 0; + + response |= (rdata[1]); + response <<= 8; + response |= (rdata[2]); + response <<= 8; + response |= (rdata[3]); + response <<= 8; + response |= (rdata[4]); + tmc->data.position = response; + return response; +} diff --git a/User/lib/driver/tmc2240.h b/User/lib/driver/tmc2240.h new file mode 100644 index 0000000..2ccca82 --- /dev/null +++ b/User/lib/driver/tmc2240.h @@ -0,0 +1,28 @@ +#ifndef __TMC2240_H +#define __TMC2240_H +#include "main.h" +#include "spis.h" +#define TMC2240_REG_GCONF 0x00 + +typedef enum +{ + TMC2240_1, + TMC2240_MAX, +} tmc2240_index_e; + +typedef struct +{ + spi_t *spi; + struct + { + int32_t gconf; + int32_t position; + } data; +} tmc2240_t; + +void tmc2240_init(tmc2240_index_e index, spi_gpio_group_t *gpios); +void tmc2240_config(tmc2240_index_e index); +tmc2240_t *tmc2240_get(tmc2240_index_e index); + +int32_t tmc2240_position_read(tmc2240_index_e index); +#endif // __TMC2240_H diff --git a/User/system/bsp/bsp.h b/User/system/bsp/bsp.h index e506816..b0b3989 100644 --- a/User/system/bsp/bsp.h +++ b/User/system/bsp/bsp.h @@ -19,10 +19,9 @@ #include "tims.h" #include "pwms.h" #include "uarts.h" -// #include "eeprom.h" -// #include "spis.h" +#include "spis.h" #include "i2cs.h" - +// #include "eeprom.h" ///< 定义回调函数类型 typedef void (*pvd_irq_handle_cb)(void); diff --git a/User/system/bsp/gpios.h b/User/system/bsp/gpios.h index c7ca144..4433c62 100644 --- a/User/system/bsp/gpios.h +++ b/User/system/bsp/gpios.h @@ -14,6 +14,7 @@ #define __GPIOS_H__ #include "lib.h" #include "main.h" + /** * @brief Set the GPIO pin to high. * diff --git a/User/system/bsp/i2cs.h b/User/system/bsp/i2cs.h index bf83806..4f8d35a 100644 --- a/User/system/bsp/i2cs.h +++ b/User/system/bsp/i2cs.h @@ -20,7 +20,7 @@ * @file i2cs.h * @brief Header file containing the definition of the I2C slave (I2CS) structure and related functions. */ - +typedef struct GPIO gpio_t; typedef struct I2CS i2c_t; typedef void i2cs_dma_callback(i2c_t *handle); diff --git a/User/system/bsp/spis.c b/User/system/bsp/spis.c index 15bf791..4f57581 100644 --- a/User/system/bsp/spis.c +++ b/User/system/bsp/spis.c @@ -673,7 +673,7 @@ static BOOL spi_read(spi_t *handle, uint32_t read_addr, uint8_t *data, uint16_t return FALSE; } } - else + else if (handle->cfg.address_bytes == 3) { cnt = handle->interface.u.normal.spi_send(handle, read_addr >> 16); if (cnt == 0) @@ -691,6 +691,10 @@ static BOOL spi_read(spi_t *handle, uint32_t read_addr, uint8_t *data, uint16_t return FALSE; } } + else + { + DBG_ASSERT(FALSE __DBG_LINE); + } for (uint16_t i = 0; i < length; i++) // 循环读取数据 { data[i] = handle->interface.u.normal.spi_send(handle, handle->cfg.dummy_byte); // 发送空字节,读取实际数据 diff --git a/User/system/bsp/spis.h b/User/system/bsp/spis.h index ac2d77e..fa18999 100644 --- a/User/system/bsp/spis.h +++ b/User/system/bsp/spis.h @@ -19,6 +19,7 @@ #define SPI_ENABLE(SPIX) LL_SPI_Enable(SPIX) +typedef struct GPIO gpio_t; typedef struct SPIS spi_t; typedef void spis_dma_callback(spi_t *handle); diff --git a/motor.ioc b/motor.ioc index 533bdec..01bc6ad 100644 --- a/motor.ioc +++ b/motor.ioc @@ -31,29 +31,35 @@ Mcu.Family=STM32F1 Mcu.IP0=DMA Mcu.IP1=NVIC Mcu.IP2=RCC -Mcu.IP3=SYS -Mcu.IP4=TIM1 -Mcu.IP5=TIM2 -Mcu.IP6=TIM3 -Mcu.IP7=USART1 -Mcu.IPNb=8 +Mcu.IP3=SPI1 +Mcu.IP4=SYS +Mcu.IP5=TIM1 +Mcu.IP6=TIM2 +Mcu.IP7=TIM3 +Mcu.IP8=USART1 +Mcu.IPNb=9 Mcu.Name=STM32F103C(8-B)Tx Mcu.Package=LQFP48 Mcu.Pin0=PC13-TAMPER-RTC Mcu.Pin1=PD0-OSC_IN -Mcu.Pin10=VP_SYS_VS_Systick -Mcu.Pin11=VP_TIM1_VS_ClockSourceINT -Mcu.Pin12=VP_TIM2_VS_ClockSourceINT -Mcu.Pin13=VP_TIM3_VS_ClockSourceINT +Mcu.Pin10=PB13 +Mcu.Pin11=PA9 +Mcu.Pin12=PA10 +Mcu.Pin13=PA13 +Mcu.Pin14=PA14 +Mcu.Pin15=VP_SYS_VS_Systick +Mcu.Pin16=VP_TIM1_VS_ClockSourceINT +Mcu.Pin17=VP_TIM2_VS_ClockSourceINT +Mcu.Pin18=VP_TIM3_VS_ClockSourceINT Mcu.Pin2=PD1-OSC_OUT Mcu.Pin3=PA1 -Mcu.Pin4=PB12 -Mcu.Pin5=PB13 -Mcu.Pin6=PA9 -Mcu.Pin7=PA10 -Mcu.Pin8=PA13 -Mcu.Pin9=PA14 -Mcu.PinsNb=14 +Mcu.Pin4=PA3 +Mcu.Pin5=PA4 +Mcu.Pin6=PA5 +Mcu.Pin7=PA6 +Mcu.Pin8=PA7 +Mcu.Pin9=PB12 +Mcu.PinsNb=19 Mcu.ThirdParty0=RealThread.RT-Thread.3.1.5 Mcu.ThirdPartyNb=1 Mcu.UserConstants= @@ -83,6 +89,24 @@ PA13.Mode=Serial_Wire PA13.Signal=SYS_JTMS-SWDIO PA14.Mode=Serial_Wire PA14.Signal=SYS_JTCK-SWCLK +PA3.GPIOParameters=GPIO_Label +PA3.GPIO_Label=TMC2240_EN +PA3.Signal=GPIO_Output +PA4.GPIOParameters=GPIO_Label +PA4.GPIO_Label=TMC2240_CS +PA4.Signal=GPIO_Output +PA5.GPIOParameters=GPIO_Label +PA5.GPIO_Label=TMC2240_SCK +PA5.Mode=Full_Duplex_Master +PA5.Signal=SPI1_SCK +PA6.GPIOParameters=GPIO_Label +PA6.GPIO_Label=TMC2240_MISO +PA6.Mode=Full_Duplex_Master +PA6.Signal=SPI1_MISO +PA7.GPIOParameters=GPIO_Label +PA7.GPIO_Label=TMC2240_MOSI +PA7.Mode=Full_Duplex_Master +PA7.Signal=SPI1_MOSI PA9.Mode=Asynchronous PA9.Signal=USART1_TX PB12.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP @@ -137,7 +161,7 @@ ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true,3-MX_DMA_Init-DMA-false-LL-true,4-MX_TIM2_Init-TIM2-false-LL-true,5-MX_USART1_UART_Init-USART1-false-LL-true,6-MX_TIM1_Init-TIM1-false-LL-true,7-MX_TIM3_Init-TIM3-false-LL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true,3-MX_DMA_Init-DMA-false-LL-true,4-MX_TIM2_Init-TIM2-false-LL-true,5-MX_USART1_UART_Init-USART1-false-LL-true,6-MX_TIM1_Init-TIM1-false-LL-true,7-MX_TIM3_Init-TIM3-false-LL-true,8-MX_SPI1_Init-SPI1-false-LL-true RCC.ADCFreqValue=36000000 RCC.AHBFreq_Value=72000000 RCC.APB1CLKDivider=RCC_HCLK_DIV2 @@ -169,6 +193,14 @@ RealThread.RT-Thread.3.1.5.RT_USING_DEVICE=1 RealThread.RT-Thread.3.1.5_SwParameter=RTOSJjkernel\:true;RTOSJjshell\:true;RTOSJjdevice\:true; SH.S_TIM2_CH2.0=TIM2_CH2,PWM Generation2 CH2 SH.S_TIM2_CH2.ConfNb=1 +SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_32 +SPI1.CLKPhase=SPI_PHASE_2EDGE +SPI1.CLKPolarity=SPI_POLARITY_HIGH +SPI1.CalculateBaudRate=2.25 MBits/s +SPI1.Direction=SPI_DIRECTION_2LINES +SPI1.IPParameters=VirtualType,Mode,Direction,BaudRatePrescaler,CalculateBaudRate,CLKPolarity,CLKPhase +SPI1.Mode=SPI_MODE_MASTER +SPI1.VirtualType=VM_MASTER TIM1.IPParameters=Prescaler,Period TIM1.Period=99 TIM1.Prescaler=7199