123

Dependencies:   mbed

Fork of LG by igor Apu

Committer:
Diletant
Date:
Mon May 09 20:03:26 2016 +0000
Revision:
156:e68ee0bcdcda
Child:
161:efd949e8d536
Device & ... update. Not final!!!

Who changed what in which revision?

UserRevisionLine numberNew 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->QEIMAXPOS = MAX_QEI_CNT; //LPC_QEI->"регистор максимального положения" = 2147483646
Diletant 156:e68ee0bcdcda 21 LPC_QEI->MAXPOS = MAX_QEI_CNT; //LPC_QEI->"регистор максимального положения" = 2147483646
Diletant 156:e68ee0bcdcda 22 LPC_QEI->FILTER = 2; // фильтр( ?? )
Diletant 156:e68ee0bcdcda 23 //LPC_QEI->QEICON = 0xF; //сбросить в ноль все счетчики кв.э. (скорость, направление, позицию и тд)
Diletant 156:e68ee0bcdcda 24 LPC_QEI->CON = 0xF; //сбросить в ноль все счетчики кв.э. (скорость, направление, позицию и тд)
Diletant 156:e68ee0bcdcda 25 //LPC_QEI->QEICONF = (0<<2) |(0<<1); //Quadrature inputs, no inverting,only A pulses are counted
Diletant 156:e68ee0bcdcda 26 LPC_QEI->CONF = (0<<2) |(0<<1); //Quadrature inputs, no inverting,only A pulses are counted
Diletant 156:e68ee0bcdcda 27
Diletant 156:e68ee0bcdcda 28 //LPC_QEI->QEICLR = 0x1fff; //r. сбросить все прерывания
Diletant 156:e68ee0bcdcda 29 LPC_QEI->CLR = 0x1fff; //r. сбросить все прерывания
Diletant 156:e68ee0bcdcda 30 //LPC_QEI->QEIIEC = 0x1fff; //r. запретить прерывание при изменении направления
Diletant 156:e68ee0bcdcda 31 LPC_QEI->IEC = 0x1fff; //r. запретить прерывание при изменении направления
Diletant 156:e68ee0bcdcda 32 }
Diletant 156:e68ee0bcdcda 33
Diletant 156:e68ee0bcdcda 34 void DeviceQEIRead(void)
Diletant 156:e68ee0bcdcda 35 {
Diletant 156:e68ee0bcdcda 36 //uint32_t position = LPC_QEI->QEIPOS;
Diletant 156:e68ee0bcdcda 37 uint32_t position = LPC_QEI->POS;
Diletant 156:e68ee0bcdcda 38 device.controller.QEI.state.delta = position - device.controller.QEI.state.position;
Diletant 156:e68ee0bcdcda 39 device.controller.QEI.state.position = position;
Diletant 156:e68ee0bcdcda 40
Diletant 156:e68ee0bcdcda 41 //????????
Diletant 156:e68ee0bcdcda 42 //if (device.controller.QEI.state.delta < -0xfff) device.controller.QEI.state.delta += 0x10000; // обработка прохода значения через ноль
Diletant 156:e68ee0bcdcda 43 //if (device.controller.QEI.state.delta > 0xfff) device.controller.QEI.state.delta -= 0x10000; // обработка прохода значения через ноль
Diletant 156:e68ee0bcdcda 44 //????????
Diletant 156:e68ee0bcdcda 45 }