diff options
Diffstat (limited to 'platforms')
-rw-r--r-- | platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h | 2 | ||||
-rw-r--r-- | platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h | 23 | ||||
-rw-r--r-- | platforms/chibios/boards/common/configs/chconf.h | 23 | ||||
-rw-r--r-- | platforms/chibios/drivers/audio_pwm_hardware.c | 18 | ||||
-rw-r--r-- | platforms/chibios/timer.c | 4 | ||||
-rw-r--r-- | platforms/timer.h | 7 |
6 files changed, 64 insertions, 13 deletions
diff --git a/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h index 0239ec5273..09096c3977 100644 --- a/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_H723XG/configs/mcuconf.h @@ -182,6 +182,7 @@ #define STM32_IRQ_FDCAN1_PRIORITY 10 #define STM32_IRQ_FDCAN2_PRIORITY 10 +#define STM32_IRQ_FDCAN3_PRIORITY 10 #define STM32_IRQ_MDMA_PRIORITY 9 @@ -235,6 +236,7 @@ */ #define STM32_CAN_USE_FDCAN1 FALSE #define STM32_CAN_USE_FDCAN2 FALSE +#define STM32_CAN_USE_FDCAN3 FALSE /* * DAC driver system settings. diff --git a/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h b/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h index cc10304a3f..e92b7aeb98 100644 --- a/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h +++ b/platforms/chibios/boards/QMK_PROTON_C/configs/chconf.h @@ -49,6 +49,19 @@ #define CH_CFG_SMP_MODE FALSE #endif +/** + * @brief Kernel hardening level. + * @details This option is the level of functional-safety checks enabled + * in the kerkel. The meaning is: + * - 0: No checks, maximum performance. + * - 1: Reasonable checks. + * - 2: All checks. + * . + */ +#if !defined(CH_CFG_HARDENING_LEVEL) +#define CH_CFG_HARDENING_LEVEL 0 +#endif + /** @} */ /*===========================================================================*/ @@ -361,6 +374,16 @@ #endif /** + * @brief Memory checks APIs. + * @details If enabled then the memory checks APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MEMCHECKS) +#define CH_CFG_USE_MEMCHECKS TRUE +#endif + +/** * @brief Core Memory Manager APIs. * @details If enabled then the core memory manager APIs are included * in the kernel. diff --git a/platforms/chibios/boards/common/configs/chconf.h b/platforms/chibios/boards/common/configs/chconf.h index 5db836e37c..6381298ef7 100644 --- a/platforms/chibios/boards/common/configs/chconf.h +++ b/platforms/chibios/boards/common/configs/chconf.h @@ -49,6 +49,19 @@ #define CH_CFG_SMP_MODE FALSE #endif +/** + * @brief Kernel hardening level. + * @details This option is the level of functional-safety checks enabled + * in the kerkel. The meaning is: + * - 0: No checks, maximum performance. + * - 1: Reasonable checks. + * - 2: All checks. + * . + */ +#if !defined(CH_CFG_HARDENING_LEVEL) +#define CH_CFG_HARDENING_LEVEL 0 +#endif + /** @} */ /*===========================================================================*/ @@ -361,6 +374,16 @@ #endif /** + * @brief Memory checks APIs. + * @details If enabled then the memory checks APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MEMCHECKS) +#define CH_CFG_USE_MEMCHECKS TRUE +#endif + +/** * @brief Core Memory Manager APIs. * @details If enabled then the core memory manager APIs are included * in the kernel. diff --git a/platforms/chibios/drivers/audio_pwm_hardware.c b/platforms/chibios/drivers/audio_pwm_hardware.c index 1ba7ec13bc..afa341abb6 100644 --- a/platforms/chibios/drivers/audio_pwm_hardware.c +++ b/platforms/chibios/drivers/audio_pwm_hardware.c @@ -41,18 +41,19 @@ static float channel_1_frequency = 0.0f; void channel_1_set_frequency(float freq) { channel_1_frequency = freq; + pwmcnt_t period; + pwmcnt_t width; if (freq <= 0.0) { - // a pause/rest has freq=0 - return; + period = 2; + width = 0; + } else { + period = (pwmCFG.frequency / freq); + width = (pwmcnt_t)(((period) * (pwmcnt_t)((100 - note_timbre) * 100)) / (pwmcnt_t)(10000)); } - - pwmcnt_t period = (pwmCFG.frequency / freq); chSysLockFromISR(); pwmChangePeriodI(&AUDIO_PWM_DRIVER, period); - pwmEnableChannelI(&AUDIO_PWM_DRIVER, AUDIO_PWM_CHANNEL - 1, - // adjust the duty-cycle so that the output is for 'note_timbre' duration HIGH - PWM_PERCENTAGE_TO_WIDTH(&AUDIO_PWM_DRIVER, (100 - note_timbre) * 100)); + pwmEnableChannelI(&AUDIO_PWM_DRIVER, AUDIO_PWM_CHANNEL - 1, width); chSysUnlockFromISR(); } @@ -67,6 +68,9 @@ void channel_1_start(void) { void channel_1_stop(void) { pwmStop(&AUDIO_PWM_DRIVER); + pwmStart(&AUDIO_PWM_DRIVER, &pwmCFG); + pwmEnableChannel(&AUDIO_PWM_DRIVER, AUDIO_PWM_CHANNEL - 1, 0); + pwmStop(&AUDIO_PWM_DRIVER); } static virtual_timer_t audio_vt; diff --git a/platforms/chibios/timer.c b/platforms/chibios/timer.c index 4a347b445d..a07cf5714f 100644 --- a/platforms/chibios/timer.c +++ b/platforms/chibios/timer.c @@ -99,7 +99,7 @@ uint16_t timer_read(void) { } uint32_t timer_read32(void) { - chSysLock(); + syssts_t sts = chSysGetStatusAndLockX(); uint32_t ticks = get_system_time_ticks() - ticks_offset; if (ticks < last_ticks) { // The 32-bit tick counter overflowed and wrapped around. We cannot just extend the counter to 64 bits here, @@ -114,7 +114,7 @@ uint32_t timer_read32(void) { } last_ticks = ticks; uint32_t ms_offset_copy = ms_offset; // read while still holding the lock to ensure a consistent value - chSysUnlock(); + chSysRestoreStatusX(sts); return (uint32_t)TIME_I2MS(ticks) + ms_offset_copy; } diff --git a/platforms/timer.h b/platforms/timer.h index fb8ff6bc54..8a2ffd476b 100644 --- a/platforms/timer.h +++ b/platforms/timer.h @@ -24,10 +24,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include <stdint.h> -#define TIMER_DIFF(a, b, max) ((max == UINT8_MAX) ? ((uint8_t)((a) - (b))) : ((max == UINT16_MAX) ? ((uint16_t)((a) - (b))) : ((max == UINT32_MAX) ? ((uint32_t)((a) - (b))) : ((a) >= (b) ? (a) - (b) : (max) + 1 - (b) + (a))))) -#define TIMER_DIFF_8(a, b) TIMER_DIFF(a, b, UINT8_MAX) -#define TIMER_DIFF_16(a, b) TIMER_DIFF(a, b, UINT16_MAX) -#define TIMER_DIFF_32(a, b) TIMER_DIFF(a, b, UINT32_MAX) +#define TIMER_DIFF_8(a, b) (uint8_t)((a) - (b)) +#define TIMER_DIFF_16(a, b) (uint16_t)((a) - (b)) +#define TIMER_DIFF_32(a, b) (uint32_t)((a) - (b)) #define TIMER_DIFF_RAW(a, b) TIMER_DIFF_8(a, b) #ifdef __cplusplus |