interface and drivers

This commit is contained in:
2023-09-27 20:13:23 +02:00
parent 4829b04024
commit 2fbb7b4b91
19 changed files with 1023 additions and 49 deletions

File diff suppressed because one or more lines are too long

View File

@@ -12,11 +12,14 @@
"${workspaceFolder}/app/drivers/led", "${workspaceFolder}/app/drivers/led",
"${workspaceFolder}/app/drivers/mcp41x", "${workspaceFolder}/app/drivers/mcp41x",
"${workspaceFolder}/app/drivers/st7565", "${workspaceFolder}/app/drivers/st7565",
"${workspaceFolder}/app/drivers/mcu_cs",
"${workspaceFolder}/app/drivers/utils/printf", "${workspaceFolder}/app/drivers/utils/printf",
"${workspaceFolder}/app/drivers/utils/rtt", "${workspaceFolder}/app/drivers/utils/rtt",
"${workspaceFolder}/app/drivers/utils/spi_cs", "${workspaceFolder}/app/drivers/utils/spi_cs",
"${workspaceFolder}/app/drivers/utils/ulog", "${workspaceFolder}/app/drivers/utils/ulog",
"${workspaceFolder}/app/display" "${workspaceFolder}/app/display",
"${workspaceFolder}/app/bitmaps",
"${workspaceFolder}/app/core"
], ],
"defines": [ "defines": [
"_DEBUG", "_DEBUG",

7
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,7 @@
{
"files.associations": {
"main.h": "c",
"st7565.h": "c",
"display_gfx.h": "c"
}
}

View File

@@ -61,8 +61,8 @@ void Error_Handler(void);
#define B1_GPIO_Port GPIOC #define B1_GPIO_Port GPIOC
#define BTN1_Pin GPIO_PIN_0 #define BTN1_Pin GPIO_PIN_0
#define BTN1_GPIO_Port GPIOA #define BTN1_GPIO_Port GPIOA
#define BTN1A1_Pin GPIO_PIN_1 #define BTN2_Pin GPIO_PIN_1
#define BTN1A1_GPIO_Port GPIOA #define BTN2_GPIO_Port GPIOA
#define USART_TX_Pin GPIO_PIN_2 #define USART_TX_Pin GPIO_PIN_2
#define USART_TX_GPIO_Port GPIOA #define USART_TX_GPIO_Port GPIOA
#define USART_RX_Pin GPIO_PIN_3 #define USART_RX_Pin GPIO_PIN_3

View File

@@ -67,7 +67,7 @@ void MX_GPIO_Init(void)
HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pins : PAPin PAPin PAPin */ /*Configure GPIO pins : PAPin PAPin PAPin */
GPIO_InitStruct.Pin = BTN1_Pin|BTN1A1_Pin|BTN_CH1_Pin; GPIO_InitStruct.Pin = BTN1_Pin|BTN2_Pin|BTN_CH1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

View File

@@ -1,20 +1,20 @@
/* USER CODE BEGIN Header */ /* USER CODE BEGIN Header */
/** /**
****************************************************************************** ******************************************************************************
* @file : main.c * @file : main.c
* @brief : Main program body * @brief : Main program body
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* Copyright (c) 2023 STMicroelectronics. * Copyright (c) 2023 STMicroelectronics.
* All rights reserved. * All rights reserved.
* *
* This software is licensed under terms that can be found in the LICENSE file * This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component. * in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS. * If no LICENSE file comes with this software, it is provided AS-IS.
* *
****************************************************************************** ******************************************************************************
*/ */
/* USER CODE END Header */ /* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
#include "main.h" #include "main.h"
@@ -26,7 +26,7 @@
/* Private includes ----------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */ /* USER CODE BEGIN Includes */
#include "app.h"
/* USER CODE END Includes */ /* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/
@@ -94,17 +94,18 @@ int main(void)
MX_USART2_UART_Init(); MX_USART2_UART_Init();
MX_TIM3_Init(); MX_TIM3_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
setup();
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Infinite loop */ /* Infinite loop */
/* USER CODE BEGIN WHILE */ /* USER CODE BEGIN WHILE */
while (1) while (1)
{ {
loop();
/* USER CODE END WHILE */ /* USER CODE END WHILE */
/* USER CODE BEGIN 3 */ /* USER CODE BEGIN 3 */
} }
/* USER CODE END 3 */ /* USER CODE END 3 */
} }
@@ -167,11 +168,11 @@ void SystemClock_Config(void)
void Error_Handler(void) void Error_Handler(void)
{ {
/* USER CODE BEGIN Error_Handler_Debug */ /* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */ /* User can add his own implementation to report the HAL error return state */
__disable_irq(); __disable_irq();
while (1) while (1)
{ {
} }
/* USER CODE END Error_Handler_Debug */ /* USER CODE END Error_Handler_Debug */
} }
@@ -186,8 +187,8 @@ void Error_Handler(void)
void assert_failed(uint8_t *file, uint32_t line) void assert_failed(uint8_t *file, uint32_t line)
{ {
/* USER CODE BEGIN 6 */ /* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number, /* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */ /* USER CODE END 6 */
} }
#endif /* USE_FULL_ASSERT */ #endif /* USE_FULL_ASSERT */

View File

@@ -75,11 +75,11 @@ void MX_SPI3_Init(void)
hspi3.Instance = SPI3; hspi3.Instance = SPI3;
hspi3.Init.Mode = SPI_MODE_MASTER; hspi3.Init.Mode = SPI_MODE_MASTER;
hspi3.Init.Direction = SPI_DIRECTION_1LINE; hspi3.Init.Direction = SPI_DIRECTION_1LINE;
hspi3.Init.DataSize = SPI_DATASIZE_4BIT; hspi3.Init.DataSize = SPI_DATASIZE_8BIT;
hspi3.Init.CLKPolarity = SPI_POLARITY_LOW; hspi3.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi3.Init.CLKPhase = SPI_PHASE_1EDGE; hspi3.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi3.Init.NSS = SPI_NSS_SOFT; hspi3.Init.NSS = SPI_NSS_SOFT;
hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi3.Init.TIMode = SPI_TIMODE_DISABLE; hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;

View File

@@ -1,5 +1,5 @@
########################################################################################################################## ##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [3.17.1] date: [Mon Sep 25 20:07:11 CEST 2023] # File automatically-generated by tool: [projectgenerator] version: [3.17.1] date: [Tue Sep 26 19:16:56 CEST 2023]
########################################################################################################################## ##########################################################################################################################
# ------------------------------------------------ # ------------------------------------------------
@@ -65,19 +65,23 @@ Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim.c \
Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim_ex.c \ Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_tim_ex.c \
Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_uart.c \ Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_uart.c \
Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_uart_ex.c \ Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal_uart_ex.c \
Core/Src/system_stm32f3xx.c Core/Src/system_stm32f3xx.c
C_SOURCES += app/drivers/ad9833/ad9833.c C_SOURCES += app/drivers/ad9833/ad9833.c
C_SOURCES += app/drivers/hw_button/hw_button.c C_SOURCES += app/drivers/hw_button/hw_button.c
C_SOURCES += app/drivers/led/led.c C_SOURCES += app/drivers/led/led.c
C_SOURCES += app/drivers/mcp41x/mcp41x.c C_SOURCES += app/drivers/mcp41x/mcp41x.c
C_SOURCES += app/drivers/st7565/st7565.c C_SOURCES += app/drivers/st7565/st7565.c
C_SOURCES += app/drivers/mcu_cs/mcu_cs.c
C_SOURCES += app/drivers/utils/printf/printf.c C_SOURCES += app/drivers/utils/printf/printf.c
C_SOURCES += app/drivers/utils/rtt/SEGGER_RTT.c C_SOURCES += app/drivers/utils/rtt/SEGGER_RTT.c
C_SOURCES += app/drivers/utils/rtt/SEGGER_RTT_printf.c C_SOURCES += app/drivers/utils/rtt/SEGGER_RTT_printf.c
C_SOURCES += app/drivers/utils/ulog/ulog.c C_SOURCES += app/drivers/utils/ulog/ulog.c
C_SOURCES += app/display/display_gfx.c C_SOURCES += app/display/display_gfx.c
C_SOURCES += app/display/font_gfx.c C_SOURCES += app/display/font_gfx.c
C_SOURCES += app/bitmaps/bitmap_font_5x7.c
C_SOURCES += app/core/bottom_button.c
C_SOURCES += app/core/app.c
# ASM sources # ASM sources
ASM_SOURCES = \ ASM_SOURCES = \
@@ -144,11 +148,14 @@ C_INCLUDES += -Iapp/drivers/hw_button
C_INCLUDES += -Iapp/drivers/led C_INCLUDES += -Iapp/drivers/led
C_INCLUDES += -Iapp/drivers/mcp41x C_INCLUDES += -Iapp/drivers/mcp41x
C_INCLUDES += -Iapp/drivers/st7565 C_INCLUDES += -Iapp/drivers/st7565
C_INCLUDES += -Iapp/drivers/mcu_cs
C_INCLUDES += -Iapp/drivers/utils/printf C_INCLUDES += -Iapp/drivers/utils/printf
C_INCLUDES += -Iapp/drivers/utils/rtt C_INCLUDES += -Iapp/drivers/utils/rtt
C_INCLUDES += -Iapp/drivers/utils/spi_cs C_INCLUDES += -Iapp/drivers/utils/spi_cs
C_INCLUDES += -Iapp/drivers/utils/ulog C_INCLUDES += -Iapp/drivers/utils/ulog
C_INCLUDES += -Iapp/display C_INCLUDES += -Iapp/display
C_INCLUDES += -Iapp/bitmaps
C_INCLUDES += -Iapp/core
# compile gcc flags # compile gcc flags
ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
@@ -219,4 +226,4 @@ clean:
####################################### #######################################
-include $(wildcard $(BUILD_DIR)/*.d) -include $(wildcard $(BUILD_DIR)/*.d)
# *** EOF *** # *** EOF ***

View File

@@ -0,0 +1,239 @@
#include "main.h"
#include "bitmap_disp_buttons.h"
// clang-format off
const uint8_t btn_fre[] = {
// res: 25x11 - 50 bytes
0xFC,0x02,0x01,0x01,0xFD,0x25,0x25,0x25,0x05,0x01,0xFD,0x25,0x65,0xA5,0x19,0x01,
0xFD,0x25,0x25,0x25,0x05,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFD,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFD,0xFC,0xFC,0xFC,0xFD,0xFC,0xFD,0xFD,0xFD,0xFD,0xFD,0xFC,0xFC,
0xFA,0xF9,
};
const uint8_t btn_fre_inverse[] = {
// res: 25x11 - 50 bytes
0xFC,0xFE,0xFF,0xFF,0x03,0xDB,0xDB,0xDB,0xFB,0xFF,0x03,0xDB,0x9B,0x5B,0xE7,0xFF,
0x03,0xDB,0xDB,0xDB,0xFB,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFE,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,0xFF,
0xFB,0xF9,
};
const uint8_t btn_amp[] = {
// res: 25x11 - 50 bytes
0xFC,0x02,0x01,0x01,0xF1,0x49,0x45,0x49,0xF1,0x01,0xFD,0x09,0x11,0x09,0xFD,0x01,
0xFD,0x25,0x25,0x25,0x19,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFD,0xFC,0xFC,
0xFC,0xFD,0xFC,0xFD,0xFC,0xFC,0xFC,0xFD,0xFC,0xFD,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFA,0xF9,
};
const uint8_t btn_amp_inverse[] = {
// res: 25x11 - 50 bytes
0xFC,0xFE,0xFF,0xFF,0x0F,0xB7,0xBB,0xB7,0x0F,0xFF,0x03,0xF7,0xEF,0xF7,0x03,0xFF,
0x03,0xDB,0xDB,0xDB,0xE7,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFE,0xFF,0xFF,
0xFF,0xFE,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFB,0xF9,
};
const uint8_t btn_off[] = {
// res: 25x11 - 50 bytes
0xFC,0x02,0x01,0x01,0xF9,0x05,0x05,0x05,0xF9,0x01,0xFD,0x25,0x25,0x25,0x05,0x01,
0xFD,0x25,0x25,0x25,0x05,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFD,0xFD,
0xFD,0xFC,0xFC,0xFD,0xFC,0xFC,0xFC,0xFC,0xFC,0xFD,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFA,0xF9,
};
const uint8_t btn_off_inverse[] = {
// res: 25x11 - 50 bytes
0xFC,0xFE,0xFF,0xFF,0x07,0xFB,0xFB,0xFB,0x07,0xFF,0x03,0xDB,0xDB,0xDB,0xFB,0xFF,
0x03,0xDB,0xDB,0xDB,0xFB,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFE,0xFE,
0xFE,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFB,0xF9,
};
const uint8_t btn_pha[] = {
// res: 25x11 - 50 bytes
0xFC,0x02,0x01,0x01,0xFD,0x25,0x25,0x25,0x19,0x01,0xFD,0x21,0x21,0x21,0xFD,0x01,
0xF1,0x49,0x45,0x49,0xF1,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFD,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFD,0xFC,0xFC,0xFC,0xFD,0xFC,0xFD,0xFC,0xFC,0xFC,0xFD,0xFC,0xFC,
0xFA,0xF9,
};
const uint8_t btn_pha_inverse[] = {
// res: 25x11 - 50 bytes
0xFC,0xFE,0xFF,0xFF,0x03,0xDB,0xDB,0xDB,0xE7,0xFF,0x03,0xDF,0xDF,0xDF,0x03,0xFF,
0x0F,0xB7,0xBB,0xB7,0x0F,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFE,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,
0xFB,0xF9,
};
const uint8_t btn_wav_noraml[] = {
// res: 25x11 - 50 bytes
0x3F,0x40,0x80,0x80,0xBF,0x80,0x87,0x80,0xBF,0x80,0x8F,0x92,0xA2,0x92,0x8F,0x80,
0xBE,0x81,0x80,0x81,0xBE,0x80,0x80,0x40,0x3F,0x9F,0x5F,0x3F,0x3F,0x3F,0xBF,0x3F,
0xBF,0x3F,0x3F,0xBF,0x3F,0x3F,0x3F,0xBF,0x3F,0x3F,0x3F,0xBF,0x3F,0x3F,0x3F,0x3F,
0x5F,0x9F,
};
const uint8_t btn_wav_inverse[] = {
// res: 25x11 - 50 bytes
0x3F,0x7F,0xFF,0xFF,0xC0,0xFF,0xF8,0xFF,0xC0,0xFF,0xF0,0xED,0xDD,0xED,0xF0,0xFF,
0xC1,0xFE,0xFF,0xFE,0xC1,0xFF,0xFF,0x7F,0x3F,0x9F,0xDF,0xFF,0xFF,0xFF,0x7F,0xFF,
0x7F,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,
0xDF,0x9F,
};
const uint8_t btn_wav_short[] = {
// res: 24x11 - 48 bytes
0xFC,0x02,0x01,0x01,0xFD,0x01,0xE1,0x01,0xFD,0x01,0xF1,0x49,0x45,0x49,0xF1,0x01,
0x7D,0x81,0x01,0x81,0x7D,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFD,0xFC,0xFD,
0xFC,0xFC,0xFD,0xFC,0xFC,0xFC,0xFD,0xFC,0xFC,0xFC,0xFD,0xFC,0xFC,0xFC,0xFA,0xF9,
};
const uint8_t btn_wav_inverse_short[] = {
// res: 24x11 - 48 bytes
0xFC,0xFE,0xFF,0xFF,0x03,0xFF,0x1F,0xFF,0x03,0xFF,0x0F,0xB7,0xBB,0xB7,0x0F,0xFF,
0x83,0x7F,0xFF,0x7F,0x83,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE,
0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFB,0xF9,
};
const uint8_t btn_back_short[] = {
// res: 24x11 - 48 bytes
0xFC,0x02,0x01,0x01,0x01,0x01,0x01,0x21,0x71,0xA9,0x21,0x21,0x21,0x21,0x21,0x21,
0x3D,0x01,0x01,0x01,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFA,0xF9,
};
const uint8_t btn_back_inverse_short[] = {
// res: 24x11 - 48 bytes
0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0x8F,0x57,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,
0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xF9,
};
const uint8_t btn_left[] = {
// res: 25x11 - 50 bytes
0xFC,0x02,0x01,0x01,0x21,0x21,0x71,0x71,0xF9,0xF9,0x21,0x21,0x21,0x21,0x21,0x21,
0x21,0x21,0x21,0x21,0x01,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFA,0xF9,
};
const uint8_t btn_left_inverse[] = {
// res: 25x11 - 50 bytes
0xFC,0xFE,0xFF,0xFF,0xDF,0xDF,0x8F,0x8F,0x07,0x07,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,
0xDF,0xDF,0xDF,0xDF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFB,0xF9,
};
const uint8_t btn_right[] = {
// res: 25x11 - 50 bytes
0xFC,0x02,0x01,0x01,0x01,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0xF9,0xF9,
0x71,0x71,0x21,0x21,0x01,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFA,0xF9,
};
const uint8_t btn_right_inverse[] = {
// res: 25x11 - 50 bytes
0xFC,0xFE,0xFF,0xFF,0xFF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0x07,0x07,
0x8F,0x8F,0xDF,0xDF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFB,0xF9,
};
const uint8_t btn_x0_01[] = {
// res: 25x11 - 50 bytes
0xFC,0x02,0x01,0x89,0x51,0x21,0x51,0x89,0x01,0x01,0x81,0x81,0x01,0xF9,0x45,0x25,
0x15,0xF9,0x01,0x09,0xFD,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFD,0xFD,0xFC,0xFC,0xFD,0xFD,0xFD,0xFC,0xFC,0xFD,0xFD,0xFD,0xFC,
0xFA,0xF9,
};
const uint8_t btn_x0_01_inverse[] = {
// res: 25x11 - 50 bytes
0xFC,0xFE,0xFF,0x77,0xAF,0xDF,0xAF,0x77,0xFF,0xFF,0x7F,0x7F,0xFF,0x07,0xBB,0xDB,
0xEB,0x07,0xFF,0xF7,0x03,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFE,0xFE,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,
0xFB,0xF9,
};
const uint8_t btn_x0_1[] = {
// res: 25x11 - 50 bytes
0xFC,0x02,0x01,0x01,0x01,0x89,0x51,0x21,0x51,0x89,0x01,0x01,0x81,0x81,0x01,0x01,
0x09,0xFD,0x01,0x01,0x01,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFD,0xFD,0xFC,0xFC,0xFD,0xFD,0xFD,0xFC,0xFC,0xFC,0xFC,
0xFA,0xF9,
};
const uint8_t btn_x0_1_inverse[] = {
// res: 25x11 - 50 bytes
0xFC,0xFE,0xFF,0xFF,0xFF,0x77,0xAF,0xDF,0xAF,0x77,0xFF,0xFF,0x7F,0x7F,0xFF,0xFF,
0xF7,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,
0xFB,0xF9,
};
const uint8_t btn_x1[] = {
// res: 25x11 - 50 bytes
0xFC,0x02,0x01,0x01,0x01,0x01,0x89,0x51,0x21,0x51,0x89,0x01,0x01,0x01,0x01,0x09,
0xFD,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFA,0xF9,
};
const uint8_t btn_x1_inverse[] = {
// res: 25x11 - 50 bytes
0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0x77,0xAF,0xDF,0xAF,0x77,0xFF,0xFF,0xFF,0xFF,0xF7,
0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFB,0xF9,
};
const uint8_t btn_x10[] = {
// res: 25x11 - 50 bytes
0xFC,0x02,0x01,0x01,0x89,0x51,0x21,0x51,0x89,0x01,0x01,0x01,0x09,0xFD,0x01,0x01,
0xF9,0x45,0x25,0x15,0xF9,0x01,0x01,0x02,0xFC,0xF9,0xFA,0xFC,0xFC,0xFC,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFC,0xFC,0xFD,0xFD,0xFD,0xFC,0xFC,0xFC,
0xFA,0xF9,
};
const uint8_t btn_x10_inverse[] = {
// res: 25x11 - 50 bytes
0xFC,0xFE,0xFF,0xFF,0x77,0xAF,0xDF,0xAF,0x77,0xFF,0xFF,0xFF,0xF7,0x03,0xFF,0xFF,
0x07,0xBB,0xDB,0xEB,0x07,0xFF,0xFF,0xFE,0xFC,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,
0xFB,0xF9,
};
const uint8_t btn_empty[] = {
// res: 25x11 - 50 bytes
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,
};
// clang-format on
const GFX_bitmap_t bitmap_btnBottom[BITMAP_BTN_MAX] = {
{25, 11, btn_fre},
{25, 11, btn_fre_inverse},
{25, 11, btn_amp},
{25, 11, btn_amp_inverse},
{25, 11, btn_off},
{25, 11, btn_off_inverse},
{25, 11, btn_pha},
{25, 11, btn_pha_inverse},
{24, 11, btn_wav_short},
{24, 11, btn_wav_inverse_short},
{24, 11, btn_back_short},
{24, 11, btn_back_inverse_short},
{25, 11, btn_left},
{25, 11, btn_left_inverse},
{25, 11, btn_right},
{25, 11, btn_right_inverse},
{25, 11, btn_x0_01},
{25, 11, btn_x0_01_inverse},
{25, 11, btn_x0_1},
{25, 11, btn_x0_1_inverse},
{25, 11, btn_x1},
{25, 11, btn_x1_inverse},
{25, 11, btn_x10},
{25, 11, btn_x10_inverse},
{25, 11, btn_empty},
{0, 0, NULL},
};

View File

@@ -0,0 +1,36 @@
#pragma once
#include "display_gfx.h"
typedef enum
{
BITMAP_BTN_FREQ,
BITMAP_BTN_FREQ_INVERSE,
BITMAP_BTN_AMPL,
BITMAP_BTN_AMPL_INVERSE,
BITMAP_BTN_OFFS,
BITMAP_BTN_OFFS_INVERSE,
BITMAP_BTN_PHAS,
BITMAP_BTN_PHAS_INVERSE,
BITMAP_BTN_WAVE,
BITMAP_BTN_WAVE_INVERSE,
BITMAP_BTN_BACK,
BITMAP_BTN_BACK_INVERSE,
BITMAP_BTN_LEFT,
BITMAP_BTN_LEFT_INVERSE,
BITMAP_BTN_RIGHT,
BITMAP_BTN_RIGHT_INVERSE,
BITMAP_BTN_X0_01,
BITMAP_BTN_X0_01_INVERSE,
BITMAP_BTN_X0_1,
BITMAP_BTN_X0_1_INVERSE,
BITMAP_BTN_X1,
BITMAP_BTN_X1_INVERSE,
BITMAP_BTN_X10,
BITMAP_BTN_X10_INVERSE,
BITMAP_BTN_EMPTY,
BITMAP_BTN_NONE,
BITMAP_BTN_MAX,
} BITMAP_buttonName_t;
extern const GFX_bitmap_t bitmap_btnBottom[BITMAP_BTN_MAX];

View File

@@ -0,0 +1,211 @@
#include "main.h"
#include "bitmap_fonts.h"
// clang-format off
const uint8_t font5x7[] = {
0x00, 0x00, 0x5F, 0x00, 0x00, // 0x21 !
0x00, 0x07, 0x00, 0x07, 0x00, // 0x22 "
0x14, 0x7F, 0x14, 0x7F, 0x14, // 0x23 #
0x24, 0x2A, 0x7F, 0x2A, 0x12, // 0x24 $
0x23, 0x13, 0x08, 0x64, 0x62, // 0x25 %
0x36, 0x49, 0x56, 0x20, 0x50, // 0x26 &
0x00, 0x08, 0x07, 0x03, 0x00, // 0x27 '
0x00, 0x1C, 0x22, 0x41, 0x00, // 0x28 (
0x00, 0x41, 0x22, 0x1C, 0x00, // 0x29 )
0x2A, 0x1C, 0x7F, 0x1C, 0x2A, // 0x2A *
0x08, 0x08, 0x3E, 0x08, 0x08, // 0x2B +
0x00, 0x80, 0x70, 0x30, 0x00, // 0x2C ,
0x08, 0x08, 0x08, 0x08, 0x08, // 0x2D -
0x00, 0x00, 0x60, 0x60, 0x00, // 0x2E .
0x20, 0x10, 0x08, 0x04, 0x02, // 0x2F /
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0x30 0
0x00, 0x42, 0x7F, 0x40, 0x00, // 0x31 1
0x72, 0x49, 0x49, 0x49, 0x46, // 0x32 2
0x21, 0x41, 0x49, 0x4D, 0x33, // 0x33 3
0x18, 0x14, 0x12, 0x7F, 0x10, // 0x34 4
0x27, 0x45, 0x45, 0x45, 0x39, // 0x35 5
0x3C, 0x4A, 0x49, 0x49, 0x31, // 0x36 6
0x41, 0x21, 0x11, 0x09, 0x07, // 0x37 7
0x36, 0x49, 0x49, 0x49, 0x36, // 0x38 8
0x46, 0x49, 0x49, 0x29, 0x1E, // 0x39 9
0x00, 0x00, 0x14, 0x00, 0x00, // 0x3A :
0x00, 0x40, 0x34, 0x00, 0x00, // 0x3B ;
0x00, 0x08, 0x14, 0x22, 0x41, // 0x3C <
0x14, 0x14, 0x14, 0x14, 0x14, // 0x3D =
0x00, 0x41, 0x22, 0x14, 0x08, // 0x3E >
0x02, 0x01, 0x59, 0x09, 0x06, // 0x3F ?
0x3E, 0x41, 0x5D, 0x59, 0x4E, // 0x40 @
0x7C, 0x12, 0x11, 0x12, 0x7C, // 0x41 A
0x7F, 0x49, 0x49, 0x49, 0x36, // 0x42 B
0x3E, 0x41, 0x41, 0x41, 0x22, // 0x43 C
0x7F, 0x41, 0x41, 0x41, 0x3E, // 0x44 D
0x7F, 0x49, 0x49, 0x49, 0x41, // 0x45 E
0x7F, 0x09, 0x09, 0x09, 0x01, // 0x46 F
0x3E, 0x41, 0x41, 0x51, 0x73, // 0x47 G
0x7F, 0x08, 0x08, 0x08, 0x7F, // 0x48 H
0x00, 0x41, 0x7F, 0x41, 0x00, // 0x49 I
0x20, 0x40, 0x41, 0x3F, 0x01, // 0x4A J
0x7F, 0x08, 0x14, 0x22, 0x41, // 0x4B K
0x7F, 0x40, 0x40, 0x40, 0x40, // 0x4C L
0x7F, 0x02, 0x1C, 0x02, 0x7F, // 0x4D M
0x7F, 0x04, 0x08, 0x10, 0x7F, // 0x4E N
0x3E, 0x41, 0x41, 0x41, 0x3E, // 0x4F O
0x7F, 0x09, 0x09, 0x09, 0x06, // 0x50 P
0x3E, 0x41, 0x51, 0x21, 0x5E, // 0x51 Q
0x7F, 0x09, 0x19, 0x29, 0x46, // 0x52 R
0x26, 0x49, 0x49, 0x49, 0x32, // 0x53 S
0x03, 0x01, 0x7F, 0x01, 0x03, // 0x54 T
0x3F, 0x40, 0x40, 0x40, 0x3F, // 0x55 U
0x1F, 0x20, 0x40, 0x20, 0x1F, // 0x56 V
0x3F, 0x40, 0x38, 0x40, 0x3F, // 0x57 W
0x63, 0x14, 0x08, 0x14, 0x63, // 0x58 X
0x03, 0x04, 0x78, 0x04, 0x03, // 0x59 Y
0x61, 0x59, 0x49, 0x4D, 0x43, // 0x5A Z
0x00, 0x7F, 0x41, 0x41, 0x41, // 0x5B [
0x02, 0x04, 0x08, 0x10, 0x20, // 0x5C backslash
0x00, 0x41, 0x41, 0x41, 0x7F, // 0x5D ]
0x04, 0x02, 0x01, 0x02, 0x04, // 0x5E ^
0x40, 0x40, 0x40, 0x40, 0x40, // 0x5F _
0x00, 0x03, 0x07, 0x08, 0x00, // 0x60 `
0x20, 0x54, 0x54, 0x78, 0x40, // 0x61 a
0x7F, 0x28, 0x44, 0x44, 0x38, // 0x62 b
0x38, 0x44, 0x44, 0x44, 0x28, // 0x63 c
0x38, 0x44, 0x44, 0x28, 0x7F, // 0x64 d
0x38, 0x54, 0x54, 0x54, 0x18, // 0x65 e
0x00, 0x08, 0x7E, 0x09, 0x02, // 0x66 f
0x18, 0xA4, 0xA4, 0x9C, 0x78, // 0x67 g
0x7F, 0x08, 0x04, 0x04, 0x78, // 0x68 h
0x00, 0x44, 0x7D, 0x40, 0x00, // 0x69 i
0x20, 0x40, 0x40, 0x3D, 0x00, // 0x6A j
0x7F, 0x10, 0x28, 0x44, 0x00, // 0x6B k
0x00, 0x41, 0x7F, 0x40, 0x00, // 0x6C l
0x7C, 0x04, 0x78, 0x04, 0x78, // 0x6D m
0x7C, 0x08, 0x04, 0x04, 0x78, // 0x6E n
0x38, 0x44, 0x44, 0x44, 0x38, // 0x6F o
0xFC, 0x18, 0x24, 0x24, 0x18, // 0x70 p
0x18, 0x24, 0x24, 0x18, 0xFC, // 0x71 q
0x7C, 0x08, 0x04, 0x04, 0x08, // 0x72 r
0x48, 0x54, 0x54, 0x54, 0x24, // 0x73 s
0x04, 0x04, 0x3F, 0x44, 0x24, // 0x74 t
0x3C, 0x40, 0x40, 0x20, 0x7C, // 0x75 u
0x1C, 0x20, 0x40, 0x20, 0x1C, // 0x76 v
0x3C, 0x40, 0x30, 0x40, 0x3C, // 0x77 w
0x44, 0x28, 0x10, 0x28, 0x44, // 0x78 x
0x4C, 0x90, 0x90, 0x90, 0x7C, // 0x79 y
0x44, 0x64, 0x54, 0x4C, 0x44, // 0x7A z
0x00, 0x08, 0x36, 0x41, 0x00, // 0x7B {
0x00, 0x00, 0x77, 0x00, 0x00, // 0x7C |
0x00, 0x41, 0x36, 0x08, 0x00, // 0x7D }
0x02, 0x01, 0x02, 0x04, 0x02, // 0x7E ~
};
// clang-format on
/* { [Char width in bits], [Offset into arial_6ptCharBitmaps in bytes] } */
const GFX_fontChar_t font5x7Descriptors[] = {
{5, 00}, // 0x21 !
{5, 05}, // 0x22 "
{5, 10}, // 0x23 #
{5, 15}, // 0x24 $
{5, 20}, // 0x25 %
{5, 25}, // 0x26 &
{5, 30}, // 0x27 '
{5, 35}, // 0x28 (
{5, 40}, // 0x29 )
{5, 45}, // 0x2A *
{5, 50}, // 0x2B +
{5, 55}, // 0x2C ,
{5, 60}, // 0x2D -
{5, 65}, // 0x2E .
{5, 70}, // 0x2F /
{5, 75}, // 0x30 0
{5, 80}, // 0x31 1
{5, 85}, // 0x32 2
{5, 90}, // 0x33 3
{5, 95}, // 0x34 4
{5, 100}, // 0x35 5
{5, 105}, // 0x36 6
{5, 110}, // 0x37 7
{5, 115}, // 0x38 8
{5, 120}, // 0x39 9
{5, 125}, // 0x3A :
{5, 130}, // 0x3B ;
{5, 135}, // 0x3C <
{5, 140}, // 0x3D =
{5, 145}, // 0x3E >
{5, 150}, // 0x3F ?
{5, 155}, // 0x40 @
{5, 160}, // 0x41 A
{5, 165}, // 0x42 B
{5, 170}, // 0x43 C
{5, 175}, // 0x44 D
{5, 180}, // 0x45 E
{5, 185}, // 0x46 F
{5, 190}, // 0x47 G
{5, 195}, // 0x48 H
{5, 200}, // 0x49 I
{5, 205}, // 0x4A J
{5, 210}, // 0x4B K
{5, 215}, // 0x4C L
{5, 220}, // 0x4D M
{5, 225}, // 0x4E N
{5, 230}, // 0x4F O
{5, 235}, // 0x50 P
{5, 240}, // 0x51 Q
{5, 245}, // 0x52 R
{5, 250}, // 0x53 S
{5, 255}, // 0x54 T
{5, 260}, // 0x55 U
{5, 265}, // 0x56 V
{5, 270}, // 0x57 W
{5, 275}, // 0x58 X
{5, 280}, // 0x59 Y
{5, 285}, // 0x5A Z
{5, 290}, // 0x5B [
{5, 295}, // 0x5C back
{5, 300}, // 0x5D ]
{5, 305}, // 0x5E ^
{5, 310}, // 0x5F _
{5, 315}, // 0x60 `
{5, 320}, // 0x61 a
{5, 325}, // 0x62 b
{5, 330}, // 0x63 c
{5, 335}, // 0x64 d
{5, 340}, // 0x65 e
{5, 345}, // 0x66 f
{5, 350}, // 0x67 g
{5, 355}, // 0x68 h
{5, 360}, // 0x69 i
{5, 365}, // 0x6A j
{5, 370}, // 0x6B k
{5, 375}, // 0x6C l
{5, 380}, // 0x6D m
{5, 385}, // 0x6E n
{5, 390}, // 0x6F o
{5, 395}, // 0x70 p
{5, 400}, // 0x71 q
{5, 405}, // 0x72 r
{5, 410}, // 0x73 s
{5, 415}, // 0x74 t
{5, 420}, // 0x75 u
{5, 425}, // 0x76 v
{5, 430}, // 0x77 w
{5, 435}, // 0x78 x
{5, 440}, // 0x79 y
{5, 445}, // 0x7A z
{5, 450}, // 0x7B {
{5, 455}, // 0x7C |
{5, 460}, // 0x7D }
{5, 465}, // 0x7E ~
};
/* Font information for Arial 6pt */
const GFX_font_t font5x7Info = {
.heightPixels = 8,
.startChar = '!',
.endChar = '~',
.interspacePixels = 1,
.spacePixels = 3,
.charInfo = font5x7Descriptors,
.data = font5x7,
};

View File

@@ -0,0 +1,8 @@
#pragma once
#include "font_gfx.h"
/* Font data for standard 5x7t */
extern const uint8_t font5x7[];
extern const GFX_font_t font5x7Info;
extern const GFX_fontChar_t font5x7Descriptors[];

57
app/bitmaps/bitmap_wave.c Normal file
View File

@@ -0,0 +1,57 @@
#include "main.h"
#include "bitmap_wave.h"
// clang-format off
const uint8_t wave_sin[] = {
// res: 48x25(32) - 192 bytes
0x00,0x00,0x80,0x60,0x10,0x08,0x04,0x04,0x02,0x02,0x01,0x01,0x01,0x01,0x02,0x02,
0x04,0x04,0x08,0x10,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x18,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x18,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x10,0x20,0x40,0x40,
0x80,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
const uint8_t wave_tri[] = {
// res: 48x25(32) - 192 bytes
0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x02,0x04,0x08,
0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,
0x10,0x20,0x40,0x80,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
const uint8_t wave_sqr[] = {
// res: 48x25(32) - 192 bytes
0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
};
const GFX_bitmap_t wave[WAVE_MAX] = {
{48, 25, wave_sin},
{48, 25, wave_tri},
{48, 25, wave_sqr},
};

13
app/bitmaps/bitmap_wave.h Normal file
View File

@@ -0,0 +1,13 @@
#pragma once
#include "display_gfx.h"
typedef enum
{
WAVE_SIN,
WAVE_TRI,
WAVE_SQR,
WAVE_MAX
} BITMAP_wave_t;
extern const GFX_bitmap_t wave[WAVE_MAX];

332
app/core/app.c Normal file
View File

@@ -0,0 +1,332 @@
#include "main.h"
#include "tim.h"
#include "dac.h"
#include "st7565.h"
#include "font_gfx.h"
#include "bitmap_fonts.h"
#include "bottom_button.h"
#include "printf.h"
#include "mcu_cs.h"
#include "mcp41x.h"
#include "ad9833.h"
#define MAX_VOLT 330
typedef enum
{
FREQ,
WAVE,
ONOFF,
GAIN,
POT,
REF,
OFFS,
ZERO,
OPT_MAX
} option_t;
typedef enum
{
SIN,
TRI,
SQR
} wave_t;
st7565_handle_t hst7565;
mcp41x_handle_t hmcp41;
MCU_cs_t hmcp41_cs;
ad9833_handle_t had9833;
MCU_cs_t had9833_cs;
GFX_display_t disp;
uint32_t last_tick;
option_t option;
uint8_t on_off_s[2][4] = {"OFF", "ON"};
uint8_t wave_s[3][4] = {"SIN", "TRI", "SQR"};
uint32_t var[OPT_MAX];
void draw_string(void);
void update_display(void);
void encoderHandler(void);
void changeValue(int8_t inc);
void setup(void)
{
var[FREQ] = 1;
var[POT] = 255;
var[REF] = 197;
var[ONOFF] = 1;
hst7565.hspi = &hspi3;
hst7565.cs_port = ST7565_CS_GPIO_Port;
hst7565.cs_pin = ST7565_CS_Pin;
hst7565.a0_port = ST7565_A0_GPIO_Port;
hst7565.a0_pin = ST7565_A0_Pin;
hst7565.rst_port = ST7565_RST_GPIO_Port;
hst7565.rst_pin = ST7565_RST_Pin;
ST7565_Init(&hst7565, &disp);
mcu_cs_init(&hmcp41_cs, AMP1_CS_GPIO_Port, AMP1_CS_Pin, GPIO_PIN_SET);
mcp41x_init(&hmcp41, &hspi2, &hmcp41_cs.super, MCP41X_10K);
mcu_cs_init(&had9833_cs, DDS1_CS_GPIO_Port, DDS1_CS_Pin, GPIO_PIN_SET);
ad9833_init(&had9833, &hspi2, &had9833_cs.super);
bottomButtonInit();
DISP_clearScreen(&disp);
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"FUN GEN TEST", 24, 24, BM_NORMAL);
ST7565_DisplayAll(&hst7565);
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
HAL_DAC_Start(&hdac1, DAC1_CHANNEL_1);
for (option_t opt = 0; opt < OPT_MAX; opt++)
{
option = opt;
changeValue(0);
}
HAL_Delay(1000);
DISP_clearScreen(&disp);
draw_string();
last_tick = HAL_GetTick();
}
void loop(void)
{
bottomButtonsHandler();
encoderHandler();
if (HAL_GetTick() - last_tick > 100)
{
last_tick = HAL_GetTick();
ST7565_DisplayAll(&hst7565);
update_display();
}
}
void draw_string(void)
{
// frequenncy
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"FREQ:", 8, 0, BM_NORMAL);
// wave type
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"WAVE:", 8, 8, BM_NORMAL);
// dds on off
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"DDS:", 8, 16, BM_NORMAL);
// gain switch
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"GAIN:", 8, 24, BM_NORMAL);
// potentiometr
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"POT:", 8, 32, BM_NORMAL);
// reference voltage
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"REF:", 8, 40, BM_NORMAL);
// dac1 - offset
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"OFFS:", 8, 48, BM_NORMAL);
// dac2 - zeroing
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"ZERO:", 8, 56, BM_NORMAL);
for (option_t opt = FREQ; opt < OPT_MAX; opt++)
{
option = opt;
update_display();
}
option = OFFS;
}
void update_display(void)
{
uint8_t data[16];
uint32_t temp;
DISP_clearRegion(&disp, 0, 0, 8, 64);
switch (option)
{
case FREQ:
snprintf((char *)data, 8, "%04uk", var[FREQ]);
DISP_writeString(&disp, &font5x7Info, data, 48, 0, BM_NORMAL);
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"*", 0, 0, BM_NORMAL);
break;
case WAVE:
DISP_writeString(&disp, &font5x7Info, wave_s[var[WAVE]], 48, 8, BM_NORMAL);
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"*", 0, 8, BM_NORMAL);
break;
case ONOFF:
DISP_clearRegion(&disp, 48, 16, 24, 8);
DISP_writeString(&disp, &font5x7Info, on_off_s[var[ONOFF]], 48, 16, BM_NORMAL);
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"*", 0, 16, BM_NORMAL);
break;
case GAIN:
DISP_clearRegion(&disp, 48, 24, 24, 8);
DISP_writeString(&disp, &font5x7Info, on_off_s[var[GAIN]], 48, 24, BM_NORMAL);
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"*", 0, 24, BM_NORMAL);
break;
case POT:
snprintf((char *)data, 8, "%03u", var[POT]);
DISP_writeString(&disp, &font5x7Info, data, 48, 32, BM_NORMAL);
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"*", 0, 32, BM_NORMAL);
break;
case REF:
temp = (MAX_VOLT * var[REF] + 127) / UINT8_MAX;
snprintf((char *)data, 16, "%03u (%01d.%02d)", var[REF], temp / 100, temp % 100);
DISP_writeString(&disp, &font5x7Info, data, 48, 40, BM_NORMAL);
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"*", 0, 40, BM_NORMAL);
break;
case OFFS:
snprintf((char *)data, 8, "%03u", var[OFFS]);
DISP_writeString(&disp, &font5x7Info, data, 48, 48, BM_NORMAL);
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"*", 0, 48, BM_NORMAL);
break;
case ZERO:
snprintf((char *)data, 8, "%03u", var[ZERO]);
DISP_writeString(&disp, &font5x7Info, data, 48, 56, BM_NORMAL);
DISP_writeString(&disp, &font5x7Info, (uint8_t *)"*", 0, 56, BM_NORMAL);
break;
default:
break;
}
}
void pushedDispBtnEvent(ButtonKey_t *key)
{
switch (key->instance)
{
case BTN_BOT_1:
option = (option - 1) & (OPT_MAX - 1);
break;
case BTN_BOT_2:
option = (option + 1) & (OPT_MAX - 1);
break;
default:
break;
}
}
void changeValue(int8_t inc)
{
inc = inc / 2;
switch (option)
{
case FREQ:
{
if ((var[FREQ] <= 1 && inc < 0) || (var[FREQ] >= 1000 && inc > 0))
{
break;
}
var[FREQ] += inc;
ad9833_setFrequency(&had9833, CHAN_0, var[FREQ]);
break;
}
case WAVE:
{
if (inc > 0 && var[WAVE] == 2)
{
var[WAVE] = 0;
}
else if (inc < 0 && var[WAVE] == 0)
{
var[WAVE] = 2;
}
else
{
var[WAVE] += inc;
}
switch (var[WAVE])
{
case SIN:
ad9833_setMode(&had9833, MODE_SINE);
break;
case TRI:
ad9833_setMode(&had9833, MODE_TRIANGLE);
break;
case SQR:
ad9833_setMode(&had9833, MODE_SQUARE1);
break;
default:
break;
}
break;
}
case ONOFF:
{
var[ONOFF] ^= 1;
if (var[ONOFF])
{
HAL_GPIO_WritePin(LED_CH1_GPIO_Port, LED_CH1_Pin, GPIO_PIN_RESET);
switch (var[WAVE])
{
case SIN:
ad9833_setMode(&had9833, MODE_SINE);
break;
case TRI:
ad9833_setMode(&had9833, MODE_TRIANGLE);
break;
case SQR:
ad9833_setMode(&had9833, MODE_SQUARE1);
break;
default:
break;
}
}
else
{
HAL_GPIO_WritePin(LED_CH1_GPIO_Port, LED_CH1_Pin, GPIO_PIN_SET);
ad9833_setMode(&had9833, MODE_OFF);
}
break;
}
case GAIN:
{
var[GAIN] ^= 1;
if (var[GAIN])
{
HAL_GPIO_WritePin(GAIN1_GPIO_Port, GAIN1_Pin, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(GAIN1_GPIO_Port, GAIN1_Pin, GPIO_PIN_RESET);
}
break;
}
case POT:
{
var[POT] = (var[POT] + inc) & UINT8_MAX;
mcp41x_setValue(&hmcp41, var[POT]);
break;
}
case REF:
{
var[REF] = (var[REF] + inc) & UINT8_MAX;
HAL_DAC_SetValue(&hdac1, DAC1_CHANNEL_1, DAC_ALIGN_8B_R, var[REF]);
break;
}
case OFFS:
{
var[OFFS] = (var[OFFS] + inc) & UINT8_MAX;
break;
}
case ZERO:
{
var[ZERO] = (var[ZERO] + inc) & UINT8_MAX;
break;
}
default:
break;
}
}
void encoderHandler(void)
{
static uint8_t cnt;
if (htim3.Instance->CNT == cnt || htim3.Instance->CNT % 2 == 1)
{
return;
}
changeValue(htim3.Instance->CNT - cnt);
cnt = (uint8_t)htim3.Instance->CNT;
}

4
app/core/app.h Normal file
View File

@@ -0,0 +1,4 @@
#pragma once
void setup(void);
void loop(void);

40
app/core/bottom_button.c Normal file
View File

@@ -0,0 +1,40 @@
#include "main.h"
#include "bottom_button.h"
static ButtonKey_t bottom_buttons[BTN_BOT_MAX];
void bottomButtonInit(void)
{
bottom_buttons[BTN_BOT_1].instance = BTN_BOT_1;
bottom_buttons[BTN_BOT_1].buttonPressed = pushedDispBtnEvent;
bottom_buttons[BTN_BOT_1].gpio_port = BTN1_GPIO_Port;
bottom_buttons[BTN_BOT_1].gpio_pin = BTN1_Pin;
bottom_buttons[BTN_BOT_1].pushed_state = GPIO_PIN_RESET;
bottom_buttons[BTN_BOT_2].instance = BTN_BOT_2;
bottom_buttons[BTN_BOT_2].buttonPressed = pushedDispBtnEvent;
bottom_buttons[BTN_BOT_2].gpio_port = BTN2_GPIO_Port;
bottom_buttons[BTN_BOT_2].gpio_pin = BTN2_Pin;
bottom_buttons[BTN_BOT_2].pushed_state = GPIO_PIN_RESET;
for (HW_BotBtnName_t btn_key = BTN_BOT_1; btn_key < BTN_BOT_MAX; btn_key++)
{
bottom_buttons[btn_key].state = IDLE;
bottom_buttons[btn_key].timer_debounce = BTN_DEFAULT_DEBOUNCE_MS;
bottom_buttons[btn_key].timer_long_pressed = BTN_DEFAULT_LONGPRESSED_MS;
bottom_buttons[btn_key].timer_repeat_delay = BTN_DEFAULT_REPEAT_MS;
}
}
void bottomButtonsHandler(void)
{
for (HW_BotBtnName_t btn_key = BTN_BOT_1; btn_key < BTN_BOT_MAX; btn_key++)
{
buttonHandler(&bottom_buttons[btn_key]);
}
}
__weak void pushedDispBtnEvent(ButtonKey_t *key)
{
UNUSED(key);
}

14
app/core/bottom_button.h Normal file
View File

@@ -0,0 +1,14 @@
#pragma once
#include "hw_button.h"
typedef enum
{
BTN_BOT_1,
BTN_BOT_2,
BTN_BOT_MAX,
} HW_BotBtnName_t;
void bottomButtonInit(void);
void bottomButtonsHandler(void);
void pushedDispBtnEvent(ButtonKey_t *key);

View File

@@ -67,7 +67,7 @@ PA0.GPIO_Label=BTN1
PA0.Locked=true PA0.Locked=true
PA0.Signal=GPIO_Input PA0.Signal=GPIO_Input
PA1.GPIOParameters=GPIO_Label PA1.GPIOParameters=GPIO_Label
PA1.GPIO_Label=BTN1 PA1.GPIO_Label=BTN2
PA1.Locked=true PA1.Locked=true
PA1.Signal=GPIO_Input PA1.Signal=GPIO_Input
PA10.GPIOParameters=GPIO_Label PA10.GPIOParameters=GPIO_Label
@@ -204,7 +204,7 @@ ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=Makefile ProjectManager.TargetToolchain=Makefile
ProjectManager.ToolChainLocation= ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=false ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DAC1_Init-DAC1-false-HAL-true,4-MX_SPI2_Init-SPI2-false-HAL-true,5-MX_SPI3_Init-SPI3-false-HAL-true,6-MX_USART2_UART_Init-USART2-false-HAL-true ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DAC1_Init-DAC1-false-HAL-true,4-MX_SPI2_Init-SPI2-false-HAL-true,5-MX_SPI3_Init-SPI3-false-HAL-true,6-MX_USART2_UART_Init-USART2-false-HAL-true,7-MX_TIM3_Init-TIM3-false-HAL-true
RCC.ADC12outputFreq_Value=48000000 RCC.ADC12outputFreq_Value=48000000
RCC.ADC34outputFreq_Value=48000000 RCC.ADC34outputFreq_Value=48000000
RCC.AHBFreq_Value=48000000 RCC.AHBFreq_Value=48000000
@@ -269,11 +269,13 @@ SPI2.Direction=SPI_DIRECTION_1LINE
SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler
SPI2.Mode=SPI_MODE_MASTER SPI2.Mode=SPI_MODE_MASTER
SPI2.VirtualType=VM_MASTER SPI2.VirtualType=VM_MASTER
SPI3.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2 SPI3.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_32
SPI3.CalculateBaudRate=12.0 MBits/s SPI3.CalculateBaudRate=750.0 KBits/s
SPI3.DataSize=SPI_DATASIZE_8BIT
SPI3.Direction=SPI_DIRECTION_1LINE SPI3.Direction=SPI_DIRECTION_1LINE
SPI3.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler SPI3.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler,DataSize,NSSPMode
SPI3.Mode=SPI_MODE_MASTER SPI3.Mode=SPI_MODE_MASTER
SPI3.NSSPMode=SPI_NSS_PULSE_ENABLE
SPI3.VirtualType=VM_MASTER SPI3.VirtualType=VM_MASTER
TIM3.IC1Filter=15 TIM3.IC1Filter=15
TIM3.IC2Filter=15 TIM3.IC2Filter=15