Revision eedb8e58 kernel/patches/QEI-driver.patch
kernel/patches/QEI-driver.patch | ||
---|---|---|
1 |
commit a23878ddb85bb8fd069f02042f15ad4be2a0d709 |
|
2 |
Author: Marc Rothmann <mrothmann@techfak.uni-bielefeld.de> |
|
3 |
Date: Mon Sep 17 11:40:39 2018 +0200 |
|
4 |
|
|
5 |
Added QEI driver to HAL. |
|
6 |
|
|
7 | 1 |
diff --git a/os/hal/hal.mk b/os/hal/hal.mk |
8 | 2 |
index f177a3f..64d96d9 100644 |
9 | 3 |
--- a/os/hal/hal.mk |
10 | 4 |
+++ b/os/hal/hal.mk |
11 | 5 |
@@ -41,6 +41,9 @@ endif |
12 |
ifneq ($(findstring HAL_USE_ICU TRUE,$(HALCONF)),)
|
|
13 |
HALSRC += $(CHIBIOS)/os/hal/src/hal_icu.c
|
|
14 |
endif
|
|
15 |
+ifneq ($(findstring HAL_USE_QEI TRUE,$(HALCONF)),)
|
|
16 |
+HALSRC += $(CHIBIOS)/os/hal/src/hal_qei.c
|
|
17 |
+endif
|
|
18 |
ifneq ($(findstring HAL_USE_MAC TRUE,$(HALCONF)),)
|
|
19 |
HALSRC += $(CHIBIOS)/os/hal/src/hal_mac.c
|
|
20 |
endif
|
|
6 |
ifneq ($(findstring HAL_USE_ICU TRUE,$(HALCONF)),) |
|
7 |
HALSRC += $(CHIBIOS)/os/hal/src/hal_icu.c |
|
8 |
endif |
|
9 |
+ifneq ($(findstring HAL_USE_QEI TRUE,$(HALCONF)),) |
|
10 |
+HALSRC += $(CHIBIOS)/os/hal/src/hal_qei.c |
|
11 |
+endif |
|
12 |
ifneq ($(findstring HAL_USE_MAC TRUE,$(HALCONF)),) |
|
13 |
HALSRC += $(CHIBIOS)/os/hal/src/hal_mac.c |
|
14 |
endif |
|
21 | 15 |
@@ -94,6 +97,7 @@ HALSRC = $(CHIBIOS)/os/hal/src/hal.c \ |
22 |
$(CHIBIOS)/os/hal/src/hal_i2c.c \ |
|
23 |
$(CHIBIOS)/os/hal/src/hal_i2s.c \ |
|
24 |
$(CHIBIOS)/os/hal/src/hal_icu.c \ |
|
25 |
+ $(CHIBIOS)/os/hal/src/hal_qei.c \ |
|
26 |
$(CHIBIOS)/os/hal/src/hal_mac.c \ |
|
27 |
$(CHIBIOS)/os/hal/src/hal_mmc_spi.c \ |
|
28 |
$(CHIBIOS)/os/hal/src/hal_pal.c \ |
|
16 |
$(CHIBIOS)/os/hal/src/hal_i2c.c \ |
|
17 |
$(CHIBIOS)/os/hal/src/hal_i2s.c \ |
|
18 |
$(CHIBIOS)/os/hal/src/hal_icu.c \ |
|
19 |
+ $(CHIBIOS)/os/hal/src/hal_qei.c \ |
|
20 |
$(CHIBIOS)/os/hal/src/hal_mac.c \ |
|
21 |
$(CHIBIOS)/os/hal/src/hal_mmc_spi.c \ |
|
22 |
$(CHIBIOS)/os/hal/src/hal_pal.c \ |
|
23 |
diff --git a/os/hal/include/hal.h b/os/hal/include/hal.h |
|
24 |
index 79f7c42..8cf221f 100644 |
|
25 |
--- a/os/hal/include/hal.h |
|
26 |
+++ b/os/hal/include/hal.h |
|
27 |
@@ -78,6 +78,10 @@ |
|
28 |
#define HAL_USE_PWM FALSE |
|
29 |
#endif |
|
30 |
|
|
31 |
+#if !defined(HAL_USE_QEI) |
|
32 |
+#define HAL_USE_QEI FALSE |
|
33 |
+#endif |
|
34 |
+ |
|
35 |
#if !defined(HAL_USE_QSPI) |
|
36 |
#define HAL_USE_QSPI FALSE |
|
37 |
#endif |
|
38 |
@@ -138,6 +142,7 @@ |
|
39 |
#include "hal_icu.h" |
|
40 |
#include "hal_mac.h" |
|
41 |
#include "hal_pwm.h" |
|
42 |
+#include "hal_qei.h" |
|
43 |
#include "hal_qspi.h" |
|
44 |
#include "hal_rtc.h" |
|
45 |
#include "hal_serial.h" |
|
29 | 46 |
diff --git a/os/hal/include/hal_qei.h b/os/hal/include/hal_qei.h |
30 | 47 |
new file mode 100644 |
31 |
index 0000000..aef5e62
|
|
48 |
index 0000000..8769729
|
|
32 | 49 |
--- /dev/null |
33 | 50 |
+++ b/os/hal/include/hal_qei.h |
34 | 51 |
@@ -0,0 +1,148 @@ |
... | ... | |
58 | 75 |
+ * @{ |
59 | 76 |
+ */ |
60 | 77 |
+ |
61 |
+#ifndef _HAL_QEI_H_
|
|
62 |
+#define _HAL_QEI_H_
|
|
78 |
+#ifndef HAL_QEI_H
|
|
79 |
+#define HAL_QEI_H
|
|
63 | 80 |
+ |
64 |
+#if HAL_USE_QEI || defined(__DOXYGEN__)
|
|
81 |
+#if (HAL_USE_QEI == TRUE) || defined(__DOXYGEN__)
|
|
65 | 82 |
+ |
66 | 83 |
+/*===========================================================================*/ |
67 | 84 |
+/* Driver constants. */ |
... | ... | |
177 | 194 |
+ |
178 | 195 |
+#endif /* HAL_USE_QEI */ |
179 | 196 |
+ |
180 |
+#endif /* _HAL_QEI_H_ */
|
|
197 |
+#endif /* HAL_QEI_H */
|
|
181 | 198 |
+ |
182 | 199 |
+/** @} */ |
183 | 200 |
diff --git a/os/hal/ports/STM32/LLD/TIMv1/driver.mk b/os/hal/ports/STM32/LLD/TIMv1/driver.mk |
... | ... | |
185 | 202 |
--- a/os/hal/ports/STM32/LLD/TIMv1/driver.mk |
186 | 203 |
+++ b/os/hal/ports/STM32/LLD/TIMv1/driver.mk |
187 | 204 |
@@ -10,10 +10,14 @@ endif |
188 |
ifneq ($(findstring HAL_USE_PWM TRUE,$(HALCONF)),)
|
|
189 |
PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c
|
|
190 |
endif
|
|
191 |
+ifneq ($(findstring HAL_USE_QEI TRUE,$(HALCONF)),)
|
|
192 |
+PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_qei_lld.c
|
|
193 |
+endif
|
|
194 |
else
|
|
195 |
PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c
|
|
196 |
PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.c
|
|
197 |
PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c
|
|
198 |
+PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_qei_lld.c
|
|
199 |
endif
|
|
200 |
|
|
201 |
PLATFORMINC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1
|
|
205 |
ifneq ($(findstring HAL_USE_PWM TRUE,$(HALCONF)),) |
|
206 |
PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c |
|
207 |
endif |
|
208 |
+ifneq ($(findstring HAL_USE_QEI TRUE,$(HALCONF)),) |
|
209 |
+PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_qei_lld.c |
|
210 |
+endif |
|
211 |
else |
|
212 |
PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c |
|
213 |
PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.c |
|
214 |
PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c |
|
215 |
+PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_qei_lld.c |
|
216 |
endif |
|
217 |
|
|
218 |
PLATFORMINC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1 |
|
202 | 219 |
diff --git a/os/hal/ports/STM32/LLD/TIMv1/hal_qei_lld.c b/os/hal/ports/STM32/LLD/TIMv1/hal_qei_lld.c |
203 | 220 |
new file mode 100644 |
204 |
index 0000000..700704a
|
|
221 |
index 0000000..cd1ab9b
|
|
205 | 222 |
--- /dev/null |
206 | 223 |
+++ b/os/hal/ports/STM32/LLD/TIMv1/hal_qei_lld.c |
207 |
@@ -0,0 +1,302 @@
|
|
224 |
@@ -0,0 +1,304 @@
|
|
208 | 225 |
+/* |
209 | 226 |
+AMiRo-OS is an operating system designed for the Autonomous Mini Robot (AMiRo) platform. |
210 | 227 |
+Copyright (C) 2016..2018 Thomas Schöpping et al. |
... | ... | |
233 | 250 |
+ |
234 | 251 |
+#include "hal.h" |
235 | 252 |
+ |
236 |
+#include "hal_qei.h"
|
|
253 |
+#if (HAL_USE_QEI == TRUE) || defined(__DOXYGEN__)
|
|
237 | 254 |
+ |
238 |
+#if HAL_USE_QEI || defined(__DOXYGEN__) |
|
255 |
+/*===========================================================================*/ |
|
256 |
+/* Driver local definitions. */ |
|
257 |
+/*===========================================================================*/ |
|
239 | 258 |
+ |
240 | 259 |
+/*===========================================================================*/ |
241 | 260 |
+/* Driver exported variables. */ |
... | ... | |
290 | 309 |
+#endif |
291 | 310 |
+ |
292 | 311 |
+/*===========================================================================*/ |
293 |
+/* Driver local variables. */
|
|
312 |
+/* Driver local variables and types. */
|
|
294 | 313 |
+/*===========================================================================*/ |
295 | 314 |
+ |
296 | 315 |
+/*===========================================================================*/ |
... | ... | |
412 | 431 |
+ /* Timer configuration.*/ |
413 | 432 |
+ qeip->tim->PSC = 0; |
414 | 433 |
+ arr = qeip->config->range - 1; |
415 |
+ osalDbgAssert((arr <= 0xFFFF), "qei_lld_start(), #1" /*, "invalid range"*/);
|
|
434 |
+ osalDbgAssert((arr <= 0xFFFF), "invalid range");
|
|
416 | 435 |
+ qeip->tim->ARR = arr & 0xFFFF; |
417 | 436 |
+ |
418 | 437 |
+ /* CCMR1_CC1S = 01 - CH1 Input on TI1. |
... | ... | |
509 | 528 |
+/** @} */ |
510 | 529 |
diff --git a/os/hal/ports/STM32/LLD/TIMv1/hal_qei_lld.h b/os/hal/ports/STM32/LLD/TIMv1/hal_qei_lld.h |
511 | 530 |
new file mode 100644 |
512 |
index 0000000..d4b7acc
|
|
531 |
index 0000000..ec1cd42
|
|
513 | 532 |
--- /dev/null |
514 | 533 |
+++ b/os/hal/ports/STM32/LLD/TIMv1/hal_qei_lld.h |
515 | 534 |
@@ -0,0 +1,302 @@ |
... | ... | |
539 | 558 |
+ * @{ |
540 | 559 |
+ */ |
541 | 560 |
+ |
542 |
+#ifndef _HAL_QEI_LLD_H_
|
|
543 |
+#define _HAL_QEI_LLD_H_
|
|
561 |
+#ifndef HAL_QEI_LLD_H
|
|
562 |
+#define HAL_QEI_LLD_H
|
|
544 | 563 |
+ |
545 |
+#include "stm32_tim.h"
|
|
564 |
+#if (HAL_USE_QEI == TRUE) || defined(__DOXYGEN__)
|
|
546 | 565 |
+ |
547 |
+#if HAL_USE_QEI || defined(__DOXYGEN__)
|
|
566 |
+#include "stm32_tim.h"
|
|
548 | 567 |
+ |
549 | 568 |
+/*===========================================================================*/ |
550 | 569 |
+/* Driver constants. */ |
... | ... | |
569 | 588 |
+ * @note The default is @p TRUE. |
570 | 589 |
+ */ |
571 | 590 |
+#if !defined(STM32_QEI_USE_TIM1) || defined(__DOXYGEN__) |
572 |
+#define STM32_QEI_USE_TIM1 TRUE
|
|
591 |
+#define STM32_QEI_USE_TIM1 FALSE
|
|
573 | 592 |
+#endif |
574 | 593 |
+ |
575 | 594 |
+/** |
... | ... | |
578 | 597 |
+ * @note The default is @p TRUE. |
579 | 598 |
+ */ |
580 | 599 |
+#if !defined(STM32_QEI_USE_TIM2) || defined(__DOXYGEN__) |
581 |
+#define STM32_QEI_USE_TIM2 TRUE
|
|
600 |
+#define STM32_QEI_USE_TIM2 FALSE
|
|
582 | 601 |
+#endif |
583 | 602 |
+ |
584 | 603 |
+/** |
... | ... | |
587 | 606 |
+ * @note The default is @p TRUE. |
588 | 607 |
+ */ |
589 | 608 |
+#if !defined(STM32_QEI_USE_TIM3) || defined(__DOXYGEN__) |
590 |
+#define STM32_QEI_USE_TIM3 TRUE
|
|
609 |
+#define STM32_QEI_USE_TIM3 FALSE
|
|
591 | 610 |
+#endif |
592 | 611 |
+ |
593 | 612 |
+/** |
... | ... | |
596 | 615 |
+ * @note The default is @p TRUE. |
597 | 616 |
+ */ |
598 | 617 |
+#if !defined(STM32_QEI_USE_TIM4) || defined(__DOXYGEN__) |
599 |
+#define STM32_QEI_USE_TIM4 TRUE
|
|
618 |
+#define STM32_QEI_USE_TIM4 FALSE
|
|
600 | 619 |
+#endif |
601 | 620 |
+ |
602 | 621 |
+/** |
... | ... | |
605 | 624 |
+ * @note The default is @p TRUE. |
606 | 625 |
+ */ |
607 | 626 |
+#if !defined(STM32_QEI_USE_TIM5) || defined(__DOXYGEN__) |
608 |
+#define STM32_QEI_USE_TIM5 TRUE
|
|
627 |
+#define STM32_QEI_USE_TIM5 FALSE
|
|
609 | 628 |
+#endif |
610 | 629 |
+ |
611 | 630 |
+/** |
... | ... | |
614 | 633 |
+ * @note The default is @p TRUE. |
615 | 634 |
+ */ |
616 | 635 |
+#if !defined(STM32_QEI_USE_TIM8) || defined(__DOXYGEN__) |
617 |
+#define STM32_QEI_USE_TIM8 TRUE
|
|
636 |
+#define STM32_QEI_USE_TIM8 FALSE
|
|
618 | 637 |
+#endif |
619 | 638 |
+/** @} */ |
620 | 639 |
+ |
... | ... | |
812 | 831 |
+ |
813 | 832 |
+#endif /* HAL_USE_QEI */ |
814 | 833 |
+ |
815 |
+#endif /* _HAL_QEI_LLD_H_ */
|
|
834 |
+#endif /* HAL_QEI_LLD_H */
|
|
816 | 835 |
+ |
817 | 836 |
+/** @} */ |
818 | 837 |
diff --git a/os/hal/src/hal_qei.c b/os/hal/src/hal_qei.c |
819 | 838 |
new file mode 100644 |
820 |
index 0000000..c08d175
|
|
839 |
index 0000000..00334bb
|
|
821 | 840 |
--- /dev/null |
822 | 841 |
+++ b/os/hal/src/hal_qei.c |
823 |
@@ -0,0 +1,156 @@
|
|
842 |
@@ -0,0 +1,152 @@
|
|
824 | 843 |
+/* |
825 | 844 |
+AMiRo-OS is an operating system designed for the Autonomous Mini Robot (AMiRo) platform. |
826 | 845 |
+Copyright (C) 2016..2018 Thomas Schöpping et al. |
... | ... | |
848 | 867 |
+ */ |
849 | 868 |
+ |
850 | 869 |
+#include "hal.h" |
851 |
+#include "hal_qei.h" |
|
852 | 870 |
+ |
853 |
+#if HAL_USE_QEI || defined(__DOXYGEN__)
|
|
871 |
+#if (HAL_USE_QEI == TRUE) || defined(__DOXYGEN__)
|
|
854 | 872 |
+ |
855 | 873 |
+/*===========================================================================*/ |
856 | 874 |
+/* Driver local definitions. */ |
... | ... | |
907 | 925 |
+ */ |
908 | 926 |
+void qeiStart(QEIDriver *qeip, const QEIConfig *config) { |
909 | 927 |
+ |
910 |
+ chDbgCheck((qeip != NULL) && (config != NULL) /*, "qeiStart"*/);
|
|
928 |
+ osalDbgCheck((qeip != NULL) && (config != NULL));
|
|
911 | 929 |
+ |
912 |
+ chSysLock(); |
|
913 |
+ chDbgAssert((qeip->state == QEI_STOP) || (qeip->state == QEI_READY), |
|
914 |
+ "qeiStart(), #1" /*, "invalid state"*/); |
|
930 |
+ osalSysLock(); |
|
931 |
+ osalDbgAssert((qeip->state == QEI_STOP) || (qeip->state == QEI_READY), "invalid state"); |
|
915 | 932 |
+ qeip->config = config; |
916 | 933 |
+ qei_lld_start(qeip); |
917 | 934 |
+ qeip->state = QEI_READY; |
918 |
+ chSysUnlock();
|
|
935 |
+ osalSysUnlock();
|
|
919 | 936 |
+} |
920 | 937 |
+ |
921 | 938 |
+/** |
... | ... | |
927 | 944 |
+ */ |
928 | 945 |
+void qeiStop(QEIDriver *qeip) { |
929 | 946 |
+ |
930 |
+ chDbgCheck(qeip != NULL /*, "qeiStop"*/);
|
|
947 |
+ osalDbgCheck(qeip != NULL);
|
|
931 | 948 |
+ |
932 |
+ chSysLock(); |
|
933 |
+ chDbgAssert((qeip->state == QEI_STOP) || (qeip->state == QEI_READY), |
|
934 |
+ "qeiStop(), #1" /*, "invalid state"*/); |
|
949 |
+ osalSysLock(); |
|
950 |
+ osalDbgAssert((qeip->state == QEI_STOP) || (qeip->state == QEI_READY), "invalid state"); |
|
935 | 951 |
+ qei_lld_stop(qeip); |
936 | 952 |
+ qeip->state = QEI_STOP; |
937 |
+ chSysUnlock();
|
|
953 |
+ osalSysUnlock();
|
|
938 | 954 |
+} |
939 | 955 |
+ |
940 | 956 |
+/** |
... | ... | |
946 | 962 |
+ */ |
947 | 963 |
+void qeiEnable(QEIDriver *qeip) { |
948 | 964 |
+ |
949 |
+ chDbgCheck(qeip != NULL /*, "qeiEnable"*/);
|
|
965 |
+ osalDbgCheck(qeip != NULL);
|
|
950 | 966 |
+ |
951 |
+ chSysLock();
|
|
952 |
+ chDbgAssert(qeip->state == QEI_READY, "qeiEnable(), #1" /*, "invalid state"*/);
|
|
967 |
+ osalSysLock();
|
|
968 |
+ osalDbgAssert(qeip->state == QEI_READY, "invalid state");
|
|
953 | 969 |
+ qei_lld_enable(qeip); |
954 | 970 |
+ qeip->state = QEI_ACTIVE; |
955 |
+ chSysUnlock();
|
|
971 |
+ osalSysUnlock();
|
|
956 | 972 |
+} |
957 | 973 |
+ |
958 | 974 |
+/** |
... | ... | |
964 | 980 |
+ */ |
965 | 981 |
+void qeiDisable(QEIDriver *qeip) { |
966 | 982 |
+ |
967 |
+ chDbgCheck(qeip != NULL /*, "qeiDisable"*/);
|
|
983 |
+ osalDbgCheck(qeip != NULL);
|
|
968 | 984 |
+ |
969 |
+ chSysLock(); |
|
970 |
+ chDbgAssert((qeip->state == QEI_READY) || (qeip->state == QEI_ACTIVE), |
|
971 |
+ "qeiDisable(), #1" /*, "invalid state"*/); |
|
985 |
+ osalSysLock(); |
|
986 |
+ osalDbgAssert((qeip->state == QEI_READY) || (qeip->state == QEI_ACTIVE), "invalid state"); |
|
972 | 987 |
+ qei_lld_disable(qeip); |
973 | 988 |
+ qeip->state = QEI_READY; |
974 |
+ chSysUnlock();
|
|
989 |
+ osalSysUnlock();
|
|
975 | 990 |
+} |
976 | 991 |
+ |
977 | 992 |
+#endif /* HAL_USE_QEI */ |
Also available in: Unified diff