From 8407721744acc642ff19b8625a85b30c2da2afa4 Mon Sep 17 00:00:00 2001 From: Oskar Weigl Date: Tue, 17 Apr 2018 03:21:03 -0700 Subject: [PATCH] fix external interrupts, step dir now working --- Firmware/.vscode/c_cpp_properties.json | 4 ++-- Firmware/Board/v3/Src/gpio.c | 6 ++++-- Firmware/Board/v3/Src/stm32f4xx_it.c | 8 ++++++++ Firmware/MotorControl/axis.cpp | 8 ++++---- Firmware/MotorControl/main.cpp | 2 ++ Firmware/tup.config.default | 1 - 6 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Firmware/.vscode/c_cpp_properties.json b/Firmware/.vscode/c_cpp_properties.json index 5042079e..eab99cd5 100644 --- a/Firmware/.vscode/c_cpp_properties.json +++ b/Firmware/.vscode/c_cpp_properties.json @@ -27,8 +27,8 @@ "STM32F405xx", "USE_HAL_DRIVER", "HW_VERSION_MAJOR=3", - "HW_VERSION_MINOR=4", - "HW_VERSION_VOLTAGE=24", + "HW_VERSION_MINOR=5", + "HW_VERSION_VOLTAGE=48", "__weak=\"__attribute__((weak))\"", "__packed=\"__attribute__((__packed__))\"", "__GNUC__" diff --git a/Firmware/Board/v3/Src/gpio.c b/Firmware/Board/v3/Src/gpio.c index 91b3f3cd..fb163f71 100644 --- a/Firmware/Board/v3/Src/gpio.c +++ b/Firmware/Board/v3/Src/gpio.c @@ -138,8 +138,9 @@ void MX_GPIO_Init(void) HAL_GPIO_Init(nFAULT_GPIO_Port, &GPIO_InitStruct); /* EXTI interrupt init*/ - HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(EXTI2_IRQn); + // TODO get Cube to not emit this + // HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0); + // HAL_NVIC_EnableIRQ(EXTI2_IRQn); } @@ -151,6 +152,7 @@ void MX_GPIO_Init(void) // no matter which port they belong to. IRQn_Type get_irq_number(uint16_t pin) { uint16_t pin_number = 0; + pin >>= 1; while (pin) { pin >>= 1; pin_number++; diff --git a/Firmware/Board/v3/Src/stm32f4xx_it.c b/Firmware/Board/v3/Src/stm32f4xx_it.c index cd96644a..a7fe3a12 100644 --- a/Firmware/Board/v3/Src/stm32f4xx_it.c +++ b/Firmware/Board/v3/Src/stm32f4xx_it.c @@ -341,6 +341,14 @@ void EXTI4_IRQHandler(void) HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4); } +/** +* @brief This function handles EXTI lines 5-9 interrupt. +*/ +void EXTI9_5_IRQHandler(void) +{ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9); +} + /** * @brief This function handles EXTI lines 10-15 interrupt. */ diff --git a/Firmware/MotorControl/axis.cpp b/Firmware/MotorControl/axis.cpp index bde389d4..4486199a 100644 --- a/Firmware/MotorControl/axis.cpp +++ b/Firmware/MotorControl/axis.cpp @@ -25,6 +25,10 @@ Axis::Axis(const AxisHardwareConfig_t& hw_config, motor_.axis_ = this; } +static void step_cb_wrapper(void* ctx) { + reinterpret_cast(ctx)->step_cb(); +} + // @brief Sets up all components of the axis, // such as gate driver and encoder hardware. void Axis::setup() { @@ -56,10 +60,6 @@ bool Axis::wait_for_current_meas() { return osSignalWait(M_SIGNAL_PH_CURRENT_MEAS, PH_CURRENT_MEAS_TIMEOUT).status == osEventSignal; } -static void step_cb_wrapper(void* ctx) { - reinterpret_cast(ctx)->step_cb(); -} - // step/direction interface void Axis::step_cb() { if (enable_step_dir_) { diff --git a/Firmware/MotorControl/main.cpp b/Firmware/MotorControl/main.cpp index 39a60356..75cd43d2 100644 --- a/Firmware/MotorControl/main.cpp +++ b/Firmware/MotorControl/main.cpp @@ -31,6 +31,7 @@ void save_configuration(void) { } void load_configuration(void) { + // Try to load configs if (NVM_init() || ConfigFormat::safe_load_config( &board_config, @@ -38,6 +39,7 @@ void load_configuration(void) { &controller_configs, &motor_configs, &axis_configs)) { + //If loading failed, restore defaults board_config = BoardConfig_t(); for (size_t i = 0; i < AXIS_COUNT; ++i) { encoder_configs[i] = EncoderConfig_t(); diff --git a/Firmware/tup.config.default b/Firmware/tup.config.default index 5cd89434..8ebb4402 100644 --- a/Firmware/tup.config.default +++ b/Firmware/tup.config.default @@ -3,4 +3,3 @@ #CONFIG_BOARD_VERSION=v3.5-24V CONFIG_USB_PROTOCOL=native CONFIG_UART_PROTOCOL=ascii -CONFIG_STEP_DIR=n