aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal
diff options
context:
space:
mode:
authorStephane D'Alu <sdalu@sdalu.com>2016-06-29 21:59:39 +0200
committerStephane D'Alu <sdalu@sdalu.com>2016-06-29 21:59:39 +0200
commitaf18f7d43fe8f07016e985fed9e5dcd021da3303 (patch)
tree3e5d035f873269717b88313883c84a81f3d19d8d /os/hal
parent01874bedf49fc4fc1baf74871b653b5740912af5 (diff)
downloadChibiOS-Contrib-af18f7d43fe8f07016e985fed9e5dcd021da3303.tar.gz
ChibiOS-Contrib-af18f7d43fe8f07016e985fed9e5dcd021da3303.tar.bz2
ChibiOS-Contrib-af18f7d43fe8f07016e985fed9e5dcd021da3303.zip
conditionally add support for overflow variant
Diffstat (limited to 'os/hal')
-rw-r--r--os/hal/ports/NRF51/NRF51822/hal_qei_lld.c15
-rw-r--r--os/hal/ports/NRF51/NRF51822/hal_qei_lld.h53
2 files changed, 39 insertions, 29 deletions
diff --git a/os/hal/ports/NRF51/NRF51822/hal_qei_lld.c b/os/hal/ports/NRF51/NRF51822/hal_qei_lld.c
index 595df89..069c362 100644
--- a/os/hal/ports/NRF51/NRF51822/hal_qei_lld.c
+++ b/os/hal/ports/NRF51/NRF51822/hal_qei_lld.c
@@ -47,14 +47,18 @@ bool qei_adjust_count(qeicnt_t *count, qeidelta_t *delta,
*delta = 0;
*count = (min + (_count - (max - _delta))) - 1;
break;
+#if HAL_QEI_SUPPORT_OVERFLOW_DISCARD == TRUE
case QEI_OVERFLOW_DISCARD:
*delta = _delta;
*count = _count;
break;
+#endif
+#if HAL_QEI_SUPPORT_OVERFLOW_MINMAX == TRUE
case QEI_OVERFLOW_MINMAX:
*delta = _count - (max - _delta);
*count = max;
break;
+#endif
}
return true;
@@ -65,14 +69,18 @@ bool qei_adjust_count(qeicnt_t *count, qeidelta_t *delta,
*delta = 0;
*count = (max + (_count - (min - _delta))) + 1;
break;
+#if HAL_QEI_SUPPORT_OVERFLOW_DISCARD == TRUE
case QEI_OVERFLOW_DISCARD:
*delta = _delta;
*count = _count;
break;
+#endif
+#if HAL_QEI_SUPPORT_OVERFLOW_MINMAX == TRUE
case QEI_OVERFLOW_MINMAX:
*delta = _count - (min - _delta);
*count = min;
break;
+#endif
}
return true;
@@ -249,7 +257,6 @@ void qei_lld_start(QEIDriver *qeip) {
#else
qdec->INTENSET = QDEC_INTENSET_REPORTRDY_Msk;
#endif
-
#if NRF51_QEI_USE_QDEC0 == TRUE
if (&QEID1 == qeip) {
nvicEnableVector(QDEC_IRQn, NRF51_QEI_QDEC0_IRQ_PRIORITY);
@@ -309,12 +316,13 @@ void qei_lld_stop(QEIDriver *qeip) {
if (qeip->state == QEI_READY) {
qdec->TASKS_STOP = 1;
qdec->ENABLE = 0;
+
+ // Unset interrupt masks and disable interrupt
#if NRF51_QEI_USE_QDEC0 == TRUE
if (&QEID1 == qeip) {
nvicDisableVector(QDEC_IRQn);
}
#endif
-
#if NRF51_QEI_USE_ACC_OVERFLOW_CB == TRUE
qdec->INTENCLR = QDEC_INTENCLR_REPORTRDY_Msk |
QDEC_INTENCLR_ACCOF_Msk;
@@ -362,7 +370,6 @@ void qei_lld_disable(QEIDriver *qeip) {
qeip->qdec->TASKS_STOP = 1;
}
-
/**
* @brief Adjust counter
*
@@ -399,8 +406,6 @@ qeidelta_t qei_lld_adjust_count(QEIDriver *qeip, qeidelta_t delta) {
// Remaining delta
return delta;
}
-
-
#endif /* HAL_USE_QEI */
diff --git a/os/hal/ports/NRF51/NRF51822/hal_qei_lld.h b/os/hal/ports/NRF51/NRF51822/hal_qei_lld.h
index aba7b59..4de946e 100644
--- a/os/hal/ports/NRF51/NRF51822/hal_qei_lld.h
+++ b/os/hal/ports/NRF51/NRF51822/hal_qei_lld.h
@@ -41,6 +41,9 @@
#define QEI_COUNT_MIN (-2147483648)
#define QEI_COUNT_MAX (2147483647)
+#define HAL_QEI_SUPPORT_OVERFLOW_MINMAX TRUE
+#define HAM_QEI_SUPPORT_OVERFLOW_DISCARD TRUE
+
/*===========================================================================*/
/* Driver pre-compile time settings. */
@@ -105,8 +108,6 @@
/* Driver data structures and types. */
/*===========================================================================*/
-
-
/**
* @brief QEI count mode.
*/
@@ -118,41 +119,45 @@ typedef enum {
* @brief QEI resolution.
*/
typedef enum {
- QEI_RESOLUTION_128us = 0x00UL, /**< 128us sample period. */
- QEI_RESOLUTION_256us = 0x01UL, /**< 256us sample period. */
- QEI_RESOLUTION_512us = 0x02UL, /**< 512us sample period. */
- QEI_RESOLUTION_1024us = 0x03UL, /**< 1024us sample period. */
- QEI_RESOLUTION_2048us = 0x04UL, /**< 2048us sample period. */
- QEI_RESOLUTION_4096us = 0x05UL, /**< 4096us sample period. */
- QEI_RESOLUTION_8192us = 0x06UL, /**< 8192us sample period. */
- QEI_RESOLUTION_16384us = 0x07UL, /**< 16384us sample period. */
+ QEI_RESOLUTION_128us = 0x00UL, /**< 128us sample period. */
+ QEI_RESOLUTION_256us = 0x01UL, /**< 256us sample period. */
+ QEI_RESOLUTION_512us = 0x02UL, /**< 512us sample period. */
+ QEI_RESOLUTION_1024us = 0x03UL, /**< 1024us sample period. */
+ QEI_RESOLUTION_2048us = 0x04UL, /**< 2048us sample period. */
+ QEI_RESOLUTION_4096us = 0x05UL, /**< 4096us sample period. */
+ QEI_RESOLUTION_8192us = 0x06UL, /**< 8192us sample period. */
+ QEI_RESOLUTION_16384us = 0x07UL, /**< 16384us sample period. */
} qeiresolution_t;
/**
* @brief Clusters of samples.
*/
typedef enum {
- QEI_REPORT_10 = 0x00UL, /**< 10 samples per report. */
- QEI_REPORT_40 = 0x01UL, /**< 40 samples per report. */
- QEI_REPORT_80 = 0x02UL, /**< 80 samples per report. */
- QEI_REPORT_120 = 0x03UL, /**< 120 samples per report. */
- QEI_REPORT_160 = 0x04UL, /**< 160 samples per report. */
- QEI_REPORT_200 = 0x05UL, /**< 200 samples per report. */
- QEI_REPORT_240 = 0x06UL, /**< 240 samples per report. */
- QEI_REPORT_280 = 0x07UL, /**< 280 samples per report. */
+ QEI_REPORT_10 = 0x00UL, /**< 10 samples per report. */
+ QEI_REPORT_40 = 0x01UL, /**< 40 samples per report. */
+ QEI_REPORT_80 = 0x02UL, /**< 80 samples per report. */
+ QEI_REPORT_120 = 0x03UL, /**< 120 samples per report. */
+ QEI_REPORT_160 = 0x04UL, /**< 160 samples per report. */
+ QEI_REPORT_200 = 0x05UL, /**< 200 samples per report. */
+ QEI_REPORT_240 = 0x06UL, /**< 240 samples per report. */
+ QEI_REPORT_280 = 0x07UL, /**< 280 samples per report. */
} qeireport_t;
+
+// XXX: to be moved in hal_qei
/**
* @brief Handling of counter overflow/underflow.
*/
typedef enum {
- QEI_OVERFLOW_WRAP = 0, /**< Counter value will wrap around. */
- QEI_OVERFLOW_DISCARD = 1, /**< Counter doesn't change. */
- QEI_OVERFLOW_MINMAX = 2, /**< Counter will be updated to min or max. */
+ QEI_OVERFLOW_WRAP = 0, /**< Counter value will wrap around. */
+#if HAL_QEI_SUPPORT_OVERFLOW_DISCARD == TRUE
+ QEI_OVERFLOW_DISCARD = 1, /**< Counter doesn't change. */
+#endif
+#if HAL_QEI_SUPPORT_OVERFLOW_MINMAX == TRUE
+ QEI_OVERFLOW_MINMAX = 2, /**< Counter will be updated to min or max. */
+#endif
} qeioverflow_t;
-
-
/**
* @brief QEI direction inversion.
*/
@@ -191,7 +196,7 @@ typedef struct {
/**
* @brief Handling of counter overflow/underflow
*
- * @details When overflow accours, the counter value is updated
+ * @details When overflow occurs, the counter value is updated
* according to:
* - QEI_OVERFLOW_DISCARD:
* discard the update value, counter doesn't change