Mercurial > public > hwos_code
annotate src/isr.asm @ 236:e2ea74646127
configure hardware_flag byte
| author | heinrichsweikamp |
|---|---|
| date | Wed, 25 Feb 2015 22:19:30 +0100 |
| parents | 23311219dacc |
| children | 29acdb601548 |
| rev | line source |
|---|---|
| 0 | 1 ;============================================================================= |
| 2 ; | |
| 3 ; File isr.asm | |
| 4 ; | |
| 5 ; INTERUPT subroutines | |
| 6 ; | |
| 7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. | |
| 8 ;============================================================================= | |
| 9 ; HISTORY | |
| 10 ; 2011-05-24 : [jDG] Cleanups from initial Matthias code. | |
| 11 | |
| 12 #include "ostc3.inc" | |
| 13 #include "shared_definitions.h" ; Mailbox from/to p2_deco.c | |
| 14 #include "ms5541.inc" | |
| 15 #include "adc_lightsensor.inc" | |
| 16 | |
| 17 ;============================================================================= | |
| 18 | |
| 19 extern start | |
| 20 | |
| 21 isr_high CODE 0x0008 ;High Priority Interrups | |
| 22 bra HighInt | |
| 23 nop | |
| 24 nop | |
| 25 nop | |
| 26 nop | |
| 27 nop | |
| 28 nop | |
| 29 bra HighInt | |
| 30 | |
| 31 isr_low CODE 0x00018 ;Low Priority Interrups | |
| 32 ; *** low priority interrupts not used | |
| 33 retfie FAST ; Restores BSR, STATUS and WREG | |
| 34 | |
| 35 HighInt: | |
| 36 movff PRODL,isr_prod+0 | |
| 37 movff PRODH,isr_prod+1 | |
| 38 | |
| 39 ; Buttons | |
| 40 btfsc PIR1,TMR1IF ; Timer1 INT (Button hold-down Timer) | |
| 41 rcall timer1int | |
| 42 btfsc INTCON,INT0IF ; Buttons | |
| 43 rcall isr_switch_right | |
| 44 btfsc INTCON3,INT1IF ; Buttons | |
| 45 rcall isr_switch_left | |
| 46 | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
47 ; IR/S8-Link |
| 113 | 48 btfsc PIR3,RC2IF ; UART2 |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
49 rcall isr_uart2 ; IR/S8-Link |
| 0 | 50 btfsc PIR2,TMR3IF ; Timer 3 |
| 51 rcall isr_timer3 ; IR-Link Timeout | |
| 113 | 52 |
| 53 ; Pressure sensor and others | |
| 54 btfsc PIR5,TMR7IF ; Timer 7 | |
| 55 rcall isr_tmr7 ; Every 62,5ms | |
| 56 | |
| 0 | 57 ; RTCC |
| 58 btfsc PIR3,RTCCIF ; Real-time-clock interrupt | |
| 59 rcall isr_rtcc ; May return in bank common! | |
| 60 | |
| 61 movff isr_prod+1,PRODH | |
| 62 movff isr_prod+0,PRODL | |
| 63 retfie FAST ; Restores BSR, STATUS and WREG | |
| 64 | |
| 65 ;============================================================================= | |
| 66 | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
67 isr_uart2: ; IR/S8-Link |
| 0 | 68 banksel RCREG2 |
| 69 movf RCREG2,W | |
| 70 bcf RCSTA2,CREN ; Clear receiver status | |
| 71 bsf RCSTA2,CREN | |
| 72 banksel isr_backup | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
73 incf ir_s8_counter,F ; Increase counter |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
74 movff ir_s8_counter,isr1_temp ; Copy |
| 0 | 75 dcfsnz isr1_temp,F |
| 204 | 76 movwf ir_s8_buffer+.0 |
| 0 | 77 dcfsnz isr1_temp,F |
| 204 | 78 movwf ir_s8_buffer+.1 |
| 0 | 79 dcfsnz isr1_temp,F |
| 204 | 80 movwf ir_s8_buffer+.2 |
| 0 | 81 dcfsnz isr1_temp,F |
| 204 | 82 movwf ir_s8_buffer+.3 |
| 0 | 83 dcfsnz isr1_temp,F |
| 204 | 84 movwf ir_s8_buffer+.4 |
| 0 | 85 dcfsnz isr1_temp,F |
| 204 | 86 movwf ir_s8_buffer+.5 |
| 0 | 87 dcfsnz isr1_temp,F |
| 204 | 88 movwf ir_s8_buffer+.6 |
| 0 | 89 dcfsnz isr1_temp,F |
| 204 | 90 movwf ir_s8_buffer+.7 |
| 0 | 91 dcfsnz isr1_temp,F |
| 204 | 92 movwf ir_s8_buffer+.8 |
| 0 | 93 dcfsnz isr1_temp,F |
| 204 | 94 movwf ir_s8_buffer+.9 |
| 0 | 95 dcfsnz isr1_temp,F |
| 204 | 96 movwf ir_s8_buffer+.10 |
| 0 | 97 dcfsnz isr1_temp,F |
| 204 | 98 movwf ir_s8_buffer+.11 |
| 0 | 99 dcfsnz isr1_temp,F |
| 204 | 100 movwf ir_s8_buffer+.12 |
| 0 | 101 dcfsnz isr1_temp,F |
| 204 | 102 movwf ir_s8_buffer+.13 |
| 0 | 103 dcfsnz isr1_temp,F |
| 204 | 104 movwf ir_s8_buffer+.14 |
| 0 | 105 dcfsnz isr1_temp,F |
| 204 | 106 movwf ir_s8_buffer+.15 |
| 113 | 107 dcfsnz isr1_temp,F |
| 204 | 108 movwf ir_s8_buffer+.16 |
| 113 | 109 dcfsnz isr1_temp,F |
| 204 | 110 movwf ir_s8_buffer+.17 |
| 113 | 111 |
| 0 | 112 clrf TMR3L ; Preload timer |
| 113 movlw .253 | |
| 114 movwf TMR3H | |
| 115 bsf T3CON,TMR3ON ; (Re)Start Timeout counter | |
| 116 return | |
| 117 | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
118 isr_timer3: ; IR/S8-Link Timeout |
| 0 | 119 bcf T3CON,TMR3ON ; Stop Timer3 |
| 120 banksel isr_backup ; Select Bank0 for ISR data. | |
| 121 movlw .15 | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
122 cpfseq ir_s8_counter ; Got exact 15bytes? |
| 0 | 123 bra isr_timer3_1 ; No, test for 16bytes |
| 113 | 124 bra isr_timer3_ir ; Got 15 bytes, compute local checksum |
| 0 | 125 isr_timer3_1: |
| 126 movlw .16 | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
127 cpfseq ir_s8_counter ; Got exact 16bytes? |
| 113 | 128 bra isr_timer3_2 ; No, test for 17bytes |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
129 tstfsz ir_s8_buffer+.15 ; Last byte=0x00 |
| 0 | 130 bra isr_timer3_exit ; No, exit |
| 113 | 131 bra isr_timer3_ir ; Got 16 bytes, compute local checksum |
| 132 isr_timer3_2: | |
| 133 movlw .17 | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
134 cpfseq ir_s8_counter ; Got exact 17bytes? |
| 113 | 135 bra isr_timer3_exit ; No, exit |
| 136 bra isr_timer3_s8 ; S8 data | |
| 0 | 137 |
| 113 | 138 isr_timer3_ir: ; IR input |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
139 movff ir_s8_buffer+.0,PRODL |
| 0 | 140 clrf PRODH |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
141 movf ir_s8_buffer+.1,W |
| 0 | 142 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
143 movf ir_s8_buffer+.2,W |
| 0 | 144 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
145 movf ir_s8_buffer+.3,W |
| 0 | 146 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
147 movf ir_s8_buffer+.4,W |
| 0 | 148 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
149 movf ir_s8_buffer+.5,W |
| 0 | 150 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
151 movf ir_s8_buffer+.6,W |
| 0 | 152 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
153 movf ir_s8_buffer+.7,W |
| 0 | 154 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
155 movf ir_s8_buffer+.8,W |
| 0 | 156 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
157 movf ir_s8_buffer+.9,W |
| 0 | 158 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
159 movf ir_s8_buffer+.10,W |
| 0 | 160 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
161 movf ir_s8_buffer+.11,W |
| 0 | 162 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
163 movf ir_s8_buffer+.12,W |
| 0 | 164 rcall isr_timer3_checksum |
| 165 | |
| 166 ; Compare checksum | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
167 movf ir_s8_buffer+.13,W |
| 0 | 168 cpfseq PRODL ; Checksum ok? |
| 169 bra isr_timer3_exit ; No, exit | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
170 movf ir_s8_buffer+.14,W |
| 0 | 171 cpfseq PRODH ; Checksum ok? |
| 172 bra isr_timer3_exit ; No, exit | |
| 173 | |
| 174 ; Checksum OK, copy results | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
175 movff ir_s8_buffer+.1,hud_status_byte |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
176 movff ir_s8_buffer+.2,o2_mv_sensor1+0 |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
177 movff ir_s8_buffer+.3,o2_mv_sensor1+1 |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
178 movff ir_s8_buffer+.4,o2_mv_sensor2+0 |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
179 movff ir_s8_buffer+.5,o2_mv_sensor2+1 |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
180 movff ir_s8_buffer+.6,o2_mv_sensor3+0 |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
181 movff ir_s8_buffer+.7,o2_mv_sensor3+1 |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
182 movff ir_s8_buffer+.8,o2_ppo2_sensor1 |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
183 movff ir_s8_buffer+.9,o2_ppo2_sensor2 |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
184 movff ir_s8_buffer+.10,o2_ppo2_sensor3 |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
185 movff ir_s8_buffer+.11,hud_battery_mv+0 |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
186 movff ir_s8_buffer+.12,hud_battery_mv+1 |
| 0 | 187 |
| 188 movlw ir_timeout_value ; multiples of 62,5ms | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
189 movwf ir_S8_timeout ; Reload timeout |
|
227
03946aa48fa5
NEW: Support for hwHUD without the LED module
heinrichsweikamp
parents:
204
diff
changeset
|
190 |
|
03946aa48fa5
NEW: Support for hwHUD without the LED module
heinrichsweikamp
parents:
204
diff
changeset
|
191 banksel hud_status_byte |
|
03946aa48fa5
NEW: Support for hwHUD without the LED module
heinrichsweikamp
parents:
204
diff
changeset
|
192 bsf hud_connection_ok ; Set manually for hwHUD w/o the HUD module... |
|
03946aa48fa5
NEW: Support for hwHUD without the LED module
heinrichsweikamp
parents:
204
diff
changeset
|
193 banksel isr_backup ; Select Bank0 for ISR data. |
| 0 | 194 |
| 195 isr_timer3_exit: | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
196 clrf ir_s8_counter ; Clear pointer |
| 0 | 197 bcf PIR2,TMR3IF ; Clear flag |
| 198 return | |
| 199 | |
| 200 isr_timer3_checksum: | |
| 201 addwf PRODL,F | |
| 202 movlw .0 | |
| 203 addwfc PRODH,F | |
| 204 return | |
| 205 | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
206 isr_timer3_s8: ; S8 input |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
207 movff ir_s8_buffer+.0,PRODL |
| 113 | 208 clrf PRODH |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
209 movf ir_s8_buffer+.1,W |
| 113 | 210 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
211 movf ir_s8_buffer+.2,W |
| 113 | 212 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
213 movf ir_s8_buffer+.3,W |
| 113 | 214 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
215 movf ir_s8_buffer+.4,W |
| 113 | 216 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
217 movf ir_s8_buffer+.5,W |
| 113 | 218 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
219 movf ir_s8_buffer+.6,W |
| 113 | 220 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
221 movf ir_s8_buffer+.7,W |
| 113 | 222 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
223 movf ir_s8_buffer+.8,W |
| 113 | 224 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
225 movf ir_s8_buffer+.9,W |
| 113 | 226 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
227 movf ir_s8_buffer+.10,W |
| 113 | 228 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
229 movf ir_s8_buffer+.11,W |
| 113 | 230 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
231 movf ir_s8_buffer+.12,W |
| 113 | 232 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
233 movf ir_s8_buffer+.13,W |
| 113 | 234 rcall isr_timer3_checksum |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
235 movf ir_s8_buffer+.14,W |
| 113 | 236 rcall isr_timer3_checksum |
| 237 | |
| 238 ; Compare checksum | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
239 movf ir_s8_buffer+.15,W |
| 113 | 240 cpfseq PRODL ; Checksum ok? |
| 241 bra isr_timer3_exit ; No, exit | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
242 movf ir_s8_buffer+.16,W |
| 113 | 243 cpfseq PRODH ; Checksum ok? |
| 244 bra isr_timer3_exit ; No, exit | |
| 245 | |
| 246 ; Checksum OK, copy results | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
247 movff ir_s8_buffer+.3,hud_status_byte |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
248 movff ir_s8_buffer+.13,hud_battery_mv+0 |
|
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
249 movff ir_s8_buffer+.14,hud_battery_mv+1 |
| 113 | 250 |
| 251 banksel common | |
| 252 bsf new_s8_data_available ; set flag | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
253 banksel ir_S8_timeout |
| 113 | 254 |
| 255 movlw ir_timeout_value ; multiples of 62,5ms | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
256 movwf ir_S8_timeout ; Reload timeout |
| 113 | 257 bra isr_timer3_exit ; Exit |
| 258 | |
| 259 | |
| 0 | 260 ;============================================================================= |
| 261 | |
| 262 isr_tmr7: ; each 62,5ms | |
| 263 bcf PIR5,TMR7IF ; clear flag | |
| 264 banksel 0xF16 ; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM. | |
| 265 movlw .248 | |
| 266 movwf TMR7H ; -> Rollover after 2048 cycles -> 62,5ms | |
| 267 | |
| 268 banksel isr_backup | |
| 269 movf max_CCPR1L,W ; Dimm value | |
| 270 cpfseq CCPR1L ; = current PWM value? | |
| 271 rcall isr_dimm_tft ; No, adjust until max_CCPR1L=CCPR1L ! | |
| 272 | |
| 273 banksel isr_backup | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
274 decfsz ir_S8_timeout,F ; IR Data still valid? |
| 0 | 275 bra isr_tmr7_2 ; Yes, continue |
| 276 ; timeout, clear IR-Data | |
| 277 | |
| 278 movlw ir_timeout_value ; multiples of 62,5ms | |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
178
diff
changeset
|
279 movwf ir_S8_timeout ; Reload timeout |
| 0 | 280 |
| 281 banksel common | |
| 236 | 282 btfss analog_o2_input |
| 113 | 283 bra isr_tmr7_1a ; Always with normal ostc3 hardware |
| 284 btfss s8_digital | |
| 285 bra isr_tmr7_2 ; only when digital | |
| 286 isr_tmr7_1a: | |
| 0 | 287 clrf o2_mv_sensor1+0 |
| 288 clrf o2_mv_sensor1+1 | |
| 289 clrf o2_mv_sensor2+0 | |
| 290 clrf o2_mv_sensor2+1 | |
| 291 clrf o2_mv_sensor3+0 | |
| 292 clrf o2_mv_sensor3+1 | |
| 293 clrf hud_battery_mv+0 | |
| 294 clrf hud_battery_mv+1 | |
| 295 clrf hud_status_byte | |
| 296 clrf o2_ppo2_sensor1 | |
| 297 clrf o2_ppo2_sensor2 | |
| 298 clrf o2_ppo2_sensor3 | |
| 299 | |
| 300 isr_tmr7_2: | |
| 301 banksel common | |
| 302 btfss no_sensor_int ; No sensor interrupt (because it's addressed during sleep) | |
| 303 bra isr_sensor_state2 ; No, continue | |
| 304 banksel isr_backup ; Back to Bank0 ISR data | |
| 305 return | |
| 306 | |
| 307 isr_set_speed_to_normal: | |
| 308 ; Set Speed to normal | |
| 309 movlw b'01110010' | |
| 310 movwf OSCCON ; 16MHz INTOSC | |
| 311 movlw b'00000000' | |
| 312 movwf OSCTUNE ; 4x PLL Disable (Bit6) - only works with 8 or 16MHz (=32 or 64MHz) | |
| 313 movlw b'00001101' ; 1:2 Postscaler, 1:4 Prescaler, Timer 2 start -> 1960Hz (no-flicker) | |
| 314 movwf T2CON | |
| 315 btfss OSCCON,HFIOFS | |
| 316 bra $-2 ; Wait until clock is stable | |
| 317 return | |
| 318 | |
| 319 isr_sensor_state2: | |
| 320 banksel common | |
| 321 movff sensor_state_counter,WREG | |
| 322 btfss WREG,0 ; every 1/4 second | |
| 323 bsf quarter_second_update ; Set flag | |
| 324 movlw d'2' | |
| 325 cpfseq speed_setting ; Set to normal in case it's not already in normal speed mode | |
| 326 rcall isr_set_speed_to_normal | |
| 327 banksel isr_backup ; Back to Bank0 ISR data | |
| 328 | |
| 329 incf sensor_state_counter,F ; counts to eight for state maschine | |
| 330 | |
| 331 ; State 1: Clear flags and average registers, get temperature (51us) and start pressure integration (73,5us) | |
| 332 ; State 2: Get pressure (51us), start temperature integration (73,5us) and calculate temperature compensated pressure (233us) | |
| 333 ; State 3: Get temperature (51us) and start pressure integration (73,5us) | |
| 334 ; State 4: Get pressure (51us), start temperature integration (73,5us) and calculate temperature compensated pressure (233us) | |
| 335 ; State 5: Get temperature (51us) and start pressure integration (73,5us) | |
| 336 ; State 6: Get pressure (51us), start temperature integration (73,5us) and calculate temperature compensated pressure (233us) | |
| 337 ; State 7: Get temperature (51us) and start pressure integration (73,5us) | |
| 338 ; State 8: Get pressure (51us), start temperature integration (73,5us), calculate temperature compensated pressure (233us) and build average for half-second update of tempperature and pressure | |
| 339 | |
| 340 movff sensor_state_counter,WREG ; WREG used as temp here... | |
| 341 dcfsnz WREG,F | |
| 342 bra sensor_int_state1_plus_restart ; Do State 1 | |
| 343 dcfsnz WREG,F | |
| 344 bra sensor_int_state2 ; Do State 2 | |
| 345 dcfsnz WREG,F | |
| 346 bra sensor_int_state1 ; Do State 3 | |
| 347 dcfsnz WREG,F | |
| 348 bra sensor_int_state2 ; Do State 4 | |
| 349 dcfsnz WREG,F | |
| 350 bra sensor_int_state1 ; Do State 5 | |
| 351 dcfsnz WREG,F | |
| 352 bra sensor_int_state2 ; Do State 6 | |
| 353 dcfsnz WREG,F | |
| 354 bra sensor_int_state1 ; Do State 7 | |
| 355 ; bra sensor_int2_plus_average ; Do State 8 | |
| 356 ;sensor_int2_plus_average: | |
| 357 ; First, do state2: | |
| 358 call get_pressure_value ; State2: Get pressure (51us) | |
| 359 call get_temperature_start ; and start temperature integration (73,5us) | |
| 360 call calculate_compensation ; calculate temperature compensated pressure (27us) | |
| 361 ; Build average | |
| 362 bcf STATUS,C ; clear carry bit. | |
| 363 rrcf amb_pressure_avg+1 ; amb_pressure sum / 2 | |
| 364 rrcf amb_pressure_avg+0 | |
| 365 bcf STATUS,C ; clear carry bit, twice. | |
| 366 rrcf amb_pressure_avg+1 ; amb_pressure sum / 4 | |
| 367 rrcf amb_pressure_avg+0 | |
| 368 | |
| 369 movff amb_pressure_avg+1,amb_pressure+1 ; copy into actual register | |
| 370 movff amb_pressure_avg+0,amb_pressure+0 | |
| 371 | |
| 372 bcf STATUS,C | |
| 373 btfsc temperature_avg+1,7 ; Copy sign bit to carry | |
| 374 bsf STATUS,C | |
| 375 rrcf temperature_avg+1 ; Signed temperature /2 | |
| 376 rrcf temperature_avg+0 | |
| 377 bcf STATUS,C | |
| 378 btfsc temperature_avg+1,7 ; Copy sign bit to carry | |
| 379 bsf STATUS,C | |
| 380 rrcf temperature_avg+1 ; Signed temperature /4 | |
| 381 rrcf temperature_avg+0 | |
| 382 | |
| 383 movff temperature_avg+1,temperature+1 ; copy into actual register | |
| 384 movff temperature_avg+0,temperature+0 | |
| 385 | |
| 386 banksel common ; flag1 is in Bank1 | |
| 387 bcf temp_changed ; Clear flag for temperature update | |
| 388 bcf pressure_refresh ; Clear flag for pressure update | |
| 389 banksel isr_backup ; Back to Bank0 ISR data | |
| 390 | |
| 391 ; Temp changed? | |
| 392 movf temperature+0,W | |
| 393 cpfseq last_temperature+0 | |
| 394 bra isr_sensor_state2_2 ; Yes | |
| 395 movf temperature+1,W | |
| 396 cpfseq last_temperature+1 | |
| 397 bra isr_sensor_state2_2 ; Yes | |
| 398 | |
| 399 bra isr_sensor_state2_3 ; no change | |
| 400 | |
| 401 isr_sensor_state2_2: | |
| 402 banksel common ; flag1 is in Bank1 | |
| 403 bsf temp_changed ; Yes | |
| 404 banksel isr_backup ; Back to Bank0 ISR data | |
| 405 isr_sensor_state2_3: | |
| 406 movff temperature+0,last_temperature+0 ; Copy for compare | |
| 407 movff temperature+1,last_temperature+1 | |
| 408 | |
| 409 movf amb_pressure+0,W | |
| 410 cpfseq last_pressure+0 | |
| 411 bra isr_sensor_state2_4 ; Yes | |
| 412 movf amb_pressure+1,W | |
| 413 cpfseq last_pressure+1 | |
| 414 bra isr_sensor_state2_4 ; Yes | |
| 415 | |
| 416 bra isr_sensor_state2_5 ; No change | |
| 417 isr_sensor_state2_4: | |
| 418 banksel common ; flag1 is in Bank1 | |
| 419 bsf pressure_refresh ; Yes | |
| 420 banksel isr_backup ; Back to Bank0 ISR data | |
| 421 isr_sensor_state2_5: | |
| 422 movff amb_pressure+0,last_pressure+0 ; Copy for compare | |
| 423 movff amb_pressure+1,last_pressure+1 | |
| 424 | |
| 425 clrf sensor_state_counter ; Then reset State counter | |
| 176 | 426 banksel common ; flag2 is in Bank1 |
| 0 | 427 btfss simulatormode_active ; are we in simulator mode? |
| 428 bra comp_air_pressure ; no | |
| 176 | 429 ; Always set pressure_refresh flag in simulator mode |
| 430 bsf pressure_refresh ; Yes | |
| 431 banksel isr_backup ; Back to Bank0 ISR data | |
| 0 | 432 movlw LOW d'1000' ; yes, so simulate 1000mbar surface pressure |
| 433 movwf last_surfpressure+0 | |
| 434 movlw HIGH d'1000' | |
| 435 movwf last_surfpressure+1 | |
| 436 | |
| 437 comp_air_pressure: | |
| 176 | 438 banksel isr_backup ; Back to Bank0 ISR data |
| 0 | 439 movf last_surfpressure+0,W ; compensate airpressure |
| 440 subwf amb_pressure+0,W | |
| 441 movwf rel_pressure+0 ; rel_pressure stores depth! | |
| 442 | |
| 443 movf last_surfpressure+1,W | |
| 444 subwfb amb_pressure+1,W | |
| 445 movwf rel_pressure+1 | |
| 446 btfss STATUS,N ; result is below zero? | |
| 447 bra sensor_int_state_exit | |
| 448 clrf rel_pressure+0 ; Yes, do not display negative depths | |
| 449 clrf rel_pressure+1 ; e.g. when surface air pressure dropped during the dive | |
| 450 bra sensor_int_state_exit | |
| 451 | |
| 452 sensor_int_state1_plus_restart: | |
| 453 clrf amb_pressure_avg+0 ; pressure average registers | |
| 454 clrf amb_pressure_avg+1 | |
| 455 clrf temperature_avg+0 | |
| 456 clrf temperature_avg+1 | |
| 457 | |
| 458 sensor_int_state1: | |
| 459 call get_temperature_value ; State 1: Get temperature | |
| 460 call get_pressure_start ; and start pressure integration. | |
| 461 bra sensor_int_state_exit | |
| 462 | |
| 463 sensor_int_state2: | |
| 464 call get_pressure_value ; State2: Get pressure (51us) | |
| 465 call get_temperature_start ; and start temperature integration (73,5us) | |
| 466 call calculate_compensation ; calculate temperature compensated pressure (233us) | |
| 467 ; bra sensor_int_state_exit | |
| 468 sensor_int_state_exit: | |
| 469 rcall isr_restore_clock ; Restore clock | |
| 470 return | |
| 471 ;============================================================================= | |
| 472 | |
| 473 isr_dimm_tft: ; Adjust until max_CCPR1L=CCPR1L ! | |
| 474 banksel common | |
| 475 btfsc tft_is_dimming ; Ignore while dimming | |
| 476 return | |
| 477 banksel isr_backup | |
| 478 movf max_CCPR1L,W | |
| 479 cpfsgt CCPR1L ; CCPR1L>max_CCPR1L? | |
| 480 bra isr_dimm_tft2 ; No, dimm up | |
| 481 ; dimm down | |
| 482 decf CCPR1L,F ; -1 | |
| 483 return | |
| 484 isr_dimm_tft2: | |
| 485 movf max_CCPR1L,W | |
|
31
53a09c1b7410
BUGFIX: alternating brightness at very low ambient light
heinrichsweikamp
parents:
30
diff
changeset
|
486 sublw ambient_light_min_eco |
|
53a09c1b7410
BUGFIX: alternating brightness at very low ambient light
heinrichsweikamp
parents:
30
diff
changeset
|
487 cpfsgt CCPR1L ; CCPR1L>max_CCPR1L-ambient_light_min_eco? |
| 0 | 488 bra isr_dimm_tft3 ; No, dimm up slow |
| 489 ; dimm up faster | |
| 490 movlw .5 | |
| 491 addwf CCPR1L,F | |
| 492 isr_dimm_tft3: | |
| 493 incf CCPR1L,F ; +1 | |
| 494 return | |
| 495 | |
| 496 | |
| 497 isr_rtcc: ; each second | |
| 498 bcf PIR3,RTCCIF ; clear flag | |
| 499 banksel 0xF16 ; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM. | |
| 500 bsf RTCCFG,RTCPTR1 | |
| 501 bsf RTCCFG,RTCPTR0 ; year | |
| 502 movff RTCVALL,year ; format is BCD! | |
| 503 movff RTCVALH,day ; dummy read | |
| 504 movff RTCVALL,day ; format is BCD! | |
| 505 movff RTCVALH,month ; format is BCD! | |
| 506 movff RTCVALL,hours ; format is BCD! | |
| 507 movff RTCVALH,secs ; format is BCD! | |
| 508 movff RTCVALL,secs ; format is BCD! | |
| 509 movff RTCVALH,mins ; format is BCD! | |
| 510 banksel isr_backup ; Back to Bank0 ISR data | |
| 511 | |
| 512 ; Convert BCD to DEC and set registers | |
| 513 movff mins, isr1_temp | |
| 514 rcall isr_rtcc_convert ; Converts to dec with result in WREG | |
| 515 movff WREG,mins | |
| 516 movff secs, isr1_temp | |
| 517 rcall isr_rtcc_convert ; Converts to dec with result in WREG | |
| 518 movff WREG,secs | |
| 519 movff hours, isr1_temp | |
| 520 rcall isr_rtcc_convert ; Converts to dec with result in WREG | |
| 521 movff WREG,hours | |
| 522 movff month, isr1_temp | |
| 523 rcall isr_rtcc_convert ; Converts to dec with result in WREG | |
| 524 movff WREG,month | |
| 525 movff day, isr1_temp | |
| 526 rcall isr_rtcc_convert ; Converts to dec with result in WREG | |
| 527 movff WREG,day | |
| 528 movff year, isr1_temp | |
| 529 rcall isr_rtcc_convert ; Converts to dec with result in WREG | |
| 530 movff WREG,year | |
| 531 | |
| 532 ; Place once/second tasks for ISR here (Be sure of the right bank!) | |
| 533 banksel common ; flag1 is in Bank1 | |
| 534 btfss sleepmode ; in Sleepmode? | |
| 535 call get_ambient_level ; No, get ambient light level and set max_CCPR1L | |
| 536 | |
| 537 rcall isr_battery_gauge ; Add amount of battery consumption to battery_gauge:6 | |
| 538 | |
| 539 banksel common ; flag1 is in Bank1 | |
| 540 bsf onesecupdate ; A new second has begun | |
| 541 btfsc divemode ; in divemode? | |
| 542 rcall isr_divemode_1sec ; Yes, do some divemode stuff in bank common | |
| 543 | |
| 544 tstfsz secs ; Secs == 0 ? | |
| 545 return ; No, Done. | |
| 546 | |
| 547 bsf oneminupdate ; A new minute has begun | |
| 548 | |
| 549 btfss divemode ; In Divemode? | |
| 550 rcall check_nofly_desat_time ; No, so reduce NoFly and Desat and increase interval | |
| 551 | |
| 552 ; Check if a new hour has just begun | |
| 553 tstfsz mins ; mins=0? | |
| 554 bra isr_rtcc2 ; No | |
| 555 bsf onehourupdate ; Yes, set flag | |
| 556 | |
| 557 isr_rtcc2: | |
| 558 banksel isr_backup ; Back to Bank0 ISR data | |
| 559 return ; Done. | |
| 560 | |
| 561 isr_battery_gauge: | |
| 562 banksel isr_backup ; Bank0 ISR data | |
| 563 movlw current_sleepmode ; 100µA/3600 -> nAs (Sleepmode current) | |
| 564 movwf isr1_temp ; Store value (low byte) | |
| 565 clrf isr2_temp ; High byte | |
| 566 | |
| 567 banksel common ; flag1 is in Bank1 | |
| 568 btfss sleepmode ; in Sleepmode? | |
| 569 rcall isr_battery_gauge2 ; No, compute current consumtion value into isr1_temp and isr2_temp | |
| 570 | |
| 571 banksel isr_backup ; Bank0 ISR data | |
| 572 movf isr1_temp,W ; 48Bit add of isr1_temp and isr2_temp into battery_gauge:6 | |
| 573 addwf battery_gauge+0,F | |
| 574 movf isr2_temp,W | |
| 575 addwfc battery_gauge+1,F | |
| 576 movlw .0 | |
| 577 addwfc battery_gauge+2,F | |
| 578 addwfc battery_gauge+3,F | |
| 579 addwfc battery_gauge+4,F | |
| 580 addwfc battery_gauge+5,F | |
| 581 return | |
| 582 | |
| 583 isr_battery_gauge2: | |
| 584 ; set consumtion rate in nAs for an one second interval | |
| 585 ; Example: | |
| 586 ; movlw LOW .55556 ; 0,2A/3600*1e9s = nAs | |
| 587 ; movwf isr1_temp ; Low byte | |
| 588 ; movlw HIGH .55556 ; 0,2A/3600*1e9s = nAs | |
| 589 ; movwf isr2_temp ; High byte | |
| 590 | |
| 591 ; Current consumption for LED backlight is 47*CCPR1L+272 | |
| 592 movf CCPR1L,W | |
| 593 mullw current_backlight_multi | |
| 594 movlw LOW current_backlight_offset | |
| 595 addwf PRODL,F | |
| 596 movlw HIGH current_backlight_offset | |
| 597 addwfc PRODH,F | |
| 598 movff PRODL,isr1_temp | |
| 599 movff PRODH,isr2_temp ; isr1_temp and isr2_temp hold value for backlight | |
| 600 | |
| 601 ; Add current for CPU and GPU | |
| 602 ; speed_setting=1: ECO (3,1mA -> 861nAs), =2: NORMAL (5,50mA -> 1528nAs) or =3: FASTEST (8,04mA -> 2233nAs) | |
| 603 movlw .1 | |
| 604 cpfseq speed_setting | |
| 605 bra isr_battery_gauge3 | |
| 606 banksel isr_backup ; Bank0 ISR data | |
| 607 movlw LOW current_speed_eco | |
| 608 addwf isr1_temp,F | |
| 609 movlw HIGH current_speed_eco | |
| 610 addwfc isr2_temp,F | |
| 611 bra isr_battery_gauge5 | |
| 612 isr_battery_gauge3: | |
| 613 movlw .2 | |
| 614 cpfseq speed_setting | |
| 615 bra isr_battery_gauge4 | |
| 616 banksel isr_backup ; Bank0 ISR data | |
| 617 movlw LOW current_speed_normal | |
| 618 addwf isr1_temp,F | |
| 619 movlw HIGH current_speed_normal | |
| 620 addwfc isr2_temp,F | |
| 621 bra isr_battery_gauge5 | |
| 622 isr_battery_gauge4: | |
| 623 banksel isr_backup ; Bank0 ISR data | |
| 624 movlw LOW current_speed_fastest | |
| 625 addwf isr1_temp,F | |
| 626 movlw HIGH current_speed_fastest | |
| 627 addwfc isr2_temp,F | |
| 628 isr_battery_gauge5: | |
| 629 ; Add current if IR reciever is on | |
| 630 btfss ir_power ; IR enabled? | |
| 631 bra isr_battery_gauge6 ; no | |
| 632 movlw LOW current_ir_reciever | |
| 633 addwf isr1_temp,F | |
| 634 movlw HIGH current_ir_reciever | |
| 635 addwfc isr2_temp,F | |
| 636 isr_battery_gauge6: | |
| 637 ; Add current for compass/accelerometer | |
| 638 btfss compass_enabled ; compass active? | |
| 639 bra isr_battery_gauge7 ; no | |
| 640 movlw LOW current_compass | |
| 641 addwf isr1_temp,F | |
| 642 movlw HIGH current_compass | |
| 643 addwfc isr2_temp,F | |
| 644 isr_battery_gauge7: | |
| 645 return | |
| 646 | |
| 647 isr_divemode_1sec: | |
| 648 incf samplesecs,F ; "samplingrate" diving seconds done | |
| 649 decf samplesecs_value,W ; holds "samplingrate" value (minus 1 into WREG) | |
| 650 cpfsgt samplesecs ; Done? | |
| 651 bra isr_divemode_1sec2 ; no | |
| 652 | |
| 653 clrf samplesecs ; clear counter... | |
| 654 bsf store_sample ; ...and set bit for profile storage | |
| 655 isr_divemode_1sec2: | |
| 656 ; Increase re-setable average depth divetime counter | |
| 176 | 657 infsnz average_divesecs+0,F ; increase stopwatch registers |
| 0 | 658 incf average_divesecs+1,F ; increase stopwatch registers |
| 659 ; Increase total divetime (Regardless of start_dive_threshold) | |
| 148 | 660 infsnz total_divetime_seconds+0,F |
| 661 incf total_divetime_seconds+1,F ; Total dive time (Regardless of start_dive_threshold) | |
| 0 | 662 |
| 663 btfss divemode2 ; displayed divetime is running? | |
| 664 return ; No (e.g. too shallow) | |
| 665 | |
| 666 ; increase divetime registers (Displayed dive time) | |
| 667 incf divesecs,F | |
| 668 movlw d'59' | |
| 669 cpfsgt divesecs | |
| 670 bra isr_divemode_1sec2a | |
| 671 | |
| 672 clrf divesecs | |
| 673 bsf realdive ; this bit is always set (again) if the dive is longer then one minute | |
| 148 | 674 infsnz divemins+0,F |
| 675 incf divemins+1,F ; increase divemins | |
| 0 | 676 |
| 677 isr_divemode_1sec2a: | |
| 678 btfss FLAG_apnoe_mode ; Are we in Apnoe mode? | |
| 679 return ; No | |
| 680 | |
| 681 incf apnoe_secs,F ; increase descent registers | |
| 682 movlw d'59' | |
| 683 cpfsgt apnoe_secs ; full minute? | |
| 684 return ; No | |
| 685 clrf apnoe_secs | |
| 686 incf apnoe_mins,F ; increase descent mins | |
| 687 return | |
| 688 | |
| 689 ;============================================================================= | |
| 690 ; BCD to Binary convertion. | |
| 691 ; Input: isr1_temp = Value in BCD | |
| 692 ; Output WREG = value in binary. | |
| 693 isr_rtcc_convert: | |
| 694 swapf isr1_temp, W | |
| 695 andlw 0x0F ; W= tens | |
| 696 rlncf WREG, W ; W= 2*tens | |
| 697 subwf isr1_temp, F ; 16*tens + ones - 2*tens | |
| 698 subwf isr1_temp, F ; 14*tens + ones - 2*tens | |
| 699 subwf isr1_temp, W ; 12*tens + ones - 2*tens | |
| 700 return | |
| 701 | |
| 702 ;============================================================================= | |
| 703 | |
| 704 isr_switch_right: ; | |
| 705 bcf INTCON,INT0IE ; Disable INT0 | |
| 706 banksel common ; flag1 is in Bank1 | |
|
152
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
707 btfss flip_screen ; 180° flipped? |
|
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
708 bsf switch_right ; Set flag |
|
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
709 btfsc flip_screen ; 180° flipped? |
|
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
710 bsf switch_left ; Set flag |
| 0 | 711 bra isr_switch_common ; Continue... |
| 712 | |
| 713 isr_switch_left: ; | |
| 714 bcf INTCON3,INT1IE ; Disable INT1 | |
| 715 banksel common ; flag1 is in Bank1 | |
|
152
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
716 btfss flip_screen ; 180° flipped? |
|
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
717 bsf switch_left ; Set flag |
|
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
718 btfsc flip_screen ; 180° flipped? |
|
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
719 bsf switch_right ; Set flag |
| 0 | 720 isr_switch_common: |
| 721 ; load timer1 for first press | |
| 722 clrf TMR1L | |
| 723 movlw TMR1H_VALUE_FIRST ; in steps of 7,8125ms | |
| 724 movwf TMR1H | |
| 725 bsf T1CON,TMR1ON ; Start Timer 1 | |
| 726 banksel isr_backup ; Select Bank0 for ISR data. | |
| 727 bcf INTCON3,INT1IF ; Clear flag | |
| 728 bcf INTCON,INT0IF ; Clear flag | |
| 729 return | |
| 730 | |
| 731 timer1int: | |
| 732 bcf PIR1,TMR1IF ; Clear flag | |
| 733 banksel common ; flag1 is in Bank1 | |
| 204 | 734 bcf INTCON,INT0IF ; Clear flag |
| 735 bcf INTCON3,INT1IF ; Clear flag | |
| 0 | 736 btfss switch_left1 ; Left button hold-down? |
| 737 bra timer1int_left ; Yes | |
| 738 btfss switch_right2 ; Right button hold-down? | |
| 739 bra timer1int_right ; Yes | |
| 740 | |
| 741 ; No button hold-down, stop Timer 1 | |
| 742 bcf T1CON,TMR1ON ; Stop Timer 1 | |
| 743 bsf INTCON,INT0IE ; Enable INT0 | |
| 744 bsf INTCON3,INT1IE ; Enable INT1 | |
| 745 return | |
| 746 | |
| 747 timer1int_left: | |
|
152
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
748 btfss flip_screen ; 180° flipped? |
| 0 | 749 bsf switch_left ; (Re-)Set flag |
|
152
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
750 btfsc flip_screen ; 180° flipped? |
|
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
751 bsf switch_right ; (Re-)Set flag |
| 0 | 752 bra timer1int_common ; Continue |
| 753 timer1int_right: | |
|
152
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
754 btfss flip_screen ; 180° flipped? |
|
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
755 bsf switch_right ; Set flag |
|
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
756 btfsc flip_screen ; 180° flipped? |
|
19ad15f04f60
BUGFIX: Clear Setpoint-Fallback warning when in bailout
heinrichsweikamp
parents:
148
diff
changeset
|
757 bsf switch_left ; Set flag |
| 0 | 758 timer1int_common: |
| 759 ; load timer1 for next press | |
| 760 clrf TMR1L | |
| 761 movlw TMR1H_VALUE_CONT ; Surface mode | |
| 762 btfsc divemode | |
| 763 movlw TMR1H_VALUE_CONT_DIVE ; Dive mode | |
| 764 movwf TMR1H | |
| 765 return ; Return from timer1int with timer1 kept running | |
| 766 | |
| 767 ;============================================================================= | |
| 768 | |
| 769 check_nofly_desat_time: | |
| 770 movf nofly_time+0,W ; Is nofly null ? | |
| 771 iorwf nofly_time+1,W | |
| 772 bz check_nofly_desat_time2 ; yes... | |
| 773 | |
| 774 movlw d'1' | |
| 775 subwf nofly_time+0,F | |
| 776 movlw d'0' | |
| 777 subwfb nofly_time+1,F ; reduce by one | |
| 778 | |
| 779 check_nofly_desat_time2: | |
| 780 movf desaturation_time+0,W ; Is Desat null ? | |
| 781 iorwf desaturation_time+1,W | |
| 782 bz check_nofly_desat_time3 ; yes... | |
| 783 | |
| 784 movlw d'1' | |
| 785 subwf desaturation_time+0,F | |
| 786 movlw d'0' | |
| 787 subwfb desaturation_time+1,F ; reduce by one... | |
| 788 | |
| 147 | 789 ; Increase surface interval timer |
| 790 infsnz surface_interval+0,F | |
| 791 incf surface_interval+1,F | |
| 0 | 792 return ; Done |
| 793 | |
| 794 check_nofly_desat_time3: | |
| 795 clrf surface_interval+0 | |
| 796 clrf surface_interval+1 ; Clear surface interval timer | |
| 797 return ; Done. | |
| 798 | |
| 799 ;============================================================================= | |
| 800 | |
| 801 isr_restore_clock: | |
| 802 banksel isr_backup | |
| 803 movff speed_setting,isr1_temp ; Copy to Bank0 | |
| 804 movlw d'1' | |
| 805 cpfseq isr1_temp | |
| 806 bra isr_restore_speed2 | |
| 807 ; Reset to eco | |
| 808 movlw b'00000000' | |
| 809 movwf OSCTUNE ; 4x PLL Disable (Bit6) - only works with 8 or 16MHz (=32 or 64MHz) | |
| 810 movlw b'00110010' | |
| 811 movwf OSCCON ; 1MHz INTOSC | |
| 812 movlw T2CON_ECO | |
| 813 movwf T2CON | |
| 814 bra isr_restore_exit | |
| 815 isr_restore_speed2: | |
| 816 movlw d'2' | |
| 817 cpfseq isr1_temp | |
| 818 bra isr_restore_speed3 | |
| 819 ; Reset to normal | |
| 820 movlw b'01110010' | |
| 821 movwf OSCCON ; 16MHz INTOSC | |
| 822 movlw b'00000000' | |
| 823 movwf OSCTUNE ; 4x PLL Disable (Bit6) - only works with 8 or 16MHz (=32 or 64MHz) | |
| 824 movlw T2CON_NORMAL | |
| 825 movwf T2CON | |
| 826 bra isr_restore_exit | |
| 827 | |
| 828 isr_restore_speed3: | |
| 829 ; Reset to fastest | |
| 830 movlw b'01110010' ; 16MHz INTOSC | |
| 831 movwf OSCCON | |
| 832 movlw b'01000000' | |
| 833 movwf OSCTUNE ; 4x PLL Enable (Bit6) - only works with 8 or 16MHz (=32 or 64MHz) | |
| 834 movlw T2CON_FASTEST | |
| 835 movwf T2CON | |
| 836 ; bra isr_restore_exit | |
| 837 isr_restore_exit: | |
| 838 btfss OSCCON,HFIOFS | |
| 839 bra isr_restore_exit ; loop until PLL is stable | |
| 840 return | |
| 841 | |
| 842 END |
