[board] Fix chibios common i2c and pwm input (#2897)

* [board] Fix chibios common i2c and pwm input

* [board] Fix I2C defines default and px4fmu 5.0 PWM input
This commit is contained in:
Freek van Tienen
2022-10-07 15:26:10 +02:00
committed by GitHub
parent 2979995bca
commit 10b8b96d7d
3 changed files with 50 additions and 35 deletions
+26 -15
View File
@@ -30,6 +30,7 @@
* ChibiOS board file generated by the cfg file
*/
#include "board.h"
#include <hal.h>
/*
* Concat macro
@@ -299,6 +300,15 @@
#endif
#endif
/*
* PWM input
*/
#define PWM_INPUT1_ICU CONCAT_BOARD_PARAM(ICUD, PWM_INPUT1_TIM)
#define PWM_INPUT1_CHANNEL CONCAT_BOARD_PARAM(ICU_CHANNEL_, PWM_INPUT1_TIM_CH)
#define PWM_INPUT1_GPIO_PORT PAL_PORT(LINE_PWM_INPUT1)
#define PWM_INPUT1_GPIO_PIN PAL_PAD(LINE_PWM_INPUT1)
#define PWM_INPUT1_GPIO_AF AF_LINE_PWM_INPUT1
/**
* UART defines
*/
@@ -435,13 +445,15 @@
*/
// Digital noise filter: 0 disabled, [0x1 - 0xF] enable up to n t_I2CCLK
#define STM32_CR1_DNF(n) ((n & 0x0f) << 8)
// Timing register
#define I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR (STM32_TIMINGR_PRESC(0U) | \
STM32_TIMINGR_SCLDEL(10U) | STM32_TIMINGR_SDADEL(0U) | \
STM32_TIMINGR_SCLH(34U) | STM32_TIMINGR_SCLL(86U))
#define I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR (STM32_TIMINGR_PRESC(1U) | \
STM32_TIMINGR_SCLDEL(9U) | STM32_TIMINGR_SDADEL(0U) | \
STM32_TIMINGR_SCLH(105U) | STM32_TIMINGR_SCLL(153U))
#if defined(STM32F7XX)
#define I2C_CFG_100KHZ_TIMINGR (STM32_TIMINGR_PRESC(3U) | STM32_TIMINGR_SCLDEL(8U) | STM32_TIMINGR_SDADEL(1U) | STM32_TIMINGR_SCLH(46U) | STM32_TIMINGR_SCLL(62U)) // 0x30812E3E
#define I2C_CFG_400KHZ_TIMINGR (STM32_TIMINGR_PRESC(6U) | STM32_TIMINGR_SCLDEL(0U) | STM32_TIMINGR_SDADEL(0U) | STM32_TIMINGR_SCLH(3U) | STM32_TIMINGR_SCLL(13U)) // 0x6000030D
#elif defined(STM32H7XX)
#define I2C_CFG_100KHZ_TIMINGR (STM32_TIMINGR_PRESC(0U) | STM32_TIMINGR_SCLDEL(7U) | STM32_TIMINGR_SDADEL(0U) | STM32_TIMINGR_SCLH(124U) | STM32_TIMINGR_SCLL(187U)) // 0x00707CBB
#define I2C_CFG_400KHZ_TIMINGR (STM32_TIMINGR_PRESC(0U) | STM32_TIMINGR_SCLDEL(3U) | STM32_TIMINGR_SDADEL(0U) | STM32_TIMINGR_SCLH(16U) | STM32_TIMINGR_SCLL(56U)) // 0x00300F38
#endif
#ifndef I2C1_CLOCK_SPEED
@@ -450,13 +462,13 @@
#if I2C1_CLOCK_SPEED == 400000
#define I2C1_CFG_DEF { \
.timingr = I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
.timingr = I2C_CFG_400KHZ_TIMINGR, \
.cr1 = STM32_CR1_DNF(0), \
.cr2 = 0 \
}
#elif I2C1_CLOCK_SPEED == 100000
#define I2C1_CFG_DEF { \
.timingr = I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
.timingr = I2C_CFG_100KHZ_TIMINGR, \
.cr1 = STM32_CR1_DNF(0), \
.cr2 = 0 \
}
@@ -464,20 +476,19 @@
#error "Unknown I2C1 clock speed"
#endif
#ifndef I2C2_CLOCK_SPEED
#define I2C2_CLOCK_SPEED 400000
#endif
#if I2C2_CLOCK_SPEED == 400000
#define I2C2_CFG_DEF { \
.timingr = I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
.timingr = I2C_CFG_400KHZ_TIMINGR, \
.cr1 = STM32_CR1_DNF(0), \
.cr2 = 0 \
}
#elif I2C2_CLOCK_SPEED == 100000
#define I2C2_CFG_DEF { \
.timingr = I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
.timingr = I2C_CFG_100KHZ_TIMINGR, \
.cr1 = STM32_CR1_DNF(0), \
.cr2 = 0 \
}
@@ -491,13 +502,13 @@
#if I2C3_CLOCK_SPEED == 400000
#define I2C3_CFG_DEF { \
.timingr = I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
.timingr = I2C_CFG_400KHZ_TIMINGR, \
.cr1 = STM32_CR1_DNF(0), \
.cr2 = 0 \
}
#elif I2C3_CLOCK_SPEED == 100000
#define I2C3_CFG_DEF { \
.timingr = I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
.timingr = I2C_CFG_100KHZ_TIMINGR, \
.cr1 = STM32_CR1_DNF(0), \
.cr2 = 0 \
}
@@ -511,13 +522,13 @@
#if I2C4_CLOCK_SPEED == 400000
#define I2C4_CFG_DEF { \
.timingr = I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
.timingr = I2C_CFG_400KHZ_TIMINGR, \
.cr1 = STM32_CR1_DNF(0), \
.cr2 = 0 \
}
#elif I2C4_CLOCK_SPEED == 100000
#define I2C4_CFG_DEF { \
.timingr = I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
.timingr = I2C_CFG_100KHZ_TIMINGR, \
.cr1 = STM32_CR1_DNF(0), \
.cr2 = 0 \
}
@@ -223,7 +223,7 @@ PI01 SPI2_SCK SPI AF:SPI2_SCK
PI02 SPI2_MISO SPI AF:SPI2_MISO
PI03 SPI2_MOSI SPI AF:SPI2_MOSI
PI04 SPI_SLAVE8 OUTPUT PUSHPULL SPEED_HIGH FLOATING LEVEL_HIGH # SPI5_CS1
PI05 RC_INPUT ICU AF:TIM8_CH1
PI05 PWM_INPUT1 ICU AF:TIM8_CH1 () # RC_INPUT
PI06 SPI_SLAVE9 OUTPUT PUSHPULL SPEED_HIGH FLOATING LEVEL_HIGH # SPI6_CS1
PI07 SPI_SLAVE10 OUTPUT PUSHPULL SPEED_HIGH FLOATING LEVEL_HIGH # SPI6_CS2
PI08 SPI_SLAVE11 OUTPUT PUSHPULL SPEED_HIGH FLOATING LEVEL_HIGH # SPI6_CS3
+23 -19
View File
@@ -209,7 +209,7 @@
#define PI02_SPI2_MISO 2U
#define PI03_SPI2_MOSI 3U
#define PI04_SPI_SLAVE8 4U
#define PI05_RC_INPUT 5U
#define PI05_PWM_INPUT1 5U
#define PI06_SPI_SLAVE9 6U
#define PI07_SPI_SLAVE10 7U
#define PI08_SPI_SLAVE11 8U
@@ -398,7 +398,7 @@
#define LINE_SPI2_MISO PAL_LINE(GPIOI, 2U)
#define LINE_SPI2_MOSI PAL_LINE(GPIOI, 3U)
#define LINE_SPI_SLAVE8 PAL_LINE(GPIOI, 4U)
#define LINE_RC_INPUT PAL_LINE(GPIOI, 5U)
#define LINE_PWM_INPUT1 PAL_LINE(GPIOI, 5U)
#define LINE_SPI_SLAVE9 PAL_LINE(GPIOI, 6U)
#define LINE_SPI_SLAVE10 PAL_LINE(GPIOI, 7U)
#define LINE_SPI_SLAVE11 PAL_LINE(GPIOI, 8U)
@@ -1258,7 +1258,7 @@
PIN_MODE_ALTERNATE(PI02_SPI2_MISO) | \
PIN_MODE_ALTERNATE(PI03_SPI2_MOSI) | \
PIN_MODE_OUTPUT(PI04_SPI_SLAVE8) | \
PIN_MODE_ALTERNATE(PI05_RC_INPUT) | \
PIN_MODE_ALTERNATE(PI05_PWM_INPUT1) | \
PIN_MODE_OUTPUT(PI06_SPI_SLAVE9) | \
PIN_MODE_OUTPUT(PI07_SPI_SLAVE10) | \
PIN_MODE_OUTPUT(PI08_SPI_SLAVE11) | \
@@ -1275,7 +1275,7 @@
PIN_OTYPE_PUSHPULL(PI02_SPI2_MISO) | \
PIN_OTYPE_PUSHPULL(PI03_SPI2_MOSI) | \
PIN_OTYPE_PUSHPULL(PI04_SPI_SLAVE8) | \
PIN_OTYPE_PUSHPULL(PI05_RC_INPUT) | \
PIN_OTYPE_PUSHPULL(PI05_PWM_INPUT1) | \
PIN_OTYPE_PUSHPULL(PI06_SPI_SLAVE9) | \
PIN_OTYPE_PUSHPULL(PI07_SPI_SLAVE10) | \
PIN_OTYPE_PUSHPULL(PI08_SPI_SLAVE11) | \
@@ -1292,7 +1292,7 @@
PIN_OSPEED_SPEED_HIGH(PI02_SPI2_MISO) | \
PIN_OSPEED_SPEED_HIGH(PI03_SPI2_MOSI) | \
PIN_OSPEED_SPEED_HIGH(PI04_SPI_SLAVE8) | \
PIN_OSPEED_SPEED_HIGH(PI05_RC_INPUT) | \
PIN_OSPEED_SPEED_HIGH(PI05_PWM_INPUT1) | \
PIN_OSPEED_SPEED_HIGH(PI06_SPI_SLAVE9) | \
PIN_OSPEED_SPEED_HIGH(PI07_SPI_SLAVE10) | \
PIN_OSPEED_SPEED_HIGH(PI08_SPI_SLAVE11) | \
@@ -1309,7 +1309,7 @@
PIN_PUPDR_FLOATING(PI02_SPI2_MISO) | \
PIN_PUPDR_FLOATING(PI03_SPI2_MOSI) | \
PIN_PUPDR_FLOATING(PI04_SPI_SLAVE8) | \
PIN_PUPDR_FLOATING(PI05_RC_INPUT) | \
PIN_PUPDR_FLOATING(PI05_PWM_INPUT1) | \
PIN_PUPDR_FLOATING(PI06_SPI_SLAVE9) | \
PIN_PUPDR_FLOATING(PI07_SPI_SLAVE10) | \
PIN_PUPDR_FLOATING(PI08_SPI_SLAVE11) | \
@@ -1326,7 +1326,7 @@
PIN_ODR_LEVEL_HIGH(PI02_SPI2_MISO) | \
PIN_ODR_LEVEL_HIGH(PI03_SPI2_MOSI) | \
PIN_ODR_LEVEL_HIGH(PI04_SPI_SLAVE8) | \
PIN_ODR_LEVEL_HIGH(PI05_RC_INPUT) | \
PIN_ODR_LEVEL_HIGH(PI05_PWM_INPUT1) | \
PIN_ODR_LEVEL_HIGH(PI06_SPI_SLAVE9) | \
PIN_ODR_LEVEL_HIGH(PI07_SPI_SLAVE10) | \
PIN_ODR_LEVEL_HIGH(PI08_SPI_SLAVE11) | \
@@ -1343,7 +1343,7 @@
PIN_AFIO_AF(PI02_SPI2_MISO, 5) | \
PIN_AFIO_AF(PI03_SPI2_MOSI, 5) | \
PIN_AFIO_AF(PI04_SPI_SLAVE8, 0) | \
PIN_AFIO_AF(PI05_RC_INPUT, 3) | \
PIN_AFIO_AF(PI05_PWM_INPUT1, 3) | \
PIN_AFIO_AF(PI06_SPI_SLAVE9, 0) | \
PIN_AFIO_AF(PI07_SPI_SLAVE10, 0))
@@ -1690,8 +1690,8 @@
#define AF_LINE_SPI2_MISO 5U
#define AF_PI03_SPI2_MOSI 5U
#define AF_LINE_SPI2_MOSI 5U
#define AF_PI05_RC_INPUT 3U
#define AF_LINE_RC_INPUT 3U
#define AF_PI05_PWM_INPUT1 3U
#define AF_LINE_PWM_INPUT1 3U
#define AF_PI09_CAN1_RX 9U
#define AF_LINE_CAN1_RX 9U
@@ -1761,6 +1761,10 @@
#define SERVO8_TIM_FN CH
#define SERVO8_TIM_CH 2
#define SERVO8_TIM_AF 9
#define PWM_INPUT1_TIM 8
#define PWM_INPUT1_TIM_FN CH
#define PWM_INPUT1_TIM_CH 1
#define PWM_INPUT1_TIM_AF 3
#define BOARD_GROUP_DECLFOREACH(line, group) \
static const ioline_t group ## _ARRAY[] = {group}; \
@@ -1777,15 +1781,6 @@
#define BOARD_GROUP_FOR(array, index, group) \
for (ioline_t index=0, *array = (ioline_t *) group ## _ARRAY; index < group ## _SIZE; index++)
#define ENERGY_SAVE_LOWS \
LINE_V3V3_SENSORS_EN, \
LINE_V3V3_SPEKTRUM_EN, \
LINE_V5V_HIPOWER_EN, \
LINE_V5V_PERIPH_EN, \
LINE_V5V_RC_EN, \
LINE_V5V_WIFI_EN
#define ENERGY_SAVE_LOWS_SIZE 6
#define ENERGY_SAVE_INPUTS \
LINE_SERVO2, \
LINE_LED1, \
@@ -1818,6 +1813,15 @@
LINE_SPI_SLAVE13
#define ENERGY_SAVE_INPUTS_SIZE 29
#define ENERGY_SAVE_LOWS \
LINE_V3V3_SENSORS_EN, \
LINE_V3V3_SPEKTRUM_EN, \
LINE_V5V_HIPOWER_EN, \
LINE_V5V_PERIPH_EN, \
LINE_V5V_RC_EN, \
LINE_V5V_WIFI_EN
#define ENERGY_SAVE_LOWS_SIZE 6
#if !defined(_FROM_ASM_)
#ifdef __cplusplus
extern "C" {