123
Fork of LG by
DeviceQEI.c
- Committer:
- Diletant
- Date:
- 2016-06-05
- Revision:
- 167:bedc0a9d559a
- Parent:
- 161:efd949e8d536
- Child:
- 173:7f938afb0447
File content as of revision 167:bedc0a9d559a:
#include "Device.h" extern Device device; #define MAX_QEI_CNT 2147483646 void InitQEIDefaultSettings(void){ } void InitQEIState(void){ } void DeviceStartQEI(void){ //Power on LPC_SC->PCONP |= (1<<18); //Clock LPC_SC->PCLKSEL1 |= 0x00000001; // выбор частоты для кв.э. CLK=100MHz //Pin function select LPC_PINCON->PINSEL3 &= ~0x4100; LPC_PINCON->PINSEL3 |= 0x4100; //P1.20, p1.23 установить как входы кв.э //Pin mode select LPC_PINCON->PINMODE3 |= 0x3C300; //P1.20, p1.23 LPC_QEI->MAXPOS = MAX_QEI_CNT; //LPC_QEI->"регистор максимального положения" = 2147483646 LPC_QEI->FILTER = 2; // фильтр( ?? ) LPC_QEI->CON = 0xF; //сбросить в ноль все счетчики кв.э. (скорость, направление, позицию и тд) LPC_QEI->CONF = (0<<2) |(0<<1); //Quadrature inputs, no inverting,only A pulses are counted LPC_QEI->CLR = 0x1fff; //r. сбросить все прерывания LPC_QEI->IEC = 0x1fff; //r. запретить прерывание при изменении направления } void DeviceQEIRead(void) { uint32_t position = LPC_QEI->POS; device.controller.QEI.state.delta = position - device.controller.QEI.state.position; device.controller.QEI.state.position = position; //???????? //if (device.controller.QEI.state.delta < -0xfff) device.controller.QEI.state.delta += 0x10000; // обработка прохода значения через ноль //if (device.controller.QEI.state.delta > 0xfff) device.controller.QEI.state.delta -= 0x10000; // обработка прохода значения через ноль //???????? }