diff options
author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2014-03-19 15:13:11 +0000 |
---|---|---|
committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2014-03-19 15:13:11 +0000 |
commit | 824a2d427ae201da05d5af5427c949a9a362f5cb (patch) | |
tree | 333456b70881a122421297b2d97242395efe9f26 /os | |
parent | 7e778da6b0ac408d377da7e539d095ca7e796c53 (diff) | |
download | ChibiOS-824a2d427ae201da05d5af5427c949a9a362f5cb.tar.gz ChibiOS-824a2d427ae201da05d5af5427c949a9a362f5cb.tar.bz2 ChibiOS-824a2d427ae201da05d5af5427c949a9a362f5cb.zip |
Fixed bug #477.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@6792 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os')
-rw-r--r-- | os/hal/platforms/STM32/ext_lld.c | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/os/hal/platforms/STM32/ext_lld.c b/os/hal/platforms/STM32/ext_lld.c index 970e0ce8e..0968fa3a1 100644 --- a/os/hal/platforms/STM32/ext_lld.c +++ b/os/hal/platforms/STM32/ext_lld.c @@ -120,6 +120,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
@@ -166,22 +181,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 */
- }
}
/**
|