123

Dependencies:   mbed

Fork of LG by igor Apu

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

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Diletant 137:14a0c452cf32 1 #include "Device.h"
Diletant 137:14a0c452cf32 2
Diletant 137:14a0c452cf32 3 Device device;
Diletant 137:14a0c452cf32 4 HashParam hashParamTable[HASH_PARAM_COUNT];
Diletant 149:abbf7663d27d 5 HashFunc hashFuncTable[HASH_FUNC_COUNT];
Diletant 137:14a0c452cf32 6
Diletant 137:14a0c452cf32 7 void InitDevice(void)
Diletant 137:14a0c452cf32 8 {
Diletant 137:14a0c452cf32 9 //Init system
Diletant 137:14a0c452cf32 10 SystemInit1(); // Инициализация контроллера: установка тактовых частот
Diletant 137:14a0c452cf32 11 SystemCoreClockUpdate1(); // расчет тактовой частоты процессора перед инициализацией UART - 100MHz
Diletant 137:14a0c452cf32 12
Diletant 156:e68ee0bcdcda 13 //Load default settings
Diletant 156:e68ee0bcdcda 14 DeviceInitAllWithDefaults();
Diletant 137:14a0c452cf32 15
Diletant 156:e68ee0bcdcda 16 //Load from flash - override defaults
Diletant 156:e68ee0bcdcda 17 DeviceFlashReadAll();
Diletant 156:e68ee0bcdcda 18
Diletant 156:e68ee0bcdcda 19 //Final initialization
Diletant 156:e68ee0bcdcda 20 DeviceInitAll();
Diletant 156:e68ee0bcdcda 21 }
Diletant 156:e68ee0bcdcda 22
Diletant 156:e68ee0bcdcda 23 void DeviceStart(void){
Diletant 156:e68ee0bcdcda 24 DeviceEnableMeasurementTimer();
Diletant 156:e68ee0bcdcda 25 DeviceEnableRegularTimer();
Diletant 156:e68ee0bcdcda 26 DevicePhotoDetectorSetPotentiometers();
Diletant 156:e68ee0bcdcda 27 DeviceStartLightUp();
Diletant 156:e68ee0bcdcda 28 DeviceStartDither();
Diletant 156:e68ee0bcdcda 29 }
Diletant 156:e68ee0bcdcda 30
Diletant 156:e68ee0bcdcda 31 void DeviceInitAllWithDefaults(void){
Diletant 156:e68ee0bcdcda 32 device.settings.address = 0;
Diletant 156:e68ee0bcdcda 33
Diletant 156:e68ee0bcdcda 34 //Init transmitter variables
Diletant 156:e68ee0bcdcda 35 device.host.transmitter.position = 0;
Diletant 156:e68ee0bcdcda 36
Diletant 156:e68ee0bcdcda 37 //Init controller
Diletant 156:e68ee0bcdcda 38 InitControllerWithDefaults();
Diletant 149:abbf7663d27d 39
Diletant 156:e68ee0bcdcda 40 //Init units
Diletant 156:e68ee0bcdcda 41 InitHostProtocolWithDefaults();
Diletant 156:e68ee0bcdcda 42 InitCountersWithDefaults();
Diletant 156:e68ee0bcdcda 43 InitLightUpWithDefaults();
Diletant 156:e68ee0bcdcda 44 InitPhotoDetectorWithDefaults();
Diletant 156:e68ee0bcdcda 45 InitDitherWithDefaults();
Diletant 156:e68ee0bcdcda 46 InitDACWithDefaults();
Diletant 156:e68ee0bcdcda 47 InitPathLengthControlSystemWithDefaults();
Diletant 156:e68ee0bcdcda 48 }
Diletant 137:14a0c452cf32 49
Diletant 156:e68ee0bcdcda 50 void DeviceInitAll(void){
Diletant 156:e68ee0bcdcda 51 //Init measurement cycle
Diletant 156:e68ee0bcdcda 52 device.measurement.counter = 0;
Diletant 156:e68ee0bcdcda 53 device.measurement.length = 32;
Diletant 156:e68ee0bcdcda 54 //Init regular cycle
Diletant 156:e68ee0bcdcda 55 device.regular.event1Hz = 0;
Diletant 156:e68ee0bcdcda 56 device.regular.event500Hz = 0;
Diletant 156:e68ee0bcdcda 57 device.regular.event1K = 0;
Diletant 156:e68ee0bcdcda 58 device.regular.event10K = 0;
Diletant 156:e68ee0bcdcda 59 device.regular.event100K = 0;
Diletant 156:e68ee0bcdcda 60 device.regular.time100K = 0;
Diletant 156:e68ee0bcdcda 61 device.regular.time10K = 0;
Diletant 156:e68ee0bcdcda 62 device.regular.time1K = 0;
Diletant 156:e68ee0bcdcda 63 device.regular.time500Hz = 0;
Diletant 156:e68ee0bcdcda 64 device.regular.time1Hz = 0;
Diletant 156:e68ee0bcdcda 65
Diletant 156:e68ee0bcdcda 66 //Init controller
Diletant 156:e68ee0bcdcda 67 InitController();
Diletant 156:e68ee0bcdcda 68
Diletant 137:14a0c452cf32 69 //Init host commununication protocol
Diletant 137:14a0c452cf32 70 InitHostProtocol();
Diletant 156:e68ee0bcdcda 71 //Init counters
Diletant 156:e68ee0bcdcda 72 InitCounters();
Diletant 149:abbf7663d27d 73 //Init light-up and back light unit
Diletant 149:abbf7663d27d 74 InitLightUp();
Diletant 156:e68ee0bcdcda 75 //Init photo detector
Diletant 156:e68ee0bcdcda 76 InitPhotoDetector();
Diletant 149:abbf7663d27d 77 //Init dither
Diletant 149:abbf7663d27d 78 InitDither();
Diletant 156:e68ee0bcdcda 79 //Init DAC of hfo & plcs
Diletant 156:e68ee0bcdcda 80 InitDAC();
Diletant 149:abbf7663d27d 81 //Init path length control system
Diletant 149:abbf7663d27d 82 InitPathLengthControlSystem();
Diletant 149:abbf7663d27d 83 }
Diletant 149:abbf7663d27d 84
Diletant 156:e68ee0bcdcda 85 void DeviceRegularEvent1Hz(void) {
Diletant 156:e68ee0bcdcda 86 if (device.regular.event1Hz) {
Diletant 156:e68ee0bcdcda 87 device.regular.event1Hz--;
Diletant 156:e68ee0bcdcda 88 device.regular.time1Hz++;
Diletant 156:e68ee0bcdcda 89
Diletant 156:e68ee0bcdcda 90 DeviceLightUpCycle();
Diletant 156:e68ee0bcdcda 91 }
Diletant 156:e68ee0bcdcda 92 }
Diletant 156:e68ee0bcdcda 93
Diletant 156:e68ee0bcdcda 94 void DeviceRegularEvent500Hz(void) {
Diletant 156:e68ee0bcdcda 95 if (device.regular.event500Hz) {
Diletant 156:e68ee0bcdcda 96 device.regular.event500Hz--;
Diletant 156:e68ee0bcdcda 97 }
Diletant 156:e68ee0bcdcda 98 }
Diletant 156:e68ee0bcdcda 99
Diletant 156:e68ee0bcdcda 100 void DeviceRegularEvent1KHz(void) {
Diletant 156:e68ee0bcdcda 101 if (device.regular.event1K) {
Diletant 156:e68ee0bcdcda 102 device.regular.event1K--;
Diletant 156:e68ee0bcdcda 103 device.regular.time1K++;
Diletant 156:e68ee0bcdcda 104 device.regular.time500Hz++;
Diletant 156:e68ee0bcdcda 105 if (device.regular.time1K == 1000) {
Diletant 156:e68ee0bcdcda 106 device.regular.time1K = 0;
Diletant 156:e68ee0bcdcda 107 device.regular.event1Hz++;
Diletant 156:e68ee0bcdcda 108 }
Diletant 156:e68ee0bcdcda 109 if (device.regular.time500Hz == 2) {
Diletant 156:e68ee0bcdcda 110 device.regular.time500Hz = 0;
Diletant 156:e68ee0bcdcda 111 device.regular.event500Hz++;
Diletant 156:e68ee0bcdcda 112 }
Diletant 156:e68ee0bcdcda 113 }
Diletant 149:abbf7663d27d 114 }
Diletant 149:abbf7663d27d 115
Diletant 156:e68ee0bcdcda 116 void DeviceRegularEvent10KHz(void) {
Diletant 156:e68ee0bcdcda 117 if (device.regular.event10K) {
Diletant 156:e68ee0bcdcda 118 device.regular.event10K--;
Diletant 156:e68ee0bcdcda 119 device.regular.time10K++;
Diletant 156:e68ee0bcdcda 120 if (device.regular.time10K == 10){
Diletant 156:e68ee0bcdcda 121 device.regular.time10K = 0;
Diletant 156:e68ee0bcdcda 122 device.regular.event1K++;
Diletant 156:e68ee0bcdcda 123 }
Diletant 156:e68ee0bcdcda 124
Diletant 156:e68ee0bcdcda 125 if ((device.host.response.type == RESPONSE_DELAYED) || (device.host.response.type == RESPONSE_PERIODIC)){
Diletant 156:e68ee0bcdcda 126 device.host.response.counter += 100;
Diletant 156:e68ee0bcdcda 127 if (device.host.response.counter > device.host.response.trigger) {
Diletant 156:e68ee0bcdcda 128 device.host.response.triggered = 1;
Diletant 156:e68ee0bcdcda 129 device.host.response.counter = 0;
Diletant 156:e68ee0bcdcda 130 }
Diletant 156:e68ee0bcdcda 131 }
Diletant 156:e68ee0bcdcda 132 }
Diletant 156:e68ee0bcdcda 133 }
Diletant 156:e68ee0bcdcda 134
Diletant 156:e68ee0bcdcda 135 void DeviceRegularEvent100KHz(void) {
Diletant 156:e68ee0bcdcda 136 if (device.regular.event100K) {
Diletant 156:e68ee0bcdcda 137 device.regular.event100K--;
Diletant 156:e68ee0bcdcda 138
Diletant 156:e68ee0bcdcda 139 device.regular.time100K++;
Diletant 156:e68ee0bcdcda 140 if (device.regular.time100K == 10) {
Diletant 156:e68ee0bcdcda 141 device.regular.time100K = 0;
Diletant 156:e68ee0bcdcda 142 device.regular.event10K++;
Diletant 156:e68ee0bcdcda 143 }
Diletant 156:e68ee0bcdcda 144
Diletant 156:e68ee0bcdcda 145 DeviceDitherCycle(); //Set/reset vibro 1/2 pins
Diletant 156:e68ee0bcdcda 146 }
Diletant 156:e68ee0bcdcda 147 }
Diletant 156:e68ee0bcdcda 148
Diletant 156:e68ee0bcdcda 149 void DeviceMeasurementInterruptHandler(void) {
Diletant 156:e68ee0bcdcda 150 //Read QEI
Diletant 156:e68ee0bcdcda 151 DeviceQEIRead();
Diletant 156:e68ee0bcdcda 152 //Count
Diletant 156:e68ee0bcdcda 153 DeviceCount();
Diletant 149:abbf7663d27d 154
Diletant 156:e68ee0bcdcda 155 //Receive ADCs samples using SSP
Diletant 156:e68ee0bcdcda 156 DeviceSSPReceive();
Diletant 156:e68ee0bcdcda 157 //Transmit DACs values using SSP
Diletant 156:e68ee0bcdcda 158 DeviceSSPTransmit(device.measurement.counter & 1);
Diletant 156:e68ee0bcdcda 159
Diletant 156:e68ee0bcdcda 160 //Update measurement cycle counter
Diletant 156:e68ee0bcdcda 161 device.measurement.counter++;
Diletant 156:e68ee0bcdcda 162 if (device.measurement.counter == device.measurement.length) device.measurement.counter = 0;
Diletant 156:e68ee0bcdcda 163 //Reset dither 10mks resolution counter
Diletant 156:e68ee0bcdcda 164 if (device.measurement.counter == 0) device.dither.state.counter = 0; //First dither half period
Diletant 156:e68ee0bcdcda 165 if (device.measurement.counter == 16) device.dither.state.counter = 0;//Second dither half period
Diletant 149:abbf7663d27d 166 }
Diletant 156:e68ee0bcdcda 167
Diletant 156:e68ee0bcdcda 168 void DeviceRegularInterruptHandler(void) {
Diletant 156:e68ee0bcdcda 169 device.regular.event100K++;
Diletant 156:e68ee0bcdcda 170 device.dither.state.counter++; //Dither 10 mks resolution counter
Diletant 156:e68ee0bcdcda 171 }
Diletant 156:e68ee0bcdcda 172
Diletant 149:abbf7663d27d 173 /*
Diletant 149:abbf7663d27d 174 int32_t FindByHash(uint32_t hash){
Diletant 149:abbf7663d27d 175 for (uint32_t i = 0; i < HASH_PARAM_COUNT; i++){
Diletant 149:abbf7663d27d 176 if (hashParamTable[i].hash == hash) return i;
Diletant 149:abbf7663d27d 177 }
Diletant 149:abbf7663d27d 178 return -1;
Diletant 149:abbf7663d27d 179 }
Diletant 149:abbf7663d27d 180 */