aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/ports/STM32/LLD/ext_lld.c
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2014-03-19 15:13:24 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2014-03-19 15:13:24 +0000
commitc90c3286061fcbff0c19b46c3cfa6e20cc177a99 (patch)
treeeea9c3090148a91801138f3f1a9e404d4fd6a71c /os/hal/ports/STM32/LLD/ext_lld.c
parentc322035d6b195ef2032c25253fdda5bd831bee7c (diff)
downloadChibiOS-c90c3286061fcbff0c19b46c3cfa6e20cc177a99.tar.gz
ChibiOS-c90c3286061fcbff0c19b46c3cfa6e20cc177a99.tar.bz2
ChibiOS-c90c3286061fcbff0c19b46c3cfa6e20cc177a99.zip
Fixed bug #477.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6794 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal/ports/STM32/LLD/ext_lld.c')
-rw-r--r--os/hal/ports/STM32/LLD/ext_lld.c31
1 files changed, 15 insertions, 16 deletions
diff --git a/os/hal/ports/STM32/LLD/ext_lld.c b/os/hal/ports/STM32/LLD/ext_lld.c
index 80b222124..8457db1cb 100644
--- a/os/hal/ports/STM32/LLD/ext_lld.c
+++ b/os/hal/ports/STM32/LLD/ext_lld.c
@@ -119,6 +119,21 @@ void ext_lld_stop(EXTDriver *extp) {
*/
void ext_lld_channel_enable(EXTDriver *extp, expchannel_t channel) {
+ /* Setting the associated GPIO for external channels.*/
+ if (channel < 16) {
+ uint32_t n = channel >> 2;
+ uint32_t mask = ~(0xF << ((channel & 3) * 4));
+ uint32_t port = ((extp->config->channels[channel].mode &
+ EXT_MODE_GPIO_MASK) >>
+ EXT_MODE_GPIO_OFF) << ((channel & 3) * 4);
+
+#if defined(STM32F1XX)
+ AFIO->EXTICR[n] = (AFIO->EXTICR[n] & mask) | port;
+#else /* !defined(STM32F1XX) */
+ SYSCFG->EXTICR[n] = (SYSCFG->EXTICR[n] & mask) | port;
+#endif /* !defined(STM32F1XX) */
+ }
+
#if STM32_EXTI_NUM_CHANNELS > 32
if (channel < 32) {
#endif
@@ -165,22 +180,6 @@ void ext_lld_channel_enable(EXTDriver *extp, expchannel_t channel) {
}
}
#endif
-
- /* Setting the associated GPIO for external channels.*/
- if (channel < 16) {
- uint32_t n = channel >> 2;
- uint32_t mask = ~(0xF << ((channel & 3) * 4));
- uint32_t port = ((extp->config->channels[channel].mode &
- EXT_MODE_GPIO_MASK) >>
- EXT_MODE_GPIO_OFF) << ((channel & 3) * 4);
-
-#if defined(STM32L1XX_MD) || defined(STM32F0XX) || defined(STM32F2XX) || \
- defined(STM32F30X) || defined(STM32F37X) || defined(STM32F4XX)
- SYSCFG->EXTICR[n] = (SYSCFG->EXTICR[n] & mask) | port;
-#else /* STM32F1XX */
- AFIO->EXTICR[n] = (AFIO->EXTICR[n] & mask) | port;
-#endif /* STM32F1XX */
- }
}
/**