diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f429/board.h b/keyboards/handwired/tractyl_manuform/5x6_right/f429/board.h new file mode 100644 index 000000000000..9be86942d6f7 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f429/board.h @@ -0,0 +1,23 @@ +/* Copyright 2020 Nick Brassel (tzarc) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#pragma once + +#include_next + +#undef STM32_HSECLK +#define STM32_HSECLK 8000000U +#undef STM32_LSECLK +#define STM32_LSECLK 32768U diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f429/config.h b/keyboards/handwired/tractyl_manuform/5x6_right/f429/config.h new file mode 100644 index 000000000000..0be673fba52a --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f429/config.h @@ -0,0 +1,88 @@ +/* +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +// #define USER_BUTTON_PIN C13 +// #define DEBUG_LED_PIN B2 + +// WS2812 RGB LED strip input and number of LEDs +#define WS2812_PWM_DRIVER PWMD3 +#define WS2812_PWM_CHANNEL 1 +#define WS2812_PWM_PAL_MODE 2 +#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM2 +#define WS2812_PWM_DMA_CHANNEL 5 +#define WS2812_EXTERNAL_PULLUP + +#define BACKLIGHT_PWM_DRIVER PWMD8 +#define BACKLIGHT_PWM_CHANNEL 3 +#define BACKLIGHT_PAL_MODE 3 + +/* Audio config */ +#define AUDIO_PIN A4 +#define AUDIO_PIN_ALT A5 +#define AUDIO_PIN_ALT_AS_NEGATIVE + +/* serial.c configuration for split keyboard */ +#define SERIAL_USART_DRIVER SD1 +#define SERIAL_USART_TX_PIN B6 +#define SERIAL_USART_TX_PAL_MODE 7 +#define SERIAL_USART_RX_PIN B7 +#define SERIAL_USART_RX_PAL_MODE 7 +#define SERIAL_USART_TIMEOUT 10 +#define SERIAL_USART_SPEED (1 * 1024 * 1024) +#define SERIAL_USART_FULL_DUPLEX + + +/* i2c config for oleds */ +#define I2C_DRIVER I2CD1 +#define I2C1_SCL_PIN B8 +#define I2C1_SCL_PAL_MODE 4 +#define I2C1_SDA_PIN B9 +#define I2C1_SDA_PAL_MODE 4 +#define I2C1_CLOCK_SPEED 400000 +#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_16_9 + +/* spi config for eeprom and pmw3360 sensor */ +#define SPI_DRIVER SPID4 +#define SPI_SCK_PIN E2 +#define SPI_SCK_PAL_MODE 5 +#define SPI_MOSI_PIN E5 +#define SPI_MOSI_PAL_MODE 5 +#define SPI_MISO_PIN E6 +#define SPI_MISO_PAL_MODE 5 + +#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN B13 +#define EXTERNAL_FLASH_SPI_CLOCK_DIVISOR 4 +#define EXTERNAL_FLASH_SIZE (8 * 1024 * 1024) + +/* pmw3360 config */ +#define POINTING_DEVICE_CS_PIN B5 +#define POINTING_DEVICE_ROTATION_270 +#undef ROTATIONAL_TRANSFORM_ANGLE +#define PMW33XX_SPI_DIVISOR 16 + +// lcd +#define DISPLAY_RST_PIN C9 +#define DISPLAY_DC_PIN B12 +#define DISPLAY_CS_PIN H12 +#define DISPLAY_SPI_DIVIDER 4 + +#define DRV2605L_FB_ERM_LRA 0 +#define DRV2605L_GREETING DRV2605L_EFFECT_750_MS_ALERT_100 +#define DRV2605L_DEFAULT_MODE DRV2605L_EFFECT_BUZZ_1_100 diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f429/f429.c b/keyboards/handwired/tractyl_manuform/5x6_right/f429/f429.c new file mode 100644 index 000000000000..3c2e0d6c8a4b --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f429/f429.c @@ -0,0 +1,247 @@ +/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "tractyl_manuform.h" + +#ifdef USB_VBUS_PIN +bool usb_vbus_state(void) { + gpio_set_pin_input_low(USB_VBUS_PIN); + wait_us(5); + return gpio_read_pin(USB_VBUS_PIN); +} +#endif + +void user_button_init(void) { + // Pin needs to be configured as input low +#ifdef USER_BUTTON_PIN + gpio_set_pin_input_low(USER_BUTTON_PIN); +#endif // USER_BUTTON_PIN +} + +bool check_user_button_state(void) { +#ifdef DEBUG_LED_PIN + gpio_write_pin(DEBUG_LED_PIN, is_keyboard_master()); +#endif +#ifdef USER_BUTTON_PIN + return gpio_read_pin(USER_BUTTON_PIN); +#endif // USER_BUTTON_PIN + return false; +} + +#if HAL_USE_SDRAM == TRUE +# pragma message "Configured to use SDRAM" +/* SDRAM bank base address.*/ +# define SDRAM_BANK_ADDR ((uint32_t)0xD0000000) + +/* + * FMC SDRAM Mode definition register defines + */ +# define FMC_SDCMR_MRD_BURST_LENGTH_1 ((uint16_t)0x0000) +# define FMC_SDCMR_MRD_BURST_LENGTH_2 ((uint16_t)0x0001) +# define FMC_SDCMR_MRD_BURST_LENGTH_4 ((uint16_t)0x0002) +# define FMC_SDCMR_MRD_BURST_LENGTH_8 ((uint16_t)0x0004) +# define FMC_SDCMR_MRD_BURST_TYPE_SEQUENTIAL ((uint16_t)0x0000) +# define FMC_SDCMR_MRD_BURST_TYPE_INTERLEAVED ((uint16_t)0x0008) +# define FMC_SDCMR_MRD_CAS_LATENCY_2 ((uint16_t)0x0020) +# define FMC_SDCMR_MRD_CAS_LATENCY_3 ((uint16_t)0x0030) +# define FMC_SDCMR_MRD_OPERATING_MODE_STANDARD ((uint16_t)0x0000) +# define FMC_SDCMR_MRD_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000) +# define FMC_SDCMR_MRD_WRITEBURST_MODE_SINGLE ((uint16_t)0x0200) + +/* + * FMC_ReadPipe_Delay + */ +# define FMC_ReadPipe_Delay_0 ((uint32_t)0x00000000) +# define FMC_ReadPipe_Delay_1 ((uint32_t)0x00002000) +# define FMC_ReadPipe_Delay_2 ((uint32_t)0x00004000) +# define FMC_ReadPipe_Delay_Mask ((uint32_t)0x00006000) + +/* + * FMC_Read_Burst + */ +# define FMC_Read_Burst_Disable ((uint32_t)0x00000000) +# define FMC_Read_Burst_Enable ((uint32_t)0x00001000) +# define FMC_Read_Burst_Mask ((uint32_t)0x00001000) + +/* + * FMC_SDClock_Period + */ +# define FMC_SDClock_Disable ((uint32_t)0x00000000) +# define FMC_SDClock_Period_2 ((uint32_t)0x00000800) +# define FMC_SDClock_Period_3 ((uint32_t)0x00000C00) +# define FMC_SDClock_Period_Mask ((uint32_t)0x00000C00) + +/* + * FMC_ColumnBits_Number + */ +# define FMC_ColumnBits_Number_8b ((uint32_t)0x00000000) +# define FMC_ColumnBits_Number_9b ((uint32_t)0x00000001) +# define FMC_ColumnBits_Number_10b ((uint32_t)0x00000002) +# define FMC_ColumnBits_Number_11b ((uint32_t)0x00000003) + +/* + * FMC_RowBits_Number + */ +# define FMC_RowBits_Number_11b ((uint32_t)0x00000000) +# define FMC_RowBits_Number_12b ((uint32_t)0x00000004) +# define FMC_RowBits_Number_13b ((uint32_t)0x00000008) + +/* + * FMC_SDMemory_Data_Width + */ +# define FMC_SDMemory_Width_8b ((uint32_t)0x00000000) +# define FMC_SDMemory_Width_16b ((uint32_t)0x00000010) +# define FMC_SDMemory_Width_32b ((uint32_t)0x00000020) + +/* + * FMC_InternalBank_Number + */ +# define FMC_InternalBank_Number_2 ((uint32_t)0x00000000) +# define FMC_InternalBank_Number_4 ((uint32_t)0x00000040) + +/* + * FMC_CAS_Latency + */ +# define FMC_CAS_Latency_1 ((uint32_t)0x00000080) +# define FMC_CAS_Latency_2 ((uint32_t)0x00000100) +# define FMC_CAS_Latency_3 ((uint32_t)0x00000180) + +/* + * FMC_Write_Protection + */ +# define FMC_Write_Protection_Disable ((uint32_t)0x00000000) +# define FMC_Write_Protection_Enable ((uint32_t)0x00000200) + +# include "hal.h" + +/* + * SDRAM driver configuration structure. + */ +static const SDRAMConfig sdram_cfg = { + // clang-format off + .sdcr = (uint32_t)(FMC_ColumnBits_Number_8b | + FMC_RowBits_Number_12b | + FMC_SDMemory_Width_16b | + FMC_InternalBank_Number_4 | + FMC_CAS_Latency_3 | + FMC_Write_Protection_Disable | + FMC_SDClock_Period_2 | + FMC_Read_Burst_Disable | + FMC_ReadPipe_Delay_1), + // clang-format on + .sdtr = (uint32_t)((2 - 1) | // FMC_LoadToActiveDelay = 2 (TMRD: 2 Clock cycles) + (7 << 4) | // FMC_ExitSelfRefreshDelay = 7 (TXSR: min=70ns (7x11.11ns)) + (4 << 8) | // FMC_SelfRefreshTime = 4 (TRAS: min=42ns (4x11.11ns) max=120k (ns)) + (7 << 12) | // FMC_RowCycleDelay = 7 (TRC: min=70 (7x11.11ns)) + (2 << 16) | // FMC_WriteRecoveryTime = 2 (TWR: min=1+ 7ns (1+1x11.11ns)) + (2 << 20) | // FMC_RPDelay = 2 (TRP: 20ns => 2x11.11ns) + (2 << 24)), // FMC_RCDDelay = 2 (TRCD: 20ns => 2x11.11ns) + // clang-format off + .sdcmr = (uint32_t)(((4 - 1) << 5) | + ((FMC_SDCMR_MRD_BURST_LENGTH_2 | + FMC_SDCMR_MRD_BURST_TYPE_SEQUENTIAL | + FMC_SDCMR_MRD_CAS_LATENCY_3 | + FMC_SDCMR_MRD_OPERATING_MODE_STANDARD | + FMC_SDCMR_MRD_WRITEBURST_MODE_SINGLE) << 9)), + // clang-format on + /* if (STM32_SYSCLK == 180000000) -> + 64ms / 4096 = 15.625us + 15.625us * 90MHz = 1406 - 20 = 1386 */ + //.sdrtr = (1386 << 1), + .sdrtr = (uint32_t)(683 << 1), +}; + +/* SDRAM size, in bytes.*/ +# define IS42S16400J_SIZE (8 * 1024 * 1024) + +/* + * Erases the whole SDRAM bank. + */ +static void sdram_bulk_erase(void) { + volatile uint8_t *p = (volatile uint8_t *)SDRAM_BANK_ADDR; + volatile uint8_t *end = p + IS42S16400J_SIZE; + while (p < end) + *p++ = 0xFF; +} + +# define FMC_SDRAM_D2_PIN D0 +# define FMC_SDRAM_D3_PIN D1 +# define FMC_SDRAM_D13_PIN D8 +# define FMC_SDRAM_D14_PIN D9 +# define FMC_SDRAM_D15_PIN D10 +# define FMC_SDRAM_D0_PIN D14 +# define FMC_SDRAM_D1_PIN D15 +# define FMC_SDRAM_NBL0_PIN E0 +# define FMC_SDRAM_NBL1_PIN E1 +# define FMC_SDRAM_D4_PIN E7 +# define FMC_SDRAM_D5_PIN E8 +# define FMC_SDRAM_D6_PIN E9 +# define FMC_SDRAM_D7_PIN E10 +# define FMC_SDRAM_D8_PIN E11 +# define FMC_SDRAM_D9_PIN E12 +# define FMC_SDRAM_D10_PIN E13 +# define FMC_SDRAM_D11_PIN E14 +# define FMC_SDRAM_D12_PIN E15 + +# define FMC_SDRAM_A0_PIN F0 +# define FMC_SDRAM_A1_PIN F1 +# define FMC_SDRAM_A2_PIN F2 +# define FMC_SDRAM_A3_PIN F3 +# define FMC_SDRAM_A4_PIN F4 +# define FMC_SDRAM_A5_PIN F5 +# define FMC_SDRAM_SDNRAS_PIN F11 +# define FMC_SDRAM_A6_PIN F12 +# define FMC_SDRAM_A7_PIN F13 +# define FMC_SDRAM_A8_PIN F14 +# define FMC_SDRAM_A9_PIN F15 +# define FMC_SDRAM_A10_PIN G0 +# define FMC_SDRAM_A11_PIN G1 +# define FMC_SDRAM_BA0_PIN G4 +# define FMC_SDRAM_BA1_PIN G5 + +# define FMC_SDRAM_SDCLK_PIN G8 +# define FMC_SDRAM_SDNCAS_PIN G15 +# define FMC_SDRAM_SDNWE_PIN H5 +# define FMC_SDRAM_SDNE1_PIN H6 +# define FMC_SDRAM_SDCKE1_PIN H3 + +const pin_t fmc_sdram_pin_array[] = { + FMC_SDRAM_D0_PIN, FMC_SDRAM_D1_PIN, FMC_SDRAM_D2_PIN, FMC_SDRAM_D3_PIN, FMC_SDRAM_D4_PIN, FMC_SDRAM_D5_PIN, FMC_SDRAM_D6_PIN, FMC_SDRAM_D7_PIN, FMC_SDRAM_D8_PIN, FMC_SDRAM_D9_PIN, FMC_SDRAM_D10_PIN, FMC_SDRAM_D11_PIN, FMC_SDRAM_D12_PIN, FMC_SDRAM_A0_PIN, FMC_SDRAM_A1_PIN, FMC_SDRAM_A2_PIN, FMC_SDRAM_A3_PIN, FMC_SDRAM_A4_PIN, FMC_SDRAM_A5_PIN, FMC_SDRAM_A6_PIN, FMC_SDRAM_A7_PIN, FMC_SDRAM_A8_PIN, FMC_SDRAM_A9_PIN, FMC_SDRAM_A10_PIN, FMC_SDRAM_A11_PIN, FMC_SDRAM_BA0_PIN, FMC_SDRAM_BA1_PIN, FMC_SDRAM_SDNRAS_PIN, FMC_SDRAM_SDCLK_PIN, FMC_SDRAM_SDNCAS_PIN, FMC_SDRAM_SDNWE_PIN, FMC_SDRAM_SDNE1_PIN, FMC_SDRAM_SDCKE1_PIN, FMC_SDRAM_NBL0_PIN, FMC_SDRAM_NBL1_PIN, +}; + +void board_init(void) { + /* + * Initialise FSMC for SDRAM. + */ + for (uint8_t i = 0; i < ARRAY_SIZE(fmc_sdram_pin_array); i++) { + palSetLineMode(fmc_sdram_pin_array[i], (PAL_MODE_ALTERNATE(12) | PAL_STM32_OTYPE_PUSHPULL | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_FLOATING)); + } + xprintf("SDRAM Init: Pins\n"); + + sdramInit(); + sdramStart(&SDRAMD1, &sdram_cfg); + xprintf("SDRAM Init: Device\n"); + xprintf("SDRAM Init: Full Erase Start\n"); + sdram_bulk_erase(); + xprintf("SDRAM Init: Full Erase Finish\n"); + // // Board setup sets these pins as SPI, but we aren't using them as such. + // // So to prevent them from misbehaving, we need to set them to a different, non-spi mode. + // // This is a bit of a hack, but nothing else runs soon enough, without re-implementing spi_init(). + // gpio_set_pin_input(A5); + // gpio_set_pin_input(A6); + // gpio_set_pin_input(A7); +} +#endif diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f429/halconf.h b/keyboards/handwired/tractyl_manuform/5x6_right/f429/halconf.h new file mode 100644 index 000000000000..3a274765f343 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f429/halconf.h @@ -0,0 +1,36 @@ +/* Copyright 2020 Nick Brassel (tzarc) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#pragma once + +#define HAL_USE_SERIAL TRUE +#define SERIAL_BUFFERS_SIZE 256 + +#if defined(WS2812_PWM) || defined(BACKLIGHT_PWM) +# define HAL_USE_PWM TRUE +#endif // defined(WS2812_PWM) || defined(BACKLIGHT_PWM) + +#if HAL_USE_SPI == TRUE +# define SPI_USE_WAIT TRUE +# define SPI_SELECT_MODE SPI_SELECT_MODE_PAD +#endif + +#ifdef AUDIO_DRIVER_DAC +# define HAL_USE_GPT TRUE +# define HAL_USE_DAC TRUE +#endif + +#include_next +#include "halconf_community.h" diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f429/halconf_community.h b/keyboards/handwired/tractyl_manuform/5x6_right/f429/halconf_community.h new file mode 100644 index 000000000000..6868ea124771 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f429/halconf_community.h @@ -0,0 +1,187 @@ +/* + ChibiOS - Copyright (C) 2014 Uladzimir Pylinsky aka barthess + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef HALCONF_COMMUNITY_H +#define HALCONF_COMMUNITY_H + +/** + * @brief Enables the community overlay. + */ +#if !defined(HAL_USE_COMMUNITY) || defined(__DOXYGEN__) +#define HAL_USE_COMMUNITY TRUE +#endif + +/** + * @brief Enables the FSMC subsystem. + */ +#if !defined(HAL_USE_FSMC) || defined(__DOXYGEN__) +#define HAL_USE_FSMC TRUE +#endif + +/** + * @brief Enables the SDRAM subsystem. + */ +#if !defined(HAL_USE_SDRAM) || defined(__DOXYGEN__) +#define HAL_USE_SDRAM TRUE +#endif + +/** + * @brief Enables the SRAM subsystem. + */ +#if !defined(HAL_USE_SRAM) || defined(__DOXYGEN__) +#define HAL_USE_SRAM FALSE +#endif + +/** + * @brief Enables the NAND subsystem. + */ +#if !defined(HAL_USE_NAND) || defined(__DOXYGEN__) +#define HAL_USE_NAND FALSE +#endif + +/** + * @brief Enables the 1-wire subsystem. + */ +#if !defined(HAL_USE_ONEWIRE) || defined(__DOXYGEN__) +#define HAL_USE_ONEWIRE FALSE +#endif + +/** + * @brief Enables the EICU subsystem. + */ +#if !defined(HAL_USE_EICU) || defined(__DOXYGEN__) +#define HAL_USE_EICU FALSE +#endif + +/** + * @brief Enables the CRC subsystem. + */ +#if !defined(HAL_USE_CRC) || defined(__DOXYGEN__) +#define HAL_USE_CRC FALSE +#endif + +/** + * @brief Enables the RNG subsystem. + */ +#if !defined(HAL_USE_RNG) || defined(__DOXYGEN__) +#define HAL_USE_RNG FALSE +#endif + +/** + * @brief Enables the EEPROM subsystem. + */ +#if !defined(HAL_USE_EEPROM) || defined(__DOXYGEN__) +#define HAL_USE_EEPROM FALSE +#endif + +/** + * @brief Enables the TIMCAP subsystem. + */ +#if !defined(HAL_USE_TIMCAP) || defined(__DOXYGEN__) +#define HAL_USE_TIMCAP FALSE +#endif + +/** + * @brief Enables the TIMCAP subsystem. + */ +#if !defined(HAL_USE_COMP) || defined(__DOXYGEN__) +#define HAL_USE_COMP FALSE +#endif + +/** + * @brief Enables the QEI subsystem. + */ +#if !defined(HAL_USE_QEI) || defined(__DOXYGEN__) +#define HAL_USE_QEI FALSE +#endif + +/** + * @brief Enables the USBH subsystem. + */ +#if !defined(HAL_USE_USBH) || defined(__DOXYGEN__) +#define HAL_USE_USBH FALSE +#endif + +/** + * @brief Enables the USB_MSD subsystem. + */ +#if !defined(HAL_USE_USB_MSD) || defined(__DOXYGEN__) +#define HAL_USE_USB_MSD FALSE +#endif + +/*===========================================================================*/ +/* FSMCNAND driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the @p nandAcquireBus() and @p nanReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(NAND_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define NAND_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* 1-wire driver related settings. */ +/*===========================================================================*/ +/** + * @brief Enables strong pull up feature. + * @note Disabling this option saves both code and data space. + */ +#define ONEWIRE_USE_STRONG_PULLUP FALSE + +/** + * @brief Enables search ROM feature. + * @note Disabling this option saves both code and data space. + */ +#define ONEWIRE_USE_SEARCH_ROM TRUE + +/*===========================================================================*/ +/* QEI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables discard of overlow + */ +#if !defined(QEI_USE_OVERFLOW_DISCARD) || defined(__DOXYGEN__) +#define QEI_USE_OVERFLOW_DISCARD FALSE +#endif + +/** + * @brief Enables min max of overlow + */ +#if !defined(QEI_USE_OVERFLOW_MINMAX) || defined(__DOXYGEN__) +#define QEI_USE_OVERFLOW_MINMAX FALSE +#endif + +/*===========================================================================*/ +/* EEProm driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables 24xx series I2C eeprom device driver. + * @note Disabling this option saves both code and data space. + */ +#define EEPROM_USE_EE24XX FALSE + /** + * @brief Enables 25xx series SPI eeprom device driver. + * @note Disabling this option saves both code and data space. + */ +#define EEPROM_USE_EE25XX FALSE + +#endif /* HALCONF_COMMUNITY_H */ + +/** @} */ diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f429/keyboard.json b/keyboards/handwired/tractyl_manuform/5x6_right/f429/keyboard.json new file mode 100644 index 000000000000..b770c51f8e94 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f429/keyboard.json @@ -0,0 +1,66 @@ +{ + "keyboard_name": "Tractyl Manuform (5x6) WeAct STM32F429", + "audio": { + "driver": "dac_additive", + "power_control": { + "pin": "A3" + } + }, + "backlight": { + "levels": 16, + "pin": "C8" + }, + "bootloader": "stm32-dfu", + "build": { + "debounce_type": "asym_eager_defer_pk" + }, + "diode_direction": "COL2ROW", + "encoder": { + "rotary": [ + {"pin_a": "C10", "pin_b": "C0"} + ] + }, + "eeprom": { + "driver": "wear_leveling", + "wear_leveling": { + "driver": "spi_flash", + "backing_size": 16384, + "logical_size": 4096 + } + }, + "features": { + "console": true, + "haptic": true + }, + "haptic": { + "driver": "drv2605l" + }, + "matrix_pins": { + "cols": ["C0", "C1", "C2", "C3", "A0", "A1"], + "rows": ["A6", "A7", "C4", "C5", "B0", "B1"] + }, + "processor": "STM32F429", + "rgblight": { + "led_count": 24, + "split": true + }, + "split": { + "handedness": { + "pin": "B11" + }, + "serial": { + "driver": "usart" + }, + "transport": { + "sync": { + "activity": true, + "haptic": true, + "matrix_state": true + } + } + }, + "ws2812": { + "driver": "pwm", + "pin": "C7" + } +} diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f429/ld/STM32F429IGT6_SDRAM.ld b/keyboards/handwired/tractyl_manuform/5x6_right/f429/ld/STM32F429IGT6_SDRAM.ld new file mode 100644 index 000000000000..3f5d37dba0d9 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f429/ld/STM32F429IGT6_SDRAM.ld @@ -0,0 +1,89 @@ +/* + ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * ST32F429xI memory setup. + * Note: Use of ram1, ram2 and ram3 is mutually exclusive with use of ram0. + */ +MEMORY +{ + flash0 (rx) : org = 0x08000000, len = 16k /* Sector 0 - Init code as ROM bootloader assumes application starts here */ + flash1 (rx) : org = 0x08004000, len = 16k /* Sector 1 - Emulated eeprom */ + flash2 (rx) : org = 0x08008000, len = 2M - 32k /* Sector 2..6 - Rest of firmware */ + flash3 (rx) : org = 0x00000000, len = 0 + flash4 (rx) : org = 0x00000000, len = 0 + flash5 (rx) : org = 0x00000000, len = 0 + flash6 (rx) : org = 0x00000000, len = 0 + flash7 (rx) : org = 0x00000000, len = 0 + ram0 : org = 0x20000000, len = 192k /* SRAM1 + SRAM2 + SRAM3 */ + ram1 : org = 0x20000000, len = 112k /* SRAM1 */ + ram2 : org = 0x2001C000, len = 16k /* SRAM2 */ + ram3 : org = 0x20020000, len = 64k /* SRAM3 */ + ram4 : org = 0x10000000, len = 64k /* CCM SRAM */ + ram5 : org = 0x40024000, len = 4k /* BCKP SRAM */ + ram6 : org = 0x00000000, len = 0 + ram7 : org = 0xD0000000, len = 8M /* SDRAM */ +} + +/* For each data/text section two region are defined, a virtual region + and a load region (_LMA suffix).*/ + +/* Flash region to be used for exception vectors.*/ +REGION_ALIAS("VECTORS_FLASH", flash0); +REGION_ALIAS("VECTORS_FLASH_LMA", flash0); + +/* Flash region to be used for constructors and destructors.*/ +REGION_ALIAS("XTORS_FLASH", flash2); +REGION_ALIAS("XTORS_FLASH_LMA", flash2); + +/* Flash region to be used for code text.*/ +REGION_ALIAS("TEXT_FLASH", flash2); +REGION_ALIAS("TEXT_FLASH_LMA", flash2); + +/* Flash region to be used for read only data.*/ +REGION_ALIAS("RODATA_FLASH", flash2); +REGION_ALIAS("RODATA_FLASH_LMA", flash2); + +/* Flash region to be used for various.*/ +REGION_ALIAS("VARIOUS_FLASH", flash2); +REGION_ALIAS("VARIOUS_FLASH_LMA", flash2); + +/* Flash region to be used for RAM(n) initialization data.*/ +REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2); + +/* RAM region to be used for Main stack. This stack accommodates the processing + of all exceptions and interrupts.*/ +REGION_ALIAS("MAIN_STACK_RAM", ram0); + +/* RAM region to be used for the process stack. This is the stack used by + the main() function.*/ +REGION_ALIAS("PROCESS_STACK_RAM", ram0); + +/* RAM region to be used for data segment.*/ +REGION_ALIAS("DATA_RAM", ram0); +REGION_ALIAS("DATA_RAM_LMA", flash0); + +/* RAM region to be used for BSS segment.*/ +REGION_ALIAS("BSS_RAM", ram0); + +/* RAM region to be used for the default heap.*/ +REGION_ALIAS("HEAP_RAM", ram0); + +/* RAM region to be used for SDRAM segment.*/ +REGION_ALIAS("SDRAM_RAM", ram7); + +/* Generic rules inclusion.*/ +INCLUDE rules.ld diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f429/mcuconf.h b/keyboards/handwired/tractyl_manuform/5x6_right/f429/mcuconf.h new file mode 100644 index 000000000000..4f00aa7652c1 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f429/mcuconf.h @@ -0,0 +1,78 @@ +/* Copyright 2020 Nick Brassel (tzarc) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include_next + +#undef STM32_LSE_ENABLED +#define STM32_LSE_ENABLED TRUE + +#undef STM32_RTCSEL +#define STM32_RTCSEL STM32_RTCSEL_LSE + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 TRUE + +#if HAL_USE_WDG == TRUE +# undef STM32_WDG_USE_IWDG +# define STM32_WDG_USE_IWDG TRUE +#endif + +#if HAL_USE_I2C == TRUE +# undef STM32_I2C_USE_I2C1 +# define STM32_I2C_USE_I2C1 TRUE + +# undef STM32_I2C_BUSY_TIMEOUT +# define STM32_I2C_BUSY_TIMEOUT 10 + +# undef STM32_I2C_I2C1_RX_DMA_STREAM +# define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0) +# undef STM32_I2C_I2C1_TX_DMA_STREAM +# define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7) +#endif // HAL_USE_I2C + +#ifdef WS2812_PWM +# undef STM32_PWM_USE_TIM3 +# define STM32_PWM_USE_TIM3 TRUE +#endif // WS2812_PWM + +#ifdef BACKLIGHT_PWM +# undef STM32_PWM_USE_TIM8 +# define STM32_PWM_USE_TIM8 TRUE +#endif + +#if HAL_USE_SPI == TRUE +# undef STM32_SPI_USE_SPI4 +# define STM32_SPI_USE_SPI4 TRUE +# undef STM32_SPI_SPI4_RX_DMA_STREAM +# define STM32_SPI_SPI4_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0) +# undef STM32_SPI_SPI4_TX_DMA_STREAM +# define STM32_SPI_SPI4_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 4) + +#endif + +#ifdef AUDIO_DRIVER_DAC +# undef STM32_DAC_USE_DAC1_CH1 +# define STM32_DAC_USE_DAC1_CH1 TRUE +# undef STM32_DAC_USE_DAC1_CH2 +# define STM32_DAC_USE_DAC1_CH2 TRUE + +# undef STM32_GPT_USE_TIM6 +# define STM32_GPT_USE_TIM6 TRUE +#endif // AUDIO_DRIVER_DAC + +#include "mcuconf_community.h" diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f429/mcuconf_community.h b/keyboards/handwired/tractyl_manuform/5x6_right/f429/mcuconf_community.h new file mode 100644 index 000000000000..0e638e79ec18 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f429/mcuconf_community.h @@ -0,0 +1,158 @@ +/* + ChibiOS/RT - Copyright (C) 2014 Uladzimir Pylinsky aka barthess + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#define STM32_USE_DMA + +/* + * FSMC driver system settings. + */ +#define STM32_FSMC_USE_FSMC1 TRUE +#define STM32_FSMC_FSMC1_IRQ_PRIORITY 10 +#define STM32_FSMC_DMA_CHN 0x03010201 + +/* + * FSMC NAND driver system settings. + */ +#define STM32_NAND_USE_NAND1 FALSE +#define STM32_NAND_USE_NAND2 FALSE +#define STM32_NAND_USE_EXT_INT FALSE +#define STM32_NAND_DMA_STREAM STM32_DMA_STREAM_ID(2, 7) +#define STM32_NAND_DMA_PRIORITY 0 +#define STM32_NAND_DMA_ERROR_HOOK(nandp) osalSysHalt("DMA failure") + +/* + * FSMC SRAM driver system settings. + */ +#define STM32_SRAM_USE_SRAM1 FALSE +#define STM32_SRAM_USE_SRAM2 FALSE +#define STM32_SRAM_USE_SRAM3 FALSE +#define STM32_SRAM_USE_SRAM4 FALSE + +/* + * FSMC SDRAM driver system settings. + */ +#define STM32_SDRAM_USE_SDRAM1 FALSE +#define STM32_SDRAM_USE_SDRAM2 TRUE + +/* + * TIMCAP driver system settings. + */ +#define STM32_TIMCAP_USE_TIM1 TRUE +#define STM32_TIMCAP_USE_TIM2 FALSE +#define STM32_TIMCAP_USE_TIM3 TRUE +#define STM32_TIMCAP_USE_TIM4 TRUE +#define STM32_TIMCAP_USE_TIM5 TRUE +#define STM32_TIMCAP_USE_TIM8 TRUE +#define STM32_TIMCAP_USE_TIM9 TRUE +#define STM32_TIMCAP_TIM1_IRQ_PRIORITY 3 +#define STM32_TIMCAP_TIM2_IRQ_PRIORITY 3 +#define STM32_TIMCAP_TIM3_IRQ_PRIORITY 3 +#define STM32_TIMCAP_TIM4_IRQ_PRIORITY 3 +#define STM32_TIMCAP_TIM5_IRQ_PRIORITY 3 +#define STM32_TIMCAP_TIM8_IRQ_PRIORITY 3 +#define STM32_TIMCAP_TIM9_IRQ_PRIORITY 3 + +/* + * COMP driver system settings. + */ +#define STM32_COMP_USE_COMP1 TRUE +#define STM32_COMP_USE_COMP2 TRUE +#define STM32_COMP_USE_COMP3 TRUE +#define STM32_COMP_USE_COMP4 TRUE +#define STM32_COMP_USE_COMP5 TRUE +#define STM32_COMP_USE_COMP6 TRUE +#define STM32_COMP_USE_COMP7 TRUE + +#define STM32_COMP_USE_INTERRUPTS TRUE +#define STM32_COMP_1_2_3_IRQ_PRIORITY 5 +#define STM32_COMP_4_5_6_IRQ_PRIORITY 5 +#define STM32_COMP_7_IRQ_PRIORITY 5 + +#if STM32_COMP_USE_INTERRUPTS +#define STM32_DISABLE_EXTI21_22_29_HANDLER +#define STM32_DISABLE_EXTI30_32_HANDLER +#define STM32_DISABLE_EXTI33_HANDLER +#endif + +/* + * USBH driver system settings. + */ +#define STM32_OTG_FS_CHANNELS_NUMBER 8 +#define STM32_OTG_HS_CHANNELS_NUMBER 12 + +#define STM32_USBH_USE_OTG1 FALSE +#define STM32_OTG_FS_RXFIFO_SIZE 1024 +#define STM32_OTG_FS_PTXFIFO_SIZE 128 +#define STM32_OTG_FS_NPTXFIFO_SIZE 128 + +#define STM32_USBH_USE_OTG2 FALSE +#define STM32_OTG_HS_RXFIFO_SIZE 2048 +#define STM32_OTG_HS_PTXFIFO_SIZE 1024 +#define STM32_OTG_HS_NPTXFIFO_SIZE 1024 + +#define STM32_USBH_MIN_QSPACE 4 +#define STM32_USBH_CHANNELS_NP 4 + +/* + * CRC driver system settings. + */ +#define STM32_CRC_USE_CRC1 TRUE +#define STM32_CRC_CRC1_DMA_IRQ_PRIORITY 1 +#define STM32_CRC_CRC1_DMA_PRIORITY 2 +#define STM32_CRC_CRC1_DMA_STREAM STM32_DMA1_STREAM2 + +#define CRCSW_USE_CRC1 FALSE +#define CRCSW_CRC32_TABLE TRUE +#define CRCSW_CRC16_TABLE TRUE +#define CRCSW_PROGRAMMABLE TRUE + +/* + * EICU driver system settings. + */ +#define STM32_EICU_USE_TIM1 TRUE +#define STM32_EICU_USE_TIM2 FALSE +#define STM32_EICU_USE_TIM3 TRUE +#define STM32_EICU_USE_TIM4 TRUE +#define STM32_EICU_USE_TIM5 TRUE +#define STM32_EICU_USE_TIM8 TRUE +#define STM32_EICU_USE_TIM9 TRUE +#define STM32_EICU_USE_TIM10 TRUE +#define STM32_EICU_USE_TIM11 TRUE +#define STM32_EICU_USE_TIM12 TRUE +#define STM32_EICU_USE_TIM13 TRUE +#define STM32_EICU_USE_TIM14 TRUE +#define STM32_EICU_TIM1_IRQ_PRIORITY 7 +#define STM32_EICU_TIM2_IRQ_PRIORITY 7 +#define STM32_EICU_TIM3_IRQ_PRIORITY 7 +#define STM32_EICU_TIM4_IRQ_PRIORITY 7 +#define STM32_EICU_TIM5_IRQ_PRIORITY 7 +#define STM32_EICU_TIM8_IRQ_PRIORITY 7 +#define STM32_EICU_TIM9_IRQ_PRIORITY 7 +#define STM32_EICU_TIM10_IRQ_PRIORITY 7 +#define STM32_EICU_TIM11_IRQ_PRIORITY 7 +#define STM32_EICU_TIM12_IRQ_PRIORITY 7 +#define STM32_EICU_TIM13_IRQ_PRIORITY 7 +#define STM32_EICU_TIM14_IRQ_PRIORITY 7 + +/* + * QEI driver system settings. + */ +#define STM32_QEI_USE_TIM1 TRUE +#define STM32_QEI_USE_TIM2 FALSE +#define STM32_QEI_USE_TIM3 TRUE +#define STM32_QEI_TIM1_IRQ_PRIORITY 3 +#define STM32_QEI_TIM2_IRQ_PRIORITY 3 +#define STM32_QEI_TIM3_IRQ_PRIORITY 3 diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f429/readme.md b/keyboards/handwired/tractyl_manuform/5x6_right/f429/readme.md new file mode 100644 index 000000000000..4c8db1c90c38 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f429/readme.md @@ -0,0 +1,50 @@ +A0 - Column 3 +A1 - Column 4 +A2 - Colume 5 +A3 - Audio Enable +A4 - DAC Audio +A5 - DAC Aduio +A6 - Row 0 +A7 - Row 1 +A8 - +A9 - VBUS Sense -- Don't use - USART TX +A10 - USART RX (weak internal pullup) +A11 - USB D- +A12 - USB D+ +A13 - SWD DIO +A14 - SWD CLK +A15 - Encoder Pin B + +B0 - Row 4 +B1 - Row 5 +B2 - Boot1 - user LED +B3 - SPI SCK +B4 - SPI MISO +B5 - SPI MOSI +B6 - I2C SCL +B7 - I2C SDA +B8 - LCD Display CS Pin +B9 - Pointing Device CS Pin +B10 - Manual VBUS Detect Pin +B11 - Split Hand Pin +B12 - (weak internal pullup) - LCD Display DC Pin +B13 - LCD Display RST Pin +B14 - +B15 - + +C0 - Encoder Pin A +C1 - Column 0 +C2 - Column 1 +C3 - Column 2 +C4 - Row 2 +C5 - Row 3 +C6 - WS2812 PWM Pin +C7 - Backlight PWM Pin +C8 - TF Interface +C9 - TF Interface +C10 - TF Interface +C11 - TF Interface +C12 - TF Interface +C13 - User Button +C14 - LSE Crystal +C15 - LSE Crystal diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f429/rules.mk b/keyboards/handwired/tractyl_manuform/5x6_right/f429/rules.mk new file mode 100644 index 000000000000..07df591a5c20 --- /dev/null +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f429/rules.mk @@ -0,0 +1 @@ +MCU_LDSCRIPT = STM32F429IGT6_SDRAM