diff --git a/lib/stm32/exti2.c b/lib/stm32/exti.c similarity index 80% rename from lib/stm32/exti2.c rename to lib/stm32/exti.c index 8736d851..f571edda 100644 --- a/lib/stm32/exti2.c +++ b/lib/stm32/exti.c @@ -22,18 +22,10 @@ */ #include +#if defined(STM32L1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) #include -#if defined(STM32F2) -#include -#elif defined(STM32F3) -#include -#elif defined(STM32F4) -#include -#elif defined(STM32L1) -#include -#else -#error "invalid/unknown stm32 family for this code" #endif +#include void exti_set_trigger(uint32_t extis, exti_trigger_type trig) { @@ -143,28 +135,44 @@ void exti_select_source(uint32_t exti, uint32_t gpioport) case GPIOE: bits = 0xb; break; -#if !defined(STM32L1) +#if defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) case GPIOF: bits = 0xa; break; -#if !defined(STM32F3) +#endif +#if defined(STM32F1) || defined(STM32F2) || defined(STM32F4) case GPIOG: bits = 0x9; break; #endif -#endif -#if !defined(STM32F3) +#if defined(STM32L1) || defined(STM32F2) || defined(STM32F4) case GPIOH: bits = 0x8; break; -#if !defined(STM32L1) +#endif +#if defined(STM32F2) || defined(STM32F4) case GPIOI: bits = 0x7; break; -#endif #endif } +#if defined(STM32F1) + /* Ensure that only valid EXTI lines are used. */ + if (exti < EXTI4) { + AFIO_EXTICR1 &= ~(0x000F << shift); + AFIO_EXTICR1 |= (~bits << shift); + } else if (exti < EXTI8) { + AFIO_EXTICR2 &= ~(0x000F << shift); + AFIO_EXTICR2 |= (~bits << shift); + } else if (exti < EXTI12) { + AFIO_EXTICR3 &= ~(0x000F << shift); + AFIO_EXTICR3 |= (~bits << shift); + } else if (exti < EXTI16) { + AFIO_EXTICR4 &= ~(0x000F << shift); + AFIO_EXTICR4 |= (~bits << shift); + } +#else /* Ensure that only valid EXTI lines are used. */ if (exti < EXTI4) { SYSCFG_EXTICR1 &= ~(0x000F << shift); @@ -179,4 +187,5 @@ void exti_select_source(uint32_t exti, uint32_t gpioport) SYSCFG_EXTICR4 &= ~(0x000F << shift); SYSCFG_EXTICR4 |= (~bits << shift); } +#endif } diff --git a/lib/stm32/f1/exti.c b/lib/stm32/f1/exti.c deleted file mode 100644 index 1cbb3c44..00000000 --- a/lib/stm32/f1/exti.c +++ /dev/null @@ -1,153 +0,0 @@ -/* - * This file is part of the libopencm3 project. - * - * Copyright (C) 2010 Mark Butler - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - */ - -#include -#include - -void exti_set_trigger(uint32_t extis, exti_trigger_type trig) -{ - switch (trig) { - case EXTI_TRIGGER_RISING: - EXTI_RTSR |= extis; - EXTI_FTSR &= ~extis; - break; - case EXTI_TRIGGER_FALLING: - EXTI_RTSR &= ~extis; - EXTI_FTSR |= extis; - break; - case EXTI_TRIGGER_BOTH: - EXTI_RTSR |= extis; - EXTI_FTSR |= extis; - break; - } -} - -void exti_enable_request(uint32_t extis) -{ - /* Enable interrupts. */ - EXTI_IMR |= extis; - - /* Enable events. */ - EXTI_EMR |= extis; -} - -void exti_disable_request(uint32_t extis) -{ - /* Disable interrupts. */ - EXTI_IMR &= ~extis; - - /* Disable events. */ - EXTI_EMR &= ~extis; -} - -/* - * Reset the interrupt request by writing a 1 to the corresponding - * pending bit register. - */ -void exti_reset_request(uint32_t extis) -{ - EXTI_PR |= extis; -} - -/* - * Check the flag of a given EXTI interrupt. - * */ -uint32_t exti_get_flag_status(uint32_t exti) -{ - return EXTI_PR & exti; -} - -/* - * Remap an external interrupt line to the corresponding pin on the - * specified GPIO port. - * - * TODO: This could be rewritten in fewer lines of code. - */ -void exti_select_source(uint32_t exti, uint32_t gpioport) -{ - uint8_t shift, bits; - - shift = bits = 0; - - switch (exti) { - case EXTI0: - case EXTI4: - case EXTI8: - case EXTI12: - shift = 0; - break; - case EXTI1: - case EXTI5: - case EXTI9: - case EXTI13: - shift = 4; - break; - case EXTI2: - case EXTI6: - case EXTI10: - case EXTI14: - shift = 8; - break; - case EXTI3: - case EXTI7: - case EXTI11: - case EXTI15: - shift = 12; - break; - } - - switch (gpioport) { - case GPIOA: - bits = 0xf; - break; - case GPIOB: - bits = 0xe; - break; - case GPIOC: - bits = 0xd; - break; - case GPIOD: - bits = 0xc; - break; - case GPIOE: - bits = 0xb; - break; - case GPIOF: - bits = 0xa; - break; - case GPIOG: - bits = 0x9; - break; - } - - /* Ensure that only valid EXTI lines are used. */ - if (exti < EXTI4) { - AFIO_EXTICR1 &= ~(0x000F << shift); - AFIO_EXTICR1 |= (~bits << shift); - } else if (exti < EXTI8) { - AFIO_EXTICR2 &= ~(0x000F << shift); - AFIO_EXTICR2 |= (~bits << shift); - } else if (exti < EXTI12) { - AFIO_EXTICR3 &= ~(0x000F << shift); - AFIO_EXTICR3 |= (~bits << shift); - } else if (exti < EXTI16) { - AFIO_EXTICR4 &= ~(0x000F << shift); - AFIO_EXTICR4 |= (~bits << shift); - } -} diff --git a/lib/stm32/f2/Makefile b/lib/stm32/f2/Makefile index ee945601..5e629e15 100644 --- a/lib/stm32/f2/Makefile +++ b/lib/stm32/f2/Makefile @@ -33,7 +33,7 @@ CFLAGS = -Os -g \ # ARFLAGS = rcsv ARFLAGS = rcs -OBJS = gpio.o exti2.o rcc.o +OBJS = gpio.o exti.o rcc.o OBJS += crc_common_all.o dac_common_all.o dma_common_f24.o \ gpio_common_all.o gpio_common_f234.o i2c_common_all.o \ diff --git a/lib/stm32/f3/Makefile b/lib/stm32/f3/Makefile index 6775a4f1..30b91192 100644 --- a/lib/stm32/f3/Makefile +++ b/lib/stm32/f3/Makefile @@ -34,7 +34,7 @@ CFLAGS = -Os -g \ # ARFLAGS = rcsv ARFLAGS = rcs -OBJS = rcc.o gpio.o adc.o exti2.o i2c.o spi.o usart.o +OBJS = rcc.o gpio.o adc.o exti.o i2c.o spi.o usart.o OBJS += gpio_common_all.o gpio_common_f234.o \ dac_common_all.o usart_common_all.o crc_common_all.o\ diff --git a/lib/stm32/f4/Makefile b/lib/stm32/f4/Makefile index 547d7ac4..a31f9e99 100644 --- a/lib/stm32/f4/Makefile +++ b/lib/stm32/f4/Makefile @@ -34,7 +34,7 @@ CFLAGS = -Os -g \ # ARFLAGS = rcsv ARFLAGS = rcs -OBJS = adc.o can.o gpio.o exti2.o pwr.o rcc.o rtc.o crypto.o +OBJS = adc.o can.o gpio.o exti.o pwr.o rcc.o rtc.o crypto.o OBJS += crc_common_all.o dac_common_all.o dma_common_f24.o \ gpio_common_all.o gpio_common_f234.o i2c_common_all.o \ diff --git a/lib/stm32/l1/Makefile b/lib/stm32/l1/Makefile index ff3a133b..0cb5b47c 100644 --- a/lib/stm32/l1/Makefile +++ b/lib/stm32/l1/Makefile @@ -32,7 +32,7 @@ CFLAGS = -Os -g \ -ffunction-sections -fdata-sections -MD -DSTM32L1 # ARFLAGS = rcsv ARFLAGS = rcs -OBJS = crc.o desig.o exti2.o flash.o rcc.o usart.o +OBJS = crc.o desig.o exti.o flash.o rcc.o usart.o OBJS += crc_common_all.o dac_common_all.o OBJS += dma_common_f13.o OBJS += gpio_common_all.o gpio_common_f234.o