diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index b03da947bb50aa0ccca1a19367ce32dcec19a1b8..895903d9393dbc530e59f77112078e50f5c70426 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -339,6 +339,29 @@ "${workspaceFolder}/libs/miosix-kernel/miosix/config/arch/cortexM7_stm32f7/stm32f767zi_compute_unit" ] }, + { + "name": "stm32f767zi_gemini_gs", + "cStandard": "c11", + "cppStandard": "c++14", + "compilerPath": "/opt/arm-miosix-eabi/bin/arm-miosix-eabi-g++", + "defines": [ + "{defaultDefines}", + "_MIOSIX_BOARDNAME=stm32f767zi_gemini_gs", + "_BOARD_STM32F767ZI_GEMINI_GS", + "_ARCH_CORTEXM7_STM32F7", + "STM32F769xx", + "HSE_VALUE=25000000", + "SYSCLK_FREQ_216MHz=216000000", + "__ENABLE_XRAM", + "V_DDA_VOLTAGE=3.3f" + ], + "includePath": [ + "${defaultIncludePaths}", + "${workspaceFolder}/libs/miosix-kernel/miosix/arch/cortexM7_stm32f7/common", + "${workspaceFolder}/libs/miosix-kernel/miosix/arch/cortexM7_stm32f7/stm32f767zi_gemini_gs", + "${workspaceFolder}/libs/miosix-kernel/miosix/config/arch/cortexM7_stm32f7/stm32f767zi_gemini_gs" + ] + }, { "name": "stm32f756zg_nucleo", "cStandard": "c11", diff --git a/CMakeLists.txt b/CMakeLists.txt index aa77eb3c61a48e5fa2cc9baa1d4e060e12638a29..f68982e702648600f8708cf237568fffbf807ffd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -294,11 +294,19 @@ sbs_target(test-sx1278fsk-bidir stm32f429zi_skyward_groundstation_v2) add_executable(test-sx1278fsk-tx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp) target_compile_definitions(test-sx1278fsk-tx PRIVATE DISABLE_RX) -sbs_target(test-sx1278fsk-tx stm32f767zi_compute_unit) +sbs_target(test-sx1278fsk-tx stm32f767zi_gemini_gs) add_executable(test-sx1278fsk-rx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp) target_compile_definitions(test-sx1278fsk-rx PRIVATE DISABLE_TX) -sbs_target(test-sx1278fsk-rx stm32f767zi_compute_unit) +sbs_target(test-sx1278fsk-rx stm32f429zi_skyward_groundstation_v2) + +# add_executable(test-sx1278fsk-tx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp) +# target_compile_definitions(test-sx1278fsk-tx PRIVATE DISABLE_RX) +# sbs_target(test-sx1278fsk-tx stm32f429zi_skyward_groundstation_v2) +# +# add_executable(test-sx1278fsk-rx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp) +# target_compile_definitions(test-sx1278fsk-rx PRIVATE DISABLE_TX) +# sbs_target(test-sx1278fsk-rx stm32f767zi_gemini_gs) add_executable(test-sx1278fsk-gui-tx src/tests/radio/sx1278/test-sx1278-bench-gui.cpp) target_compile_definitions(test-sx1278fsk-gui-tx PRIVATE DISABLE_RX) @@ -330,7 +338,7 @@ sbs_target(test-sx1278lora-simple-tx stm32f429zi_skyward_groundstation_v2) add_executable(test-sx1278lora-tx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp) target_compile_definitions(test-sx1278lora-tx PRIVATE DISABLE_RX SX1278_IS_LORA) -sbs_target(test-sx1278lora-tx stm32f429zi_skyward_groundstation_v2) +sbs_target(test-sx1278lora-tx stm32f767zi_compute_unit) add_executable(test-sx1278lora-rx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp) target_compile_definitions(test-sx1278lora-rx PRIVATE DISABLE_TX SX1278_IS_LORA) diff --git a/src/shared/drivers/i2c/I2CDriver-f7.cpp b/src/shared/drivers/i2c/I2CDriver-f7.cpp index 23678afbd7df6f49b97294273d4ede0a212ee372..7c25dca9f8374e7622743bf9ba37ed3fd905a399 100644 --- a/src/shared/drivers/i2c/I2CDriver-f7.cpp +++ b/src/shared/drivers/i2c/I2CDriver-f7.cpp @@ -77,6 +77,7 @@ I2CTimings calculateTimings(uint32_t f, uint32_t fi2c) #if defined(_BOARD_STM32F756ZG_NUCLEO) const uint16_t correction = 10; #elif defined(_BOARD_STM32F767ZI_COMPUTE_UNIT) || \ + defined(_BOARD_STM32F767ZI_GEMINI_GS) || \ defined(_BOARD_STM32F767ZI_NUCLEO) const uint16_t correction = 7; #else diff --git a/src/tests/radio/sx1278/sx1278-init.h b/src/tests/radio/sx1278/sx1278-init.h index 36fc26a286ccb4cadf7e1f23c9ca4b1bb3da4c25..9f26bf0796db7ae422d2e366eaf7b73c99d682d7 100644 --- a/src/tests/radio/sx1278/sx1278-init.h +++ b/src/tests/radio/sx1278/sx1278-init.h @@ -86,7 +86,8 @@ using rxen = miosix::radio::rxEn; #define SX1278_IRQ_DIO1 EXTI12_IRQHandlerImpl #define SX1278_IRQ_DIO3 EXTI13_IRQHandlerImpl -#elif defined _BOARD_STM32F767ZI_COMPUTE_UNIT +#elif defined _BOARD_STM32F767ZI_GEMINI_GS +#include "interfaces-impl/hwmapping.h" #define SX1278_IS_SKYWARD433 @@ -94,41 +95,41 @@ using rxen = miosix::radio::rxEn; // #define SX1278_1 #ifdef SX1278_1 -using cs = miosix::Gpio<GPIOA_BASE, 4>; -using dio0 = miosix::Gpio<GPIOC_BASE, 6>; -using dio1 = miosix::Gpio<GPIOD_BASE, 4>; -using dio3 = miosix::Gpio<GPIOD_BASE, 5>; +using cs = miosix::radio1::cs; +using dio0 = miosix::radio1::dio0; +using dio1 = miosix::radio1::dio1; +using dio3 = miosix::radio1::dio3; -using sck = miosix::Gpio<GPIOA_BASE, 5>; -using miso = miosix::Gpio<GPIOA_BASE, 6>; -using mosi = miosix::Gpio<GPIOA_BASE, 7>; +using sck = miosix::radio1::spi::sck; +using miso = miosix::radio1::spi::miso; +using mosi = miosix::radio1::spi::mosi; #define SX1278_NRST -using rst = miosix::Gpio<GPIOA_BASE, 0>; +using rst = miosix::radio1::nrst; -#define SX1278_SPI SPI1 +#define SX1278_SPI MIOSIX_RADIO1_SPI -#define SX1278_IRQ_DIO0 EXTI6_IRQHandlerImpl -#define SX1278_IRQ_DIO1 EXTI4_IRQHandlerImpl -#define SX1278_IRQ_DIO3 EXTI5_IRQHandlerImpl +#define SX1278_IRQ_DIO0 MIOSIX_RADIO1_DIO0_IRQ +#define SX1278_IRQ_DIO1 MIOSIX_RADIO1_DIO1_IRQ +#define SX1278_IRQ_DIO3 MIOSIX_RADIO1_DIO3_IRQ #else -using cs = miosix::Gpio<GPIOA_BASE, 15>; -using dio0 = miosix::Gpio<GPIOC_BASE, 8>; -using dio1 = miosix::Gpio<GPIOC_BASE, 10>; -using dio3 = miosix::Gpio<GPIOC_BASE, 12>; +using cs = miosix::radio2::cs; +using dio0 = miosix::radio2::dio0; +using dio1 = miosix::radio2::dio1; +using dio3 = miosix::radio2::dio3; -using sck = miosix::Gpio<GPIOB_BASE, 3>; -using miso = miosix::Gpio<GPIOB_BASE, 4>; -using mosi = miosix::Gpio<GPIOD_BASE, 6>; +using sck = miosix::radio2::spi::sck; +using miso = miosix::radio2::spi::miso; +using mosi = miosix::radio2::spi::mosi; #define SX1278_NRST -using rst = miosix::Gpio<GPIOA_BASE, 3>; +using rst = miosix::radio2::nrst; -#define SX1278_SPI SPI3 +#define SX1278_SPI MIOSIX_RADIO2_SPI -#define SX1278_IRQ_DIO0 EXTI8_IRQHandlerImpl -#define SX1278_IRQ_DIO1 EXTI10_IRQHandlerImpl -#define SX1278_IRQ_DIO3 EXTI12_IRQHandlerImpl +#define SX1278_IRQ_DIO0 MIOSIX_RADIO2_DIO0_IRQ +#define SX1278_IRQ_DIO1 MIOSIX_RADIO2_DIO1_IRQ +#define SX1278_IRQ_DIO3 MIOSIX_RADIO2_DIO3_IRQ #endif #else @@ -143,9 +144,14 @@ static constexpr size_t SX1278_MTU = Boardcore::SX1278Fsk::MTU; Boardcore::SX1278Fsk *sx1278 = nullptr; #endif +volatile int dio0_cnt = 0; +volatile int dio1_cnt = 0; +volatile int dio3_cnt = 0; + #ifdef SX1278_IRQ_DIO0 void __attribute__((used)) SX1278_IRQ_DIO0() { + dio0_cnt++; if (sx1278) sx1278->handleDioIRQ(); } @@ -154,6 +160,7 @@ void __attribute__((used)) SX1278_IRQ_DIO0() #ifdef SX1278_IRQ_DIO1 void __attribute__((used)) SX1278_IRQ_DIO1() { + dio1_cnt++; if (sx1278) sx1278->handleDioIRQ(); } @@ -162,22 +169,14 @@ void __attribute__((used)) SX1278_IRQ_DIO1() #ifdef SX1278_IRQ_DIO3 void __attribute__((used)) SX1278_IRQ_DIO3() { + dio3_cnt++; if (sx1278) sx1278->handleDioIRQ(); } #endif void initBoard() -{ - // sck::mode(miosix::Mode::ALTERNATE); - // sck::alternateFunction(6); - // miso::mode(miosix::Mode::ALTERNATE); - // miso::alternateFunction(6); - // mosi::mode(miosix::Mode::ALTERNATE); - // mosi::alternateFunction(5); - // cs::mode(miosix::Mode::OUTPUT); - // cs::high(); - +{ #ifdef SX1278_IS_EBYTE rxen::mode(miosix::Mode::OUTPUT); txen::mode(miosix::Mode::OUTPUT); diff --git a/src/tests/radio/sx1278/test-sx1278-bench-serial.cpp b/src/tests/radio/sx1278/test-sx1278-bench-serial.cpp index bd1da2674ab89ab364e08dfcaf81044791060c5b..0453afc3111c313633cc04c19561ef7b52102125 100644 --- a/src/tests/radio/sx1278/test-sx1278-bench-serial.cpp +++ b/src/tests/radio/sx1278/test-sx1278-bench-serial.cpp @@ -46,10 +46,15 @@ int main() "Corrupted packets: %d\n" "RSSI: %.2f dBm\n" "FEI: %.2f Hz\n" - "SNR: %.2f\n", + "SNR: %.2f\n" + "%d %d %d\n", static_cast<float>(stats.txBitrate()) / 1000.0f, stats.sent_count, static_cast<float>(stats.rxBitrate()) / 1000.0f, stats.recv_count, - stats.corrupted_count, stats.rssi, stats.fei, stats.snr); + stats.corrupted_count, stats.rssi, stats.fei, stats.snr, dio0_cnt, dio1_cnt, dio3_cnt); + dio0_cnt = 0; + dio1_cnt = 0; + dio3_cnt = 0; + miosix::Thread::sleep(2000); }