Mercurial > public > hwos_code
annotate src/eeprom_rs232.asm @ 604:ca4556fb60b9
bump to 2.99beta, work on 3.00 stable
| author | heinrichsweikamp |
|---|---|
| date | Thu, 22 Nov 2018 19:47:26 +0100 |
| parents | b455b31ce022 |
| children | c40025d8e750 |
| rev | line source |
|---|---|
| 0 | 1 ;============================================================================= |
| 2 ; | |
| 604 | 3 ; File eeprom_rs232.asm V2.99a |
| 0 | 4 ; |
| 5 ; Internal EEPROM, RS232 | |
| 6 ; | |
| 7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. | |
| 8 ;============================================================================= | |
| 9 ; HISTORY | |
| 10 ; 2011-08-06 : [mH] moving from OSTC code | |
| 11 | |
| 275 | 12 #include "hwos.inc" |
| 0 | 13 #include "wait.inc" |
| 582 | 14 #include "shared_definitions.h" |
| 15 #include "rtc.inc" | |
| 16 | |
| 17 write_int_eeprom macro eeprom_address | |
| 18 movlw eeprom_address | |
| 19 call write_int_eeprom_1 | |
| 20 endm | |
| 21 | |
| 22 read_int_eeprom macro eeprom_address | |
| 23 movlw eeprom_address | |
| 24 call read_int_eeprom_1 | |
| 25 endm | |
| 26 | |
| 27 ;============================================================================= | |
| 604 | 28 eeprom code 0xF00000+0x10 |
| 29 ; skip SERIAL number - it should not be overwritten | |
| 582 | 30 |
| 31 global eeprom_serial_save | |
| 32 global eeprom_opt_backup | |
| 33 | |
| 34 eeprom_serial_save res 2 | |
| 35 eeprom_opt_backup res 0x3E | |
| 0 | 36 |
| 37 ;============================================================================= | |
| 604 | 38 ee_rs232 CODE |
| 0 | 39 |
| 582 | 40 global write_int_eeprom_1 |
| 0 | 41 write_int_eeprom_1: |
| 42 movwf EEADR | |
| 604 | 43 bra write_eeprom ; writes and "returns" after write |
| 582 | 44 |
| 0 | 45 |
| 46 global read_int_eeprom_1 | |
| 47 read_int_eeprom_1: | |
| 48 movwf EEADR | |
| 604 | 49 bra read_eeprom ; reads and "returns" after write |
| 0 | 50 |
| 51 ;============================================================================= | |
| 604 | 52 ; reads from internal EEPROM |
| 53 ; Input: EEADRH:EEADR = EEPROM address | |
| 54 ; Output: EEDATA | |
| 55 ; Trashed: NONE | |
| 0 | 56 global read_eeprom |
| 582 | 57 read_eeprom: |
| 0 | 58 bcf EECON1,EEPGD |
| 59 bcf EECON1,CFGS | |
| 60 bsf EECON1,RD | |
| 61 return | |
| 62 | |
| 604 | 63 ;============================================================================= |
| 64 ; writes into internal EEPROM | |
| 65 ; Input: EEADRH:EEADR = EEPROM address | |
| 66 ; EEDATA = byte to write | |
| 67 ; Trashed: WREG | |
| 68 global write_eeprom | |
| 69 write_eeprom: | |
| 70 bcf EECON1,EEPGD | |
| 71 bcf EECON1,CFGS | |
| 72 bsf EECON1,WREN | |
| 73 | |
| 74 bcf INTCON,GIE ; disable interrupts for the next 5 instructions | |
| 75 movlw 0x55 | |
| 76 movwf EECON2 | |
| 77 movlw 0xAA | |
| 78 movwf EECON2 | |
| 79 bsf EECON1,WR | |
| 80 bsf INTCON,GIE ; ...but the flag for the ISR routines were still set, so they will interrupt now! | |
| 81 | |
| 82 write_eep2: | |
| 83 btfsc EECON1,WR | |
| 84 bra write_eep2 ; wait about 4ms... | |
| 85 bcf EECON1,WREN | |
| 86 return | |
| 87 | |
| 88 | |
| 582 | 89 global disable_ir_s8 |
| 90 disable_ir_s8: | |
| 91 banksel TXSTA2 | |
| 92 clrf TXSTA2 | |
| 93 clrf RCSTA2 | |
| 94 banksel common | |
| 95 bcf ir_power ; IR off | |
| 604 | 96 bcf mcp_power ; power-down instrumentation amp |
| 97 bsf s8_npower ; power-down S8 HUD | |
| 0 | 98 return |
| 99 | |
| 100 | |
| 582 | 101 global enable_ir_s8 |
|
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
151
diff
changeset
|
102 enable_ir_s8: |
| 0 | 103 ;init serial port2 (TRISG2) |
| 582 | 104 btfsc analog_o2_input |
| 604 | 105 bra enable_s8 ; start S8 |
| 113 | 106 |
| 582 | 107 banksel BAUDCON2 |
| 108 movlw b'00100000' ; BRG16=0 ; inverted for IR | |
| 113 | 109 movwf BAUDCON2 |
| 582 | 110 movlw b'00100000' ; BRGH=0, SYNC=0 |
| 111 movwf TXSTA2 | |
| 604 | 112 movlw .102 ; SPBRGH:SPBRG = .102 : 2403 BAUD @ 16 MHz |
| 582 | 113 movwf SPBRG2 |
| 114 movlw b'10010000' | |
| 115 movwf RCSTA2 | |
| 116 banksel common | |
| 604 | 117 bsf ir_power ; power-up IR |
| 582 | 118 btfss ir_power |
| 119 bra $-6 | |
| 120 return | |
| 0 | 121 |
| 113 | 122 enable_s8: |
| 582 | 123 ; Check for Digital/Analog |
| 604 | 124 bsf s8_npower ; power-down S8 HUD |
| 125 WAITMS d'1' ; very short delay | |
| 126 bsf mcp_power ; power-up instrumentation amp | |
| 582 | 127 btfss mcp_power |
| 128 bra $-6 | |
| 129 banksel TXSTA2 | |
| 130 clrf TXSTA2 | |
| 131 clrf RCSTA2 | |
| 132 banksel common | |
| 113 | 133 |
| 582 | 134 ; It may be digital, check for voltage when isolator is powered |
| 604 | 135 bcf s8_npower ; power S8 HUD |
| 136 WAITMS d'1' ; very short delay | |
| 113 | 137 |
| 582 | 138 btfsc PORTG,2 ; RX2=1? |
| 604 | 139 bra enable_s8_2 ; YES - digital |
| 582 | 140 WAITMS d'30' |
| 141 btfsc PORTG,2 ; RX2=1? | |
| 604 | 142 bra enable_s8_2 ; YES - digital |
| 582 | 143 |
| 144 ; Not found, set to analog (fail-safe) | |
| 113 | 145 |
| 146 enable_s8_analog: | |
| 582 | 147 ; S8 Analog |
| 604 | 148 bsf s8_npower ; power-down S8 HUD |
| 149 bcf s8_digital ; clear flag | |
| 582 | 150 return |
| 113 | 151 |
| 582 | 152 enable_s8_2: ; S8 Digital |
| 153 banksel BAUDCON2 | |
| 154 movlw b'00000000' ; BRG16=0 ; normal for S8 | |
| 113 | 155 movwf BAUDCON2 |
| 582 | 156 movlw b'00100000' ; BRGH=0, SYNC=0 |
| 157 movwf TXSTA2 | |
| 604 | 158 movlw .25 ; SPBRGH:SPBRG = .25 : 9615 BAUD @ 16 MHz |
| 582 | 159 movwf SPBRG2 |
| 160 movlw b'10010000' | |
| 161 movwf RCSTA2 | |
| 162 banksel common | |
| 604 | 163 bsf s8_digital ; set flag |
| 582 | 164 return |
| 113 | 165 |
| 0 | 166 ;============================================================================= |
| 582 | 167 |
| 0 | 168 global enable_rs232 |
| 169 enable_rs232: | |
| 604 | 170 call speed_normal ; 16 MHz |
| 0 | 171 enable_rs232_2: |
| 582 | 172 movlw T2CON_NORMAL |
| 173 cpfseq T2CON | |
| 604 | 174 bra enable_rs232_2 ; wait until speed is normal |
| 175 bcf PORTE,0 ; start comms | |
| 0 | 176 ;init serial port1 (TRISC6/7) |
| 582 | 177 movlw b'00100100' ; BRGH=1, SYNC=0 |
| 178 movwf TXSTA1 | |
| 179 movlw b'10010000' | |
| 180 movwf RCSTA1 | |
| 0 | 181 return |
| 182 | |
| 582 | 183 |
| 0 | 184 global disable_rs232 |
| 185 disable_rs232: | |
| 186 clrf RCSTA1 | |
| 582 | 187 clrf TXSTA1 ; UART disable |
| 188 bcf PORTC,6 ; TX hard to GND | |
| 604 | 189 bsf PORTE,0 ; stop comms |
| 0 | 190 return |
| 191 | |
| 582 | 192 |
| 0 | 193 global rs232_wait_tx |
| 194 rs232_wait_tx: | |
| 582 | 195 btfss TXSTA1,TRMT ; RS232 Busy? |
| 604 | 196 bra rs232_wait_tx ; YES - wait... |
| 582 | 197 |
| 198 btfss ble_available ; ble available? | |
| 604 | 199 return ; NO - done |
| 582 | 200 |
| 604 | 201 btfsc NRTS ; wait for Bluetooth module |
| 202 bra rs232_wait_tx ; YES - wait... | |
| 203 return ; done | |
|
344
1e342e433839
CHANGE: GF and aGF high range increased to 45-110%
heinrichsweikamp
parents:
276
diff
changeset
|
204 |
| 0 | 205 |
| 582 | 206 global rs232_wait_tx2 |
| 113 | 207 rs232_wait_tx2: |
| 582 | 208 banksel TXSTA2 |
| 209 | 209 rs232_wait_tx2_1: |
| 604 | 210 btfss TXSTA2,TRMT ; RS232 busy? |
| 211 bra rs232_wait_tx2_1 ; YES - wait... | |
| 582 | 212 banksel common |
| 604 | 213 return ; done |
| 113 | 214 |
| 0 | 215 global rs232_get_byte |
| 216 rs232_get_byte: | |
| 582 | 217 bcf rs232_receive_overflow ; clear flag |
| 604 | 218 clrf uart1_temp ; set uart1_temp to .10 without using WREG: first clear to 0, then... |
| 219 bsf uart1_temp,1 ; set bit 1 (value 2), | |
| 220 bsf uart1_temp,3 ; and bit 3 (value 8). | |
| 582 | 221 clrf uart2_temp |
| 222 clrf uart3_temp | |
| 0 | 223 rs232_get_byte2: |
| 582 | 224 btfsc PIR1,RCIF ; data arrived? |
| 604 | 225 return ; YES |
| 582 | 226 decfsz uart3_temp,F |
| 378 | 227 bra rs232_get_byte2 |
| 582 | 228 decfsz uart2_temp,F |
| 229 bra rs232_get_byte2 | |
| 230 decfsz uart1_temp,F | |
| 0 | 231 bra rs232_get_byte2 |
| 582 | 232 ; timeout occurred (about 400ms) |
| 233 bsf rs232_receive_overflow ; set flag | |
| 378 | 234 rs232_get_byte3: |
| 604 | 235 bcf RCSTA1,CREN ; clear receiver status |
| 0 | 236 bsf RCSTA1,CREN |
| 582 | 237 return ; and return anyway |
| 238 | |
| 239 ;============================================================================= | |
| 240 | |
| 241 global do_logoffset_common_write | |
| 242 do_logoffset_common_write: | |
| 604 | 243 movlw 0x26 |
| 244 cpfslt hi ; is offset < 0x26?? (decimal 9983 at max, hence save for another +10) ? | |
| 245 return ; NO - abort | |
| 246 movff lo,EEDATA ; YES - proceed writing offset to EEPROM | |
| 582 | 247 write_int_eeprom 0x0D |
| 248 movff hi,EEDATA | |
| 249 write_int_eeprom 0x0E | |
| 250 return | |
| 251 | |
| 252 global do_logoffset_common_read | |
| 253 do_logoffset_common_read: | |
| 254 clrf EEADRH | |
| 255 read_int_eeprom 0x0D | |
| 256 movff EEDATA,lo | |
| 257 read_int_eeprom 0x0E | |
| 604 | 258 movff EEDATA,hi ; existing logbook offset into lo:hi |
| 582 | 259 return |
| 260 | |
| 261 | |
| 262 global update_battery_registers | |
| 263 update_battery_registers: | |
| 264 ; save battery_gauge:6 into EEPROM 0x07-0x0C | |
| 265 clrf EEADRH | |
| 266 movff battery_gauge+0,EEDATA | |
| 267 write_int_eeprom 0x07 | |
| 268 movff battery_gauge+1,EEDATA | |
| 269 write_int_eeprom 0x08 | |
| 270 movff battery_gauge+2,EEDATA | |
| 271 write_int_eeprom 0x09 | |
| 272 movff battery_gauge+3,EEDATA | |
| 273 write_int_eeprom 0x0A | |
| 274 movff battery_gauge+4,EEDATA | |
| 275 write_int_eeprom 0x0B | |
| 276 movff battery_gauge+5,EEDATA | |
| 277 write_int_eeprom 0x0C | |
| 278 movff battery_type,EEDATA ; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah | |
| 279 write_int_eeprom 0x0F | |
| 280 return | |
| 281 | |
| 282 | |
| 283 global vault_decodata_into_eeprom | |
| 284 vault_decodata_into_eeprom: | |
| 285 ; Vault in EEPROM 512...1023 | |
| 286 ; Write 0xAA at 512 to indicate valid data in vault | |
| 287 ; Store last time/date | |
| 288 ; Store 0x700 to 0x780 (pres_tissue_N2 and pres_tissue_He) | |
| 289 movlw HIGH .512 ; =2 | |
| 290 movwf EEADRH | |
| 291 movlw 0xAA | |
| 292 movwf EEDATA | |
| 293 write_int_eeprom .0 | |
| 294 ; Store date/time | |
| 295 movff year,EEDATA | |
| 296 write_int_eeprom .1 | |
| 297 movff month,EEDATA | |
| 298 write_int_eeprom .2 | |
| 299 movff day,EEDATA | |
| 300 write_int_eeprom .3 | |
| 301 movff hours,EEDATA | |
| 302 write_int_eeprom .4 | |
| 303 movff mins,EEDATA | |
| 304 write_int_eeprom .5 | |
| 305 movff secs,EEDATA | |
| 306 write_int_eeprom .6 | |
| 307 | |
| 308 movff int_O_CNS_fraction+0,EEDATA | |
| 309 write_int_eeprom .7 | |
| 310 movff int_O_CNS_fraction+1,EEDATA | |
| 311 write_int_eeprom .8 | |
| 312 movff int_O_desaturation_time+0,EEDATA | |
| 313 write_int_eeprom .9 | |
| 314 movff int_O_desaturation_time+1,EEDATA | |
| 315 write_int_eeprom .10 | |
| 316 movff surface_interval+0,EEDATA | |
| 317 write_int_eeprom .11 | |
| 318 movff surface_interval+1,EEDATA | |
| 319 write_int_eeprom .12 | |
| 320 movff int_O_gradient_factor+0,EEDATA ; value limited to 255, only lower byte in use for value | |
| 321 write_int_eeprom .13 | |
| 322 movff int_O_nofly_time+0,EEDATA | |
| 323 write_int_eeprom .14 | |
| 324 movff int_O_nofly_time+1,EEDATA | |
| 325 write_int_eeprom .15 | |
| 0 | 326 |
| 582 | 327 ; Tissue data from 16 to 144 |
| 328 movlw .16 | |
| 329 movwf EEADR | |
| 330 movlw .128 | |
| 331 movwf lo | |
| 332 lfsr FSR1,0x700 ; pres_tissue_N2+0, 32*4Byte Float = 128Bytes | |
| 333 vault_decodata_into_eeprom2: | |
| 334 movff POSTINC1,EEDATA | |
| 335 call write_eeprom ; EEDATA into EEPROM@EEADR | |
| 336 incf EEADR,F | |
| 604 | 337 decfsz lo,F ; all done? |
| 338 bra vault_decodata_into_eeprom2 ; NO | |
| 582 | 339 clrf EEADRH |
| 340 return | |
| 341 | |
| 342 global restore_decodata_from_eeprom | |
| 343 restore_decodata_from_eeprom: | |
| 344 movlw LOW .512 ; =0 | |
| 345 movwf EEADR | |
| 346 movlw HIGH .512 ; =2 | |
| 347 movwf EEADRH | |
| 348 | |
| 349 ; Restore date/time | |
| 350 read_int_eeprom .1 | |
| 351 movff EEDATA,year | |
| 352 read_int_eeprom .2 | |
| 353 movff EEDATA,month | |
| 354 read_int_eeprom .3 | |
| 355 movff EEDATA,day | |
| 356 read_int_eeprom .4 | |
| 357 movff EEDATA,hours | |
| 358 read_int_eeprom .5 | |
| 359 movff EEDATA,mins | |
| 360 read_int_eeprom .6 | |
| 361 movff EEDATA,secs | |
| 362 call rtc_set_rtc | |
| 363 | |
| 364 read_int_eeprom .7 | |
| 365 movff EEDATA,int_O_CNS_fraction+0 | |
| 366 read_int_eeprom .8 | |
| 367 movff EEDATA,int_O_CNS_fraction+1 | |
| 368 read_int_eeprom .9 | |
| 369 movff EEDATA,int_O_desaturation_time+0 | |
| 370 read_int_eeprom .10 | |
| 371 movff EEDATA,int_O_desaturation_time+1 | |
| 372 read_int_eeprom .11 | |
| 373 movff EEDATA,surface_interval+0 | |
| 374 read_int_eeprom .12 | |
| 375 movff EEDATA,surface_interval+1 | |
| 376 read_int_eeprom .13 | |
| 377 movff EEDATA,int_O_gradient_factor+0 | |
| 378 read_int_eeprom .14 | |
| 379 movff EEDATA,int_O_nofly_time+0 | |
| 380 read_int_eeprom .15 | |
| 381 movff EEDATA,int_O_nofly_time+1 | |
| 382 | |
| 383 ; Tissue data from 16 to 144 | |
| 384 movlw .16 | |
| 385 movwf EEADR | |
| 386 movlw .128 | |
| 387 movwf lo | |
| 604 | 388 lfsr FSR1,0x700 ; pres_tissue_N2+0, 32*4Byte Float = 128 Bytes |
| 582 | 389 restore_decodata_from_eeprom2: |
| 390 call read_eeprom ; EEPROM@EEADR into EEDATA | |
| 391 movff EEDATA,POSTINC1 | |
| 392 incf EEADR,F | |
| 604 | 393 decfsz lo,F ; all done? |
| 394 bra restore_decodata_from_eeprom2 ; NO | |
| 582 | 395 clrf EEADRH |
| 396 return | |
| 397 | |
| 398 | |
| 399 global reset_battery_internal_only | |
| 400 reset_battery_internal_only: | |
| 401 clrf EEADRH | |
| 604 | 402 clrf EEDATA ; delete to zero |
| 582 | 403 write_int_eeprom 0x07 |
| 404 write_int_eeprom 0x08 | |
| 405 write_int_eeprom 0x09 | |
| 406 write_int_eeprom 0x0A | |
| 407 write_int_eeprom 0x0B | |
| 408 write_int_eeprom 0x0C | |
| 409 banksel battery_gauge+0 | |
| 410 clrf battery_gauge+0 | |
| 411 clrf battery_gauge+1 | |
| 412 clrf battery_gauge+2 | |
| 413 clrf battery_gauge+3 | |
| 414 clrf battery_gauge+4 | |
| 415 clrf battery_gauge+5 | |
| 416 banksel common | |
| 417 movlw .100 | |
| 418 movwf batt_percent | |
| 419 return | |
| 420 | |
| 421 | |
| 422 global eeprom_reset_logbook_pointers | |
| 423 eeprom_reset_logbook_pointers: | |
| 604 | 424 clrf EEADRH ; make sure to select EEPROM bank 0 |
| 582 | 425 clrf EEDATA |
| 426 write_int_eeprom .4 | |
| 427 write_int_eeprom .5 | |
| 428 write_int_eeprom .6 | |
| 604 | 429 write_int_eeprom .2 ; also delete total dive counter |
| 582 | 430 write_int_eeprom .3 |
| 431 write_int_eeprom .16 | |
| 604 | 432 write_int_eeprom .17 ; ...and the backup counter, too |
| 582 | 433 return |
| 434 | |
| 435 END |
