123
Fork of LG by
Device.c@156:e68ee0bcdcda, 2016-05-09 (annotated)
- 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?
User | Revision | Line number | New 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 | */ |