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 | |
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
-rw-r--r-- | os/hal/platforms/STM32/ext_lld.c | 31 | ||||
-rw-r--r-- | readme.txt | 2 |
2 files changed, 17 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 */
- }
}
/**
diff --git a/readme.txt b/readme.txt index a4b36f339..f22d5d91f 100644 --- a/readme.txt +++ b/readme.txt @@ -89,6 +89,8 @@ *****************************************************************************
*** 2.7.0 ***
+- FIX: Fixed spurious callback in STM32 EXT driver (bug #477)(backported
+ to 2.6.4).
- FIX: Fixed several macro errors in STM32L1xx HAL driver (bug #476)
(backported to 2.6.4).
- FIX: Fixed wrong STM32 RTCv2 alarms implementation (bug #475)(backported
|