You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by da...@apache.org on 2020/02/12 17:42:19 UTC
[incubator-nuttx] 01/02: Fixes build issues with IMXRT Qencoder
This is an automated email from the ASF dual-hosted git repository.
davids5 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 8469de724a171a605e87ea70dbe12d0baea68f44
Author: Nicholas Chin <ni...@gmail.com>
AuthorDate: Wed Feb 12 10:04:20 2020 -0500
Fixes build issues with IMXRT Qencoder
---
arch/arm/src/imxrt/imxrt_enc.c | 171 ++++++++++++++++++++++-------------------
arch/arm/src/imxrt/imxrt_enc.h | 10 +--
2 files changed, 99 insertions(+), 82 deletions(-)
diff --git a/arch/arm/src/imxrt/imxrt_enc.c b/arch/arm/src/imxrt/imxrt_enc.c
index 5ed5a17..0cc5abd 100644
--- a/arch/arm/src/imxrt/imxrt_enc.c
+++ b/arch/arm/src/imxrt/imxrt_enc.c
@@ -33,9 +33,9 @@
*
****************************************************************************/
-/************************************************************************************
+/****************************************************************************
* Included Files
- ************************************************************************************/
+ ****************************************************************************/
#include <nuttx/config.h>
@@ -56,14 +56,18 @@
#include "imxrt_enc.h"
-/* At least one Quadrature Decoder peripheral must be enabled */
+/* This functionality is dependent on Qencoder Sensor support*/
+
+#ifndef CONFIG_SENSORS_QENCODER
+# undef CONFIG_IMXRT_ENC
+# error "Qencoder Sensor support is not enabled (CONFIG_SENSORS_QENCODER)"
+#endif
-#if defined(CONFIG_IMXRT_ENC1) || defined(CONFIG_IMXRT_ENC2) || \
- defined(CONFIG_IMXRT_ENC3) || defined(CONFIG_IMXRT_ENC4)
+#ifdef CONFIG_IMXRT_ENC
-/************************************************************************************
+/****************************************************************************
* Pre-processor Definitions
- ************************************************************************************/
+ ****************************************************************************/
/* Debug ****************************************************************************/
@@ -246,9 +250,9 @@
#define REV_SHIFT (4)
#define MOD_SHIFT (5)
-/************************************************************************************
+/****************************************************************************
* Private Types
- ************************************************************************************/
+ ****************************************************************************/
/* Constant configuration structure that is retained in FLASH */
@@ -288,21 +292,22 @@ struct imxrt_enc_lowerhalf_s
* ensure atomic 32-bit reads. */
};
-/************************************************************************************
+/****************************************************************************
* Private Function Prototypes
- ************************************************************************************/
+ ****************************************************************************/
/* Helper functions */
-static inline uint16_t imxrt_enc_getreg16(FAR struct imxrt_enc_lowerhalf_s *priv,
- int offset);
+static inline uint16_t imxrt_enc_getreg16
+ (FAR struct imxrt_enc_lowerhalf_s *priv, int offset);
static inline void imxrt_enc_putreg16(FAR struct imxrt_enc_lowerhalf_s *priv,
int offset, uint16_t value);
-static inline void imxrt_enc_modifyreg16(FAR struct imxrt_enc_lowerhalf_s *priv,
- int offset, uint16_t clearbits, uint16_t setbits);
+static inline void imxrt_enc_modifyreg16
+ (FAR struct imxrt_enc_lowerhalf_s *priv, int offset,
+ uint16_t clearbits, uint16_t setbits);
-void imxrt_enc_clock_enable (uint32_t base);
-void imxrt_enc_clock_disable (uint32_t base);
+static void imxrt_enc_clock_enable (uint32_t base);
+static void imxrt_enc_clock_disable (uint32_t base);
static inline void imxrt_enc_sem_wait(FAR struct imxrt_enc_lowerhalf_s *priv);
static inline void imxrt_enc_sem_post(FAR struct imxrt_enc_lowerhalf_s *priv);
@@ -329,9 +334,9 @@ static int imxrt_reset(FAR struct qe_lowerhalf_s *lower);
static int imxrt_ioctl(FAR struct qe_lowerhalf_s *lower, int cmd,
unsigned long arg);
-/************************************************************************************
+/****************************************************************************
* Private Data
- ************************************************************************************/
+ ****************************************************************************/
/* The lower half callback structure */
@@ -446,31 +451,31 @@ static struct imxrt_enc_lowerhalf_s imxrt_enc4_priv =
};
#endif
-/************************************************************************************
+/****************************************************************************
* Private Functions
- ************************************************************************************/
+ ****************************************************************************/
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_enc_getreg16
*
* Description:
* Get a 16-bit register value by offset
*
- ************************************************************************************/
+ ****************************************************************************/
-static inline uint16_t imxrt_enc_getreg16(FAR struct imxrt_enc_lowerhalf_s *priv,
- int offset)
+static inline uint16_t imxrt_enc_getreg16
+ (FAR struct imxrt_enc_lowerhalf_s *priv, int offset)
{
return getreg16(priv->config->base + offset);
}
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_enc_putreg16
*
* Description:
* Put a 16-bit register value by offset
*
- ************************************************************************************/
+ ****************************************************************************/
static inline void imxrt_enc_putreg16(FAR struct imxrt_enc_lowerhalf_s *priv,
int offset, uint16_t value)
@@ -478,28 +483,28 @@ static inline void imxrt_enc_putreg16(FAR struct imxrt_enc_lowerhalf_s *priv,
putreg16(value, priv->config->base + offset);
}
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_enc_modifyreg16
*
* Description:
* Modify a 16-bit register value by offset
*
- ************************************************************************************/
+ ****************************************************************************/
-static inline void imxrt_enc_modifyreg16(FAR struct imxrt_enc_lowerhalf_s *priv,
- int offset, uint16_t clearbits,
- uint16_t setbits)
+static inline void imxrt_enc_modifyreg16
+ (FAR struct imxrt_enc_lowerhalf_s *priv, int offset,
+ uint16_t clearbits, uint16_t setbits)
{
modifyreg16(priv->config->base + offset, clearbits, setbits);
}
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_enc_clock_enable
*
* Description:
* Ungate ENC clock
*
- ************************************************************************************/
+ ****************************************************************************/
void imxrt_enc_clock_enable (uint32_t base)
{
@@ -511,6 +516,9 @@ void imxrt_enc_clock_enable (uint32_t base)
{
imxrt_clockall_enc2();
}
+
+#if (defined(CONFIG_ARCH_FAMILY_IMXRT105x) || \
+ defined(CONFIG_ARCH_FAMILY_IMXRT106x))
else if (base == IMXRT_ENC3_BASE)
{
imxrt_clockall_enc3();
@@ -519,15 +527,16 @@ void imxrt_enc_clock_enable (uint32_t base)
{
imxrt_clockall_enc4();
}
+#endif /* CONFIG_ARCH_FAMILY_IMXRT105x || CONFIG_ARCH_FAMILY_IMXRT106x */
}
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_enc_clock_disable
*
* Description:
* Gate ENC clock
*
- ************************************************************************************/
+ ****************************************************************************/
void imxrt_enc_clock_disable (uint32_t base)
{
@@ -539,6 +548,9 @@ void imxrt_enc_clock_disable (uint32_t base)
{
imxrt_clockoff_enc2();
}
+
+#if (defined(CONFIG_ARCH_FAMILY_IMXRT105x) || \
+ defined(CONFIG_ARCH_FAMILY_IMXRT106x))
else if (base == IMXRT_ENC3_BASE)
{
imxrt_clockoff_enc3();
@@ -547,35 +559,36 @@ void imxrt_enc_clock_disable (uint32_t base)
{
imxrt_clockoff_enc4();
}
+#endif /* CONFIG_ARCH_FAMILY_IMXRT105x || CONFIG_ARCH_FAMILY_IMXRT106x */
}
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_enc_sem_wait
*
* Description:
* Take exclusive access to the position register, waiting as necessary
*
- ************************************************************************************/
+ ****************************************************************************/
static inline void imxrt_enc_sem_wait(FAR struct imxrt_enc_lowerhalf_s *priv)
{
nxsem_wait_uninterruptible(&priv->sem_excl);
}
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_enc_sem_post
*
* Description:
* Release the mutual exclusion semaphore
*
- ************************************************************************************/
+ ****************************************************************************/
static inline void imxrt_enc_sem_post(struct imxrt_enc_lowerhalf_s *priv)
{
nxsem_post(&priv->sem_excl);
}
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_enc_reconfig
*
* Description:
@@ -589,9 +602,10 @@ static inline void imxrt_enc_sem_post(struct imxrt_enc_lowerhalf_s *priv)
*
* Returns: 0 on success. Negated errno on failure.
*
- ************************************************************************************/
+ ****************************************************************************/
-static int imxrt_enc_reconfig(FAR struct imxrt_enc_lowerhalf_s *priv, uint16_t args)
+static int imxrt_enc_reconfig(FAR struct imxrt_enc_lowerhalf_s *priv,
+ uint16_t args)
{
uint16_t clear = 0;
uint16_t set = 0;
@@ -674,7 +688,7 @@ static int imxrt_enc_reconfig(FAR struct imxrt_enc_lowerhalf_s *priv, uint16_t a
return OK;
}
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_enc_set_initial_val
*
* Description:
@@ -682,10 +696,10 @@ static int imxrt_enc_reconfig(FAR struct imxrt_enc_lowerhalf_s *priv, uint16_t a
*
* Input Parameters:
* priv - A reference to the IMXRT enc lower-half structure
- * value - New initial value that the position counters will take upon reset or
- * roll-over.
+ * value - New initial value that the position counters will take upon
+ * reset or roll-over.
*
- ************************************************************************************/
+ ****************************************************************************/
static void imxrt_enc_set_initial_val(FAR struct imxrt_enc_lowerhalf_s *priv,
uint32_t value)
@@ -694,7 +708,7 @@ static void imxrt_enc_set_initial_val(FAR struct imxrt_enc_lowerhalf_s *priv,
imxrt_enc_putreg16(priv, IMXRT_ENC_UINIT_OFFSET, (value >> 16) & 0xffff);
}
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_enc_modulo_enable
*
* Description:
@@ -704,7 +718,7 @@ static void imxrt_enc_set_initial_val(FAR struct imxrt_enc_lowerhalf_s *priv,
* priv - A reference to the IMXRT enc lower-half structure
* modulus - The maximum position counter value before roll-over.
*
- ************************************************************************************/
+ ****************************************************************************/
static void imxrt_enc_modulo_enable(FAR struct imxrt_enc_lowerhalf_s *priv,
uint32_t modulus)
@@ -715,7 +729,7 @@ static void imxrt_enc_modulo_enable(FAR struct imxrt_enc_lowerhalf_s *priv,
imxrt_enc_modifyreg16(priv, IMXRT_ENC_CTRL2_OFFSET, 0, ENC_CTRL2_MOD);
}
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_enc_modulo_disable
*
* Description:
@@ -724,7 +738,7 @@ static void imxrt_enc_modulo_enable(FAR struct imxrt_enc_lowerhalf_s *priv,
* Input Parameters:
* priv - A reference to the IMXRT enc lowerhalf structure
*
- ************************************************************************************/
+ ****************************************************************************/
static void imxrt_enc_modulo_disable(FAR struct imxrt_enc_lowerhalf_s *priv)
{
@@ -733,7 +747,7 @@ static void imxrt_enc_modulo_disable(FAR struct imxrt_enc_lowerhalf_s *priv)
#ifdef CONFIG_DEBUG_SENSORS
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_enc_test_gen
*
* Description:
@@ -749,9 +763,10 @@ static void imxrt_enc_modulo_disable(FAR struct imxrt_enc_lowerhalf_s *priv)
*
* Returns: 0 on success. Negated errno on failure.
*
- ************************************************************************************/
+ ****************************************************************************/
-static int imxrt_enc_test_gen(FAR struct imxrt_enc_lowerhalf_s *priv, uint16_t value)
+static int imxrt_enc_test_gen(FAR struct imxrt_enc_lowerhalf_s *priv,
+ uint16_t value)
{
if (value >> 9)
{
@@ -775,29 +790,31 @@ static int imxrt_enc_test_gen(FAR struct imxrt_enc_lowerhalf_s *priv, uint16_t v
#endif /* CONFIG_DEBUG_SENSORS */
-/************************************************************************************
+/****************************************************************************
* Device Driver Operations
- ************************************************************************************/
+ ****************************************************************************/
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_setup
*
* Description:
* This method is called when the driver is opened. The lower half driver
* should configure and initialize the device so that it is ready for use.
- * The initial position value is set to the user-specified INIT register values.
+ * The initial position value is set to the user-specified INIT register
+ * values.
*
- ************************************************************************************/
+ ****************************************************************************/
static int imxrt_setup(FAR struct qe_lowerhalf_s *lower)
{
- FAR struct imxrt_enc_lowerhalf_s *priv = (FAR struct imxrt_enc_lowerhalf_s *)lower;
- FAR struct imxrt_qeconfig_s *config = priv->config;
+ FAR struct imxrt_enc_lowerhalf_s *priv =
+ (FAR struct imxrt_enc_lowerhalf_s *)lower;
+ FAR const struct imxrt_qeconfig_s *config = priv->config;
uint32_t regval;
/* Ungate the clock */
- imxrt_enc_clock_enable(priv->config->base);
+ imxrt_enc_clock_enable(config->base);
/* Initialize the registers */
@@ -847,7 +864,7 @@ static int imxrt_setup(FAR struct qe_lowerhalf_s *lower)
return OK;
}
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_shutdown
*
* Description:
@@ -855,7 +872,7 @@ static int imxrt_setup(FAR struct qe_lowerhalf_s *lower)
* should stop data collection, and put the system into the lowest possible
* power usage state
*
- ************************************************************************************/
+ ****************************************************************************/
static int imxrt_shutdown(FAR struct qe_lowerhalf_s *lower)
{
@@ -887,13 +904,13 @@ static int imxrt_shutdown(FAR struct qe_lowerhalf_s *lower)
return OK;
}
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_position
*
* Description:
* Return the current position measurement.
*
- ************************************************************************************/
+ ****************************************************************************/
static int imxrt_position(FAR struct qe_lowerhalf_s *lower, FAR int32_t *pos)
{
@@ -934,13 +951,13 @@ static int imxrt_position(FAR struct qe_lowerhalf_s *lower, FAR int32_t *pos)
return OK;
}
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_reset
*
* Description:
* Reset the position measurement to the value of the INIT registers.
*
- ************************************************************************************/
+ ****************************************************************************/
static int imxrt_reset(FAR struct qe_lowerhalf_s *lower)
{
@@ -955,13 +972,13 @@ static int imxrt_reset(FAR struct qe_lowerhalf_s *lower)
return OK;
}
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_ioctl
*
* Description:
* Lower-half logic may support platform-specific ioctl commands
*
- ************************************************************************************/
+ ****************************************************************************/
static int imxrt_ioctl(FAR struct qe_lowerhalf_s *lower, int cmd,
unsigned long arg)
@@ -1004,11 +1021,11 @@ static int imxrt_ioctl(FAR struct qe_lowerhalf_s *lower, int cmd,
return OK;
}
-/************************************************************************************
+/****************************************************************************
* Public Functions
- ************************************************************************************/
+ ****************************************************************************/
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_qeinitialize
*
* Description:
@@ -1022,7 +1039,7 @@ static int imxrt_ioctl(FAR struct qe_lowerhalf_s *lower, int cmd,
* Returned Value:
* Zero on success; A negated errno value is returned on failure.
*
- ************************************************************************************/
+ ****************************************************************************/
int imxrt_qeinitialize(FAR const char *devpath, int enc)
{
@@ -1064,9 +1081,9 @@ int imxrt_qeinitialize(FAR const char *devpath, int enc)
if (ret < 0)
{
snerr("ERROR: qe_register failed: %d\n", ret);
- return ret;
}
+
+ return ret;
}
-#endif /* CONFIG_IMXRT_ENC1 || CONFIG_IMXRT_ENC2 || \
- * CONFIG_IMXRT_ENC3 || CONFIG_IMXRT_ENC4 */
+#endif /* CONFIG_IMXRT_ENC */
\ No newline at end of file
diff --git a/arch/arm/src/imxrt/imxrt_enc.h b/arch/arm/src/imxrt/imxrt_enc.h
index bd973a9..a3cd716 100644
--- a/arch/arm/src/imxrt/imxrt_enc.h
+++ b/arch/arm/src/imxrt/imxrt_enc.h
@@ -43,11 +43,11 @@
#include <nuttx/config.h>
#include "chip.h"
-#include "chip/imxrt_enc.h"
+#include "hardware/imxrt_enc.h"
-/************************************************************************************
+/****************************************************************************
* Pre-processor Definitions
- ************************************************************************************/
+ ****************************************************************************/
#define QEIOC_POSDIFF _QEIOC(QE_IMXRT_FIRST)
#define QEIOC_REVOLUTION _QEIOC(QE_IMXRT_FIRST + 1)
@@ -61,7 +61,7 @@
* Public Function Prototypes
****************************************************************************/
-/************************************************************************************
+/****************************************************************************
* Name: imxrt_qeinitialize
*
* Description:
@@ -75,7 +75,7 @@
* Returned Value:
* Zero on success; A negated errno value is returned on failure.
*
- ************************************************************************************/
+ ****************************************************************************/
int imxrt_qeinitialize(FAR const char *devpath, int enc);