123

Dependencies:   mbed

Fork of LG by igor Apu

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;    // обработка прохода значения через ноль
  //????????
}