123
Fork of LG by
Device.c
- Committer:
- Diletant
- Date:
- 2016-05-09
- Revision:
- 156:e68ee0bcdcda
- Parent:
- 149:abbf7663d27d
- Child:
- 161:efd949e8d536
File content as of revision 156:e68ee0bcdcda:
#include "Device.h" Device device; HashParam hashParamTable[HASH_PARAM_COUNT]; HashFunc hashFuncTable[HASH_FUNC_COUNT]; void InitDevice(void) { //Init system SystemInit1(); // Инициализация контроллера: установка тактовых частот SystemCoreClockUpdate1(); // расчет тактовой частоты процессора перед инициализацией UART - 100MHz //Load default settings DeviceInitAllWithDefaults(); //Load from flash - override defaults DeviceFlashReadAll(); //Final initialization DeviceInitAll(); } void DeviceStart(void){ DeviceEnableMeasurementTimer(); DeviceEnableRegularTimer(); DevicePhotoDetectorSetPotentiometers(); DeviceStartLightUp(); DeviceStartDither(); } void DeviceInitAllWithDefaults(void){ device.settings.address = 0; //Init transmitter variables device.host.transmitter.position = 0; //Init controller InitControllerWithDefaults(); //Init units InitHostProtocolWithDefaults(); InitCountersWithDefaults(); InitLightUpWithDefaults(); InitPhotoDetectorWithDefaults(); InitDitherWithDefaults(); InitDACWithDefaults(); InitPathLengthControlSystemWithDefaults(); } void DeviceInitAll(void){ //Init measurement cycle device.measurement.counter = 0; device.measurement.length = 32; //Init regular cycle device.regular.event1Hz = 0; device.regular.event500Hz = 0; device.regular.event1K = 0; device.regular.event10K = 0; device.regular.event100K = 0; device.regular.time100K = 0; device.regular.time10K = 0; device.regular.time1K = 0; device.regular.time500Hz = 0; device.regular.time1Hz = 0; //Init controller InitController(); //Init host commununication protocol InitHostProtocol(); //Init counters InitCounters(); //Init light-up and back light unit InitLightUp(); //Init photo detector InitPhotoDetector(); //Init dither InitDither(); //Init DAC of hfo & plcs InitDAC(); //Init path length control system InitPathLengthControlSystem(); } void DeviceRegularEvent1Hz(void) { if (device.regular.event1Hz) { device.regular.event1Hz--; device.regular.time1Hz++; DeviceLightUpCycle(); } } void DeviceRegularEvent500Hz(void) { if (device.regular.event500Hz) { device.regular.event500Hz--; } } void DeviceRegularEvent1KHz(void) { if (device.regular.event1K) { device.regular.event1K--; device.regular.time1K++; device.regular.time500Hz++; if (device.regular.time1K == 1000) { device.regular.time1K = 0; device.regular.event1Hz++; } if (device.regular.time500Hz == 2) { device.regular.time500Hz = 0; device.regular.event500Hz++; } } } void DeviceRegularEvent10KHz(void) { if (device.regular.event10K) { device.regular.event10K--; device.regular.time10K++; if (device.regular.time10K == 10){ device.regular.time10K = 0; device.regular.event1K++; } if ((device.host.response.type == RESPONSE_DELAYED) || (device.host.response.type == RESPONSE_PERIODIC)){ device.host.response.counter += 100; if (device.host.response.counter > device.host.response.trigger) { device.host.response.triggered = 1; device.host.response.counter = 0; } } } } void DeviceRegularEvent100KHz(void) { if (device.regular.event100K) { device.regular.event100K--; device.regular.time100K++; if (device.regular.time100K == 10) { device.regular.time100K = 0; device.regular.event10K++; } DeviceDitherCycle(); //Set/reset vibro 1/2 pins } } void DeviceMeasurementInterruptHandler(void) { //Read QEI DeviceQEIRead(); //Count DeviceCount(); //Receive ADCs samples using SSP DeviceSSPReceive(); //Transmit DACs values using SSP DeviceSSPTransmit(device.measurement.counter & 1); //Update measurement cycle counter device.measurement.counter++; if (device.measurement.counter == device.measurement.length) device.measurement.counter = 0; //Reset dither 10mks resolution counter if (device.measurement.counter == 0) device.dither.state.counter = 0; //First dither half period if (device.measurement.counter == 16) device.dither.state.counter = 0;//Second dither half period } void DeviceRegularInterruptHandler(void) { device.regular.event100K++; device.dither.state.counter++; //Dither 10 mks resolution counter } /* int32_t FindByHash(uint32_t hash){ for (uint32_t i = 0; i < HASH_PARAM_COUNT; i++){ if (hashParamTable[i].hash == hash) return i; } return -1; } */