stm32: Add support for G0 MCUs.

This commit adds support for the STM32G0 series of MCUs.

Signed-off-by: Asensio Lorenzo Sempere <asensio.aerospace@gmail.com>
This commit is contained in:
Asensio Lorenzo Sempere
2022-02-12 14:36:58 -06:00
committed by Damien George
parent 3587d8e808
commit 010012c7c3
26 changed files with 719 additions and 110 deletions

View File

@@ -529,7 +529,7 @@ void TAMP_STAMP_IRQHandler(void) {
void RTC_WKUP_IRQHandler(void) {
IRQ_ENTER(RTC_WKUP_IRQn);
#if defined(STM32G4) || defined(STM32WL)
#if defined(STM32G0) || defined(STM32G4) || defined(STM32WL)
RTC->MISR &= ~RTC_MISR_WUTMF; // clear wakeup interrupt flag
#elif defined(STM32H7A3xx) || defined(STM32H7A3xxQ) || defined(STM32H7B3xx) || defined(STM32H7B3xxQ)
RTC->SR &= ~RTC_SR_WUTF; // clear wakeup interrupt flag
@@ -540,8 +540,17 @@ void RTC_WKUP_IRQHandler(void) {
IRQ_EXIT(RTC_WKUP_IRQn);
}
#if defined(STM32F0) || defined(STM32L0)
#if defined(STM32F0) || defined(STM32G0) || defined(STM32L0)
#if defined(STM32G0)
void RTC_TAMP_IRQHandler(void) {
IRQ_ENTER(RTC_TAMP_IRQn);
RTC->MISR &= ~RTC_MISR_WUTMF; // clear wakeup interrupt flag
Handle_EXTI_Irq(EXTI_RTC_WAKEUP); // clear EXTI flag and execute optional callback
Handle_EXTI_Irq(EXTI_RTC_TIMESTAMP); // clear EXTI flag and execute optional callback
IRQ_EXIT(RTC_TAMP_IRQn);
}
#else
void RTC_IRQHandler(void) {
IRQ_ENTER(RTC_IRQn);
if (RTC->ISR & RTC_ISR_WUTF) {
@@ -558,6 +567,7 @@ void RTC_IRQHandler(void) {
}
IRQ_EXIT(RTC_IRQn);
}
#endif
void EXTI0_1_IRQHandler(void) {
IRQ_ENTER(EXTI0_1_IRQn);
@@ -653,6 +663,15 @@ void TIM2_IRQHandler(void) {
IRQ_EXIT(TIM2_IRQn);
}
#if defined(STM32G0)
void TIM3_TIM4_IRQHandler(void) {
IRQ_ENTER(TIM3_TIM4_IRQn);
timer_irq_handler(3);
timer_irq_handler(4);
IRQ_EXIT(TIM3_TIM4_IRQn);
}
#else
void TIM3_IRQHandler(void) {
IRQ_ENTER(TIM3_IRQn);
timer_irq_handler(3);
@@ -664,6 +683,7 @@ void TIM4_IRQHandler(void) {
timer_irq_handler(4);
IRQ_EXIT(TIM4_IRQn);
}
#endif
void TIM5_IRQHandler(void) {
IRQ_ENTER(TIM5_IRQn);
@@ -673,15 +693,29 @@ void TIM5_IRQHandler(void) {
}
#if defined(TIM6) // STM32F401 doesn't have TIM6
#if defined(STM32G0)
void TIM6_DAC_LPTIM1_IRQHandler(void) {
IRQ_ENTER(TIM6_DAC_LPTIM1_IRQn);
timer_irq_handler(6);
IRQ_EXIT(TIM6_DAC_LPTIM1_IRQn);
}
#else
void TIM6_DAC_IRQHandler(void) {
IRQ_ENTER(TIM6_DAC_IRQn);
timer_irq_handler(6);
IRQ_EXIT(TIM6_DAC_IRQn);
}
#endif
#endif
#if defined(TIM7) // STM32F401 doesn't have TIM7
#if defined(STM32G4)
#if defined(STM32G0)
void TIM7_LPTIM2_IRQHandler(void) {
IRQ_ENTER(TIM7_LPTIM2_IRQn);
timer_irq_handler(7);
IRQ_EXIT(TIM7_LPTIM2_IRQn);
}
#elif defined(STM32G4)
void TIM7_DAC_IRQHandler(void) {
IRQ_ENTER(TIM7_DAC_IRQn);
timer_irq_handler(7);
@@ -731,6 +765,32 @@ void TIM8_TRG_COM_TIM14_IRQHandler(void) {
}
#endif
#if defined(STM32G0)
void TIM14_IRQHandler(void) {
IRQ_ENTER(TIM14_IRQn);
timer_irq_handler(14);
IRQ_EXIT(TIM14_IRQn);
}
void TIM15_IRQHandler(void) {
IRQ_ENTER(TIM15_IRQn);
timer_irq_handler(15);
IRQ_EXIT(TIM15_IRQn);
}
void TIM16_FDCAN_IT0_IRQHandler(void) {
IRQ_ENTER(TIM16_FDCAN_IT0_IRQn);
timer_irq_handler(16);
IRQ_EXIT(TIM16_FDCAN_IT0_IRQn);
}
void TIM17_FDCAN_IT1_IRQHandler(void) {
IRQ_ENTER(TIM17_FDCAN_IT1_IRQn);
timer_irq_handler(17);
IRQ_EXIT(TIM17_FDCAN_IT1_IRQn);
}
#endif
#if defined(STM32H7)
void TIM15_IRQHandler(void) {
IRQ_ENTER(TIM15_IRQn);
@@ -779,6 +839,29 @@ void USART3_8_IRQHandler(void) {
IRQ_EXIT(USART3_8_IRQn);
}
#elif defined(STM32G0)
#if defined(STM32G0B1xx) || defined(STM32G0C1xx)
void USART2_LPUART2_IRQHandler(void) {
IRQ_ENTER(USART2_LPUART2_IRQn);
uart_irq_handler(2);
uart_irq_handler(PYB_LPUART_2);
IRQ_EXIT(USART2_LPUART2_IRQn);
}
void USART3_4_5_6_LPUART1_IRQHandler(void) {
IRQ_ENTER(USART3_4_5_6_LPUART1_IRQn);
uart_irq_handler(3);
uart_irq_handler(4);
uart_irq_handler(5);
uart_irq_handler(6);
uart_irq_handler(PYB_LPUART_1);
IRQ_EXIT(USART3_4_5_6_LPUART1_IRQn);
}
#else
#error Unsupported processor
#endif
#elif defined(STM32L0)
void USART4_5_IRQHandler(void) {
@@ -798,6 +881,14 @@ void USART3_IRQHandler(void) {
}
#endif
#if defined(USART4)
void USART4_IRQHandler(void) {
IRQ_ENTER(USART4_IRQn);
uart_irq_handler(4);
IRQ_EXIT(USART4_IRQn);
}
#endif
#if defined(UART4)
void UART4_IRQHandler(void) {
IRQ_ENTER(UART4_IRQn);
@@ -806,6 +897,14 @@ void UART4_IRQHandler(void) {
}
#endif
#if defined(USART5)
void USART5_IRQHandler(void) {
IRQ_ENTER(USART5_IRQn);
uart_irq_handler(5);
IRQ_EXIT(USART5_IRQn);
}
#endif
#if defined(UART5)
void UART5_IRQHandler(void) {
IRQ_ENTER(UART5_IRQn);
@@ -864,6 +963,14 @@ void LPUART1_IRQHandler(void) {
}
#endif
#if defined(LPUART2)
void LPUART2_IRQHandler(void) {
IRQ_ENTER(LPUART2_IRQn);
uart_irq_handler(PYB_LPUART_2);
IRQ_EXIT(LPUART2_IRQn);
}
#endif
#if MICROPY_PY_PYB_LEGACY
#if defined(MICROPY_HW_I2C1_SCL)