123
Fork of LG by
DeviceQEI.c@161:efd949e8d536, 2016-05-15 (annotated)
- Committer:
- Diletant
- Date:
- Sun May 15 19:12:12 2016 +0000
- Revision:
- 161:efd949e8d536
- Parent:
- 156:e68ee0bcdcda
- Child:
- 167:bedc0a9d559a
Device & ... update. Not final!!!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Diletant | 156:e68ee0bcdcda | 1 | #include "Device.h" |
Diletant | 156:e68ee0bcdcda | 2 | extern Device device; |
Diletant | 156:e68ee0bcdcda | 3 | |
Diletant | 156:e68ee0bcdcda | 4 | #define MAX_QEI_CNT 2147483646 |
Diletant | 156:e68ee0bcdcda | 5 | |
Diletant | 156:e68ee0bcdcda | 6 | void InitQEIWithDefaults(void){ |
Diletant | 156:e68ee0bcdcda | 7 | } |
Diletant | 156:e68ee0bcdcda | 8 | |
Diletant | 156:e68ee0bcdcda | 9 | void InitQEI(void){ |
Diletant | 156:e68ee0bcdcda | 10 | //Power on |
Diletant | 156:e68ee0bcdcda | 11 | LPC_SC->PCONP |= (1<<18); |
Diletant | 156:e68ee0bcdcda | 12 | //Clock |
Diletant | 156:e68ee0bcdcda | 13 | LPC_SC->PCLKSEL1 |= 0x00000001; // выбор частоты для кв.э. CLK=100MHz |
Diletant | 156:e68ee0bcdcda | 14 | //Pin function select |
Diletant | 156:e68ee0bcdcda | 15 | LPC_PINCON->PINSEL3 &= ~0x4100; |
Diletant | 156:e68ee0bcdcda | 16 | LPC_PINCON->PINSEL3 |= 0x4100; //P1.20, p1.23 установить как входы кв.э |
Diletant | 156:e68ee0bcdcda | 17 | //Pin mode select |
Diletant | 156:e68ee0bcdcda | 18 | LPC_PINCON->PINMODE3 |= 0x3C300; //P1.20, p1.23 |
Diletant | 156:e68ee0bcdcda | 19 | |
Diletant | 156:e68ee0bcdcda | 20 | LPC_QEI->MAXPOS = MAX_QEI_CNT; //LPC_QEI->"регистор максимального положения" = 2147483646 |
Diletant | 156:e68ee0bcdcda | 21 | LPC_QEI->FILTER = 2; // фильтр( ?? ) |
Diletant | 156:e68ee0bcdcda | 22 | LPC_QEI->CON = 0xF; //сбросить в ноль все счетчики кв.э. (скорость, направление, позицию и тд) |
Diletant | 156:e68ee0bcdcda | 23 | LPC_QEI->CONF = (0<<2) |(0<<1); //Quadrature inputs, no inverting,only A pulses are counted |
Diletant | 156:e68ee0bcdcda | 24 | |
Diletant | 156:e68ee0bcdcda | 25 | LPC_QEI->CLR = 0x1fff; //r. сбросить все прерывания |
Diletant | 156:e68ee0bcdcda | 26 | LPC_QEI->IEC = 0x1fff; //r. запретить прерывание при изменении направления |
Diletant | 156:e68ee0bcdcda | 27 | } |
Diletant | 156:e68ee0bcdcda | 28 | |
Diletant | 156:e68ee0bcdcda | 29 | void DeviceQEIRead(void) |
Diletant | 156:e68ee0bcdcda | 30 | { |
Diletant | 156:e68ee0bcdcda | 31 | uint32_t position = LPC_QEI->POS; |
Diletant | 156:e68ee0bcdcda | 32 | device.controller.QEI.state.delta = position - device.controller.QEI.state.position; |
Diletant | 156:e68ee0bcdcda | 33 | device.controller.QEI.state.position = position; |
Diletant | 156:e68ee0bcdcda | 34 | |
Diletant | 156:e68ee0bcdcda | 35 | //???????? |
Diletant | 156:e68ee0bcdcda | 36 | //if (device.controller.QEI.state.delta < -0xfff) device.controller.QEI.state.delta += 0x10000; // обработка прохода значения через ноль |
Diletant | 156:e68ee0bcdcda | 37 | //if (device.controller.QEI.state.delta > 0xfff) device.controller.QEI.state.delta -= 0x10000; // обработка прохода значения через ноль |
Diletant | 156:e68ee0bcdcda | 38 | //???????? |
Diletant | 156:e68ee0bcdcda | 39 | } |