| 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 */
|