Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: qei_api.c
- Revision:
- 6:f4c910df1172
- Parent:
- 0:26f0e94f01e0
diff -r a7972b08669b -r f4c910df1172 qei_api.c
--- a/qei_api.c Fri Jan 17 08:47:03 2020 +0000
+++ b/qei_api.c Sat Jan 25 01:18:05 2020 +0000
@@ -1,164 +1,164 @@
-#include "mbed_assert.h"
-#include <math.h>
-#include <string.h>
-
-#ifdef TARGET_LPC1549
-
-#include "qei_api.h"
-#include "cmsis.h"
-#include "pinmap.h"
-#include "mbed_error.h"
-
-static int qei_used = 0;
-static int get_available_qei(void) {
- int i;
- for (i = 0; i < 1; i++) {
- if ((qei_used & (1 << i)) == 0)
- return i;
- }
- return -1;
-}
-
-static void switch_pin(PinName phA, PinName phB, PinName Idx)
-{
- // Set PHA
- if(phA != NC)
- {
- LPC_SWM->PINASSIGN14 &= 0xFFFF00FF;
- LPC_SWM->PINASSIGN14 |= ((int)phA << 8);
- }
- if(phB != NC)
- {
- LPC_SWM->PINASSIGN14 &= 0xFF00FFFF;
- LPC_SWM->PINASSIGN14 |= ((int)phB << 16);
- }
- if(Idx != NC)
- {
- LPC_SWM->PINASSIGN14 &= 0x00FFFFFF;
- LPC_SWM->PINASSIGN14 |= ((int)Idx << 24);
- }
-}
-
-void qei_init(qei_t *obj, PinName phA, PinName phB, PinName Idx)
-{
- int qei_n = get_available_qei();
- if(qei_n == -1)
- {
- error("No available QEI");
- }
-
- switch_pin(phA, phB, Idx);
-
- // Enable QEI clock
- LPC_SYSCON->SYSAHBCLKCTRL1 |= (1 << 21);
-
- // Peripheral reset
- LPC_SYSCON->PRESETCTRL1 |= (1 << 21);
- LPC_SYSCON->PRESETCTRL1 &= ~(1 << 21);
-
- // store QEI control clock
-#warning
- obj->PCLK = SystemCoreClock / LPC_SYSCON->SYSAHBCLKDIV;
- //PCLK = 12000000 / LPC_SYSCON->SYSAHBCLKDIV;
-
-}
-
-void qei_free()
-{
- // ToDo
-}
-
-void qei_reset()
-{
- /*
- Reset position counter (Bit 0),
- position counter on index (Bit 1),
- velocity (Bit 2),
- index counter (Bit 3)
- */
- LPC_QEI->CON = 0xF;
-}
-
-//////////////////////// set //////////////////////////
-void qei_set_maxpos(qei_t *obj, uint32_t num)
-{
- LPC_QEI->MAXPOS = num;
- obj->maxPos = num;
-}
-
-void qei_set_invert_direction(bool is_invert)
-{
- LPC_QEI->CONF &= ~(1 << 0);
- LPC_QEI->CONF |= is_invert;
-}
-
-void qei_set_invert_index(bool is_invert)
-{
- LPC_QEI->CONF &= ~(1 << 3);
- LPC_QEI->CONF |= is_invert;
-}
-
-void qei_set_signal_mode(QEISignalMode mode)
-{
- switch(mode)
- {
- case QUADRATURE_ENCODER: LPC_QEI->CONF &= ~(1 << 1); break;
- case DIRECTION_CLOCK_ENCODER: LPC_QEI->CONF |= (1 << 1); break;
- }
-}
-
-void qei_set_encoding(qei_t *obj, QEIEncoding encoding)
-{
- switch(encoding)
- {
- case X2_ENCODING:
- LPC_QEI->CONF &= ~(1 << 2);
- obj->encoding = 2;
- break;
- case X4_ENCODING:
- LPC_QEI->CONF |= (1 << 2);
- obj->encoding = 4;
- break;
- }
-}
-
-void qei_set_timer_load(qei_t *obj, uint32_t val)
-{
- LPC_QEI->LOAD = val;
- obj->load = val;
-}
-
-//////////////////////// get //////////////////////////
-bool qei_get_direction()
-{
-#warning false : true?
- bool val = (LPC_QEI->STAT & 0x00000001) ? true : false; // false : true?
- return val;
-}
-
-uint32_t qei_get_position()
-{
- return LPC_QEI->POS;
-}
-
-uint32_t qei_get_index()
-{
- return LPC_QEI->INXCNT;
-}
-
-uint32_t qei_get_velocity()
-{
- return LPC_QEI->CAP;
-}
-
-bool qei_get_invert_direction_status()
-{
- return (LPC_QEI->CONF & (1 << 0));
-}
-
-bool qei_get_invert_index_status()
-{
- return (LPC_QEI->CONF & (1 << 3));
-}
-
+#include "mbed_assert.h"
+#include <math.h>
+#include <string.h>
+
+#ifdef TARGET_LPC1549
+
+#include "qei_api.h"
+#include "cmsis.h"
+#include "pinmap.h"
+#include "mbed_error.h"
+
+static int qei_used = 0;
+static int get_available_qei(void) {
+ int i;
+ for (i = 0; i < 1; i++) {
+ if ((qei_used & (1 << i)) == 0)
+ return i;
+ }
+ return -1;
+}
+
+static void switch_pin(PinName phA, PinName phB, PinName Idx)
+{
+ // Set PHA
+ if(phA != NC)
+ {
+ LPC_SWM->PINASSIGN14 &= 0xFFFF00FF;
+ LPC_SWM->PINASSIGN14 |= ((int)phA << 8);
+ }
+ if(phB != NC)
+ {
+ LPC_SWM->PINASSIGN14 &= 0xFF00FFFF;
+ LPC_SWM->PINASSIGN14 |= ((int)phB << 16);
+ }
+ if(Idx != NC)
+ {
+ LPC_SWM->PINASSIGN14 &= 0x00FFFFFF;
+ LPC_SWM->PINASSIGN14 |= ((int)Idx << 24);
+ }
+}
+
+void qei_init(qei_t *obj, PinName phA, PinName phB, PinName Idx)
+{
+ int qei_n = get_available_qei();
+ if(qei_n == -1)
+ {
+ error("No available QEI");
+ }
+
+ switch_pin(phA, phB, Idx);
+
+ // Enable QEI clock
+ LPC_SYSCON->SYSAHBCLKCTRL1 |= (1 << 21);
+
+ // Peripheral reset
+ LPC_SYSCON->PRESETCTRL1 |= (1 << 21);
+ LPC_SYSCON->PRESETCTRL1 &= ~(1 << 21);
+
+ // store QEI control clock
+#warning
+ obj->PCLK = SystemCoreClock / LPC_SYSCON->SYSAHBCLKDIV;
+ //PCLK = 12000000 / LPC_SYSCON->SYSAHBCLKDIV;
+
+}
+
+void qei_free()
+{
+ // ToDo
+}
+
+void qei_reset()
+{
+ /*
+ Reset position counter (Bit 0),
+ position counter on index (Bit 1),
+ velocity (Bit 2),
+ index counter (Bit 3)
+ */
+ LPC_QEI->CON = 0xF;
+}
+
+//////////////////////// set //////////////////////////
+void qei_set_maxpos(qei_t *obj, uint32_t num)
+{
+ LPC_QEI->MAXPOS = num;
+ obj->maxPos = num;
+}
+
+void qei_set_invert_direction(bool is_invert)
+{
+ LPC_QEI->CONF &= ~(1 << 0);
+ LPC_QEI->CONF |= is_invert;
+}
+
+void qei_set_invert_index(bool is_invert)
+{
+ LPC_QEI->CONF &= ~(1 << 3);
+ LPC_QEI->CONF |= is_invert;
+}
+
+void qei_set_signal_mode(QEISignalMode mode)
+{
+ switch(mode)
+ {
+ case QUADRATURE_ENCODER: LPC_QEI->CONF &= ~(1 << 1); break;
+ case DIRECTION_CLOCK_ENCODER: LPC_QEI->CONF |= (1 << 1); break;
+ }
+}
+
+void qei_set_encoding(qei_t *obj, QEIEncoding encoding)
+{
+ switch(encoding)
+ {
+ case X2_ENCODING:
+ LPC_QEI->CONF &= ~(1 << 2);
+ obj->encoding = 2;
+ break;
+ case X4_ENCODING:
+ LPC_QEI->CONF |= (1 << 2);
+ obj->encoding = 4;
+ break;
+ }
+}
+
+void qei_set_timer_load(qei_t *obj, uint32_t val)
+{
+ LPC_QEI->LOAD = val;
+ obj->load = val;
+}
+
+//////////////////////// get //////////////////////////
+bool qei_get_direction()
+{
+#warning false : true?
+ bool val = (LPC_QEI->STAT & 0x00000001) ? true : false; // false : true?
+ return val;
+}
+
+uint32_t qei_get_position()
+{
+ return LPC_QEI->POS;
+}
+
+uint32_t qei_get_index()
+{
+ return LPC_QEI->INXCNT;
+}
+
+uint32_t qei_get_velocity()
+{
+ return LPC_QEI->CAP;
+}
+
+bool qei_get_invert_direction_status()
+{
+ return (LPC_QEI->CONF & (1 << 0));
+}
+
+bool qei_get_invert_index_status()
+{
+ return (LPC_QEI->CONF & (1 << 3));
+}
+
#endif //TARGET_LPC1549