comparison src/isr.asm @ 646:5b7fe7777425

3.16 release
author heinrichs weikamp
date Thu, 14 Oct 2021 12:03:24 +0200
parents 8c1f1f334275
children 357341239438
comparison
equal deleted inserted replaced
642:a9a0188091e4 646:5b7fe7777425
321 321
322 banksel 0xF16 ; TMR7H/L are not part of the access RAM 322 banksel 0xF16 ; TMR7H/L are not part of the access RAM
323 movlw .248 ; reload timer 7, high byte (8x256 ticks -> 62.5 ms) 323 movlw .248 ; reload timer 7, high byte (8x256 ticks -> 62.5 ms)
324 movwf TMR7H ; ... (keep low byte running ) 324 movwf TMR7H ; ... (keep low byte running )
325 325
326 banksel isr_backup ; back to ISR default bank
327 decfsz isr_tmr7_helper,F ; decreased every 62,5ms
328 bra isr_tmr7_0
329 movlw .4 ; 62,5ms * 4 = 1/4 second
330 movwf isr_tmr7_helper
331 bsf trigger_quarter_second ; set flag (In access RAM)
332
333
334 isr_tmr7_0:
326 btfss update_surface_pressure ; shall update the surface pressure? 335 btfss update_surface_pressure ; shall update the surface pressure?
327 bra isr_tmr7_1 ; NO - skip 336 bra isr_tmr7_1 ; NO - skip
328 bcf update_surface_pressure ; YES - clear request flag 337 bcf update_surface_pressure ; YES - clear request flag
329 MOVII pressure_abs_ref,pressure_surf ; - update surface pressure 338 MOVII pressure_abs_ref,pressure_surf ; - update surface pressure
330 339
388 bsf trigger_S8_data_update ; signal a data update 397 bsf trigger_S8_data_update ; signal a data update
389 398
390 ENDIF ; _external_sensor 399 ENDIF ; _external_sensor
391 400
392 isr_sensor_state2: 401 isr_sensor_state2:
393 btfss sensor_state_counter,0 ; every 1/4 second
394 bsf trigger_quarter_second ; set flag
395
396 btfss speed_is_normal ; CPU running on normal speed? 402 btfss speed_is_normal ; CPU running on normal speed?
397 rcall isr_set_speed_to_normal ; NO - set CPU speed to normal 403 rcall isr_set_speed_to_normal ; NO - set CPU speed to normal
398 404
399 incf sensor_state_counter,F ; counts to eight for state machine 405 incf sensor_state_counter,F ; counts to eight for state machine
400 406
427 call get_pressure_value ; state 2: get pressure (51 us) 433 call get_pressure_value ; state 2: get pressure (51 us)
428 call get_temperature_start ; and start temperature integration (73.5 us) 434 call get_temperature_start ; and start temperature integration (73.5 us)
429 call calculate_compensation ; calculate temperature compensated pressure (27 us) 435 call calculate_compensation ; calculate temperature compensated pressure (27 us)
430 436
431 ; build average for pressure 437 ; build average for pressure
432 bcf STATUS,C ; clear carry bit 438 ;bcf STATUS,C ; clear carry bit - not needed since we don't use the +2 register later
433 rrcf pressure_abs_avg+1 ; divide by 2 439 rrcf pressure_abs_avg+2 ; divide by 2
440 rrcf pressure_abs_avg+1 ; ...
434 rrcf pressure_abs_avg+0 ; ... 441 rrcf pressure_abs_avg+0 ; ...
435 bcf STATUS,C ; clear carry bit 442 ;bcf STATUS,C ; clear carry bit - not needed since we don't use the +2 register later
436 rrcf pressure_abs_avg+1 ; divide by 2, again 443 rrcf pressure_abs_avg+2 ; divide by 2, again
444 rrcf pressure_abs_avg+1 ; ...
437 rrcf pressure_abs_avg+0 ; ... 445 rrcf pressure_abs_avg+0 ; ...
438 446
439 ; export averaged pressure 447 ; export averaged pressure
440 MOVII pressure_abs_avg,pressure_abs ; export result 448 MOVII pressure_abs_avg,pressure_abs ; export result (Which is 16 bit for all depths < 262m)
441 449
442 ; build average for temperature 450 ; build average for temperature
443 bcf STATUS,C ; clear carry bit by default 451 bcf STATUS,C ; clear carry bit by default
444 btfsc temperature_avg+1,7 ; sign bit set? 452 btfsc temperature_avg+1,7 ; sign bit set?
445 bsf STATUS,C ; YES - copy sign bit to carry bit 453 bsf STATUS,C ; YES - copy sign bit to carry bit
539 MOVII pressure_rel_cur,pressure_rel_min_trip ; YES - set new min rel pressure 547 MOVII pressure_rel_cur,pressure_rel_min_trip ; YES - set new min rel pressure
540 ENDIF ; _min_depth_option 548 ENDIF ; _min_depth_option
541 bra sensor_int_state_exit ; done 549 bra sensor_int_state_exit ; done
542 550
543 sensor_int_state1_plus_restart: 551 sensor_int_state1_plus_restart:
544 CLRI pressure_abs_avg ; clear average register for pressure 552 clrf pressure_abs_avg+0 ; clear pressure average register
553 clrf pressure_abs_avg+1
554 clrf pressure_abs_avg+2
545 CLRI temperature_avg ; clear average register for temperature 555 CLRI temperature_avg ; clear average register for temperature
546 556
547 sensor_int_state1: 557 sensor_int_state1:
548 call get_temperature_value ; state 1: get temperature... 558 call get_temperature_value ; state 1: get temperature...
549 call get_pressure_start ; ...and start pressure integration 559 call get_pressure_start ; ...and start pressure integration
550 bra sensor_int_state_exit 560 bra sensor_int_state_exit
551 561
552 sensor_int_state2: 562 sensor_int_state2:
553 call get_pressure_value ; state 2: get pressure (51 us)... 563 call get_pressure_value ; state 2: get pressure (51 us)...
645 655
646 rcall isr_battery_gauge ; calculate the current charge consumption and add it to the battery gauge 656 rcall isr_battery_gauge ; calculate the current charge consumption and add it to the battery gauge
647 rcall isr_update_uptime ; increment overall OSTC uptime 657 rcall isr_update_uptime ; increment overall OSTC uptime
648 rcall isr_update_timeout ; process the timeout timer 658 rcall isr_update_timeout ; process the timeout timer
649 659
660 movff opt_brightness_surface,brightness ; copy brightness - will be overwritten with opt_brightness_dive if in dive mdoe
650 btfsc divemode ; in dive mode? 661 btfsc divemode ; in dive mode?
651 rcall isr_divemode_1sec ; YES - do the every second dive mode tasks 662 rcall isr_divemode_1sec ; YES - do the every second dive mode tasks
652 663
653 ; increment surface interval counted in seconds 664 ; increment surface interval counted in seconds
654 btfsc divemode ; in dive mode? 665 btfsc divemode ; in dive mode?
802 813
803 ;----------------------------------------------------------------------------- 814 ;-----------------------------------------------------------------------------
804 ; Every Second Tasks while in Dive Mode 815 ; Every Second Tasks while in Dive Mode
805 ; 816 ;
806 isr_divemode_1sec: 817 isr_divemode_1sec:
818 movff opt_brightness_divemode,brightness ; copy brightness for dive mode
807 decfsz sampling_timer,F ; decrement sampling timer, became zero? 819 decfsz sampling_timer,F ; decrement sampling timer, became zero?
808 bra isr_divemode_1sec_1 ; NO 820 bra isr_divemode_1sec_1 ; NO
809 bsf trigger_sample_divedata ; YES - set trigger flag for sampling dive data 821 bsf trigger_sample_divedata ; YES - set trigger flag for sampling dive data
810 movff sampling_rate,sampling_timer; - reload timer 822 movff sampling_rate,sampling_timer; - reload timer
811 823
854 clrf apnoe_dive_secs ; YES - reset seconds to 0 866 clrf apnoe_dive_secs ; YES - reset seconds to 0
855 incf apnoe_dive_mins,F ; - increment dive time, minutes 867 incf apnoe_dive_mins,F ; - increment dive time, minutes
856 return ; - done 868 return ; - done
857 869
858 isr_divemode_1sec_4: ; at surface 870 isr_divemode_1sec_4: ; at surface
871 movff opt_brightness_surface,brightness ; copy brightness
859 btfss FLAG_apnoe_mode ; in apnoe mode? 872 btfss FLAG_apnoe_mode ; in apnoe mode?
860 return ; NO - done 873 return ; NO - done
861 bsf apnoe_at_surface ; YES - memorize been at the surface 874 bsf apnoe_at_surface ; YES - memorize been at the surface
862 incf apnoe_surface_secs,F ; - increment surface time, seconds 875 incf apnoe_surface_secs,F ; - increment surface time, seconds
863 movlw d'59' ; - 60 seconds make a minute 876 movlw d'59' ; - 60 seconds make a minute
889 ; Check Buttons 902 ; Check Buttons
890 ; 903 ;
891 isr_switch_right: 904 isr_switch_right:
892 bcf INTCON,INT0IE ; disable external interrupt 0 905 bcf INTCON,INT0IE ; disable external interrupt 0
893 906
894 btfsc button_hold_down_allowed,A ; ignore for mechanical push buttons 907 btfsc button_hold_down_allowed ; ignore for mechanical push buttons
895 bra isr_switch_right2 908 bra isr_switch_right2
896 btfsc T4CON,TMR4ON ; Timer4 running? 909 btfsc T4CON,TMR4ON ; Timer4 running?
897 bra timer4_restart ; Yes, restart 910 bra timer4_restart ; Yes, restart
898 isr_switch_right2: 911 isr_switch_right2:
899 912
904 bra isr_switch_common ; continue with common part 917 bra isr_switch_common ; continue with common part
905 918
906 isr_switch_left: 919 isr_switch_left:
907 bcf INTCON3,INT1IE ; disable external interrupt 1 920 bcf INTCON3,INT1IE ; disable external interrupt 1
908 921
909 btfsc button_hold_down_allowed,A ; ignore for mechanical push buttons 922 btfsc button_hold_down_allowed ; ignore for mechanical push buttons
910 bra isr_switch_left2 923 bra isr_switch_left2
911 btfsc T4CON,TMR4ON ; Timer4 running? 924 btfsc T4CON,TMR4ON ; Timer4 running?
912 bra timer4_restart ; Yes, restart 925 bra timer4_restart ; Yes, restart
913 isr_switch_left2: 926 isr_switch_left2:
914 927
917 btfsc flip_screen ; 180° flipped? 930 btfsc flip_screen ; 180° flipped?
918 bsf switch_right ; YES - set flag for right button 931 bsf switch_right ; YES - set flag for right button
919 ;bra isr_switch_common ; continue with common part 932 ;bra isr_switch_common ; continue with common part
920 933
921 isr_switch_common: 934 isr_switch_common:
922 btfss button_hold_down_allowed,A ; ignore for mechanical push buttons 935 btfss button_hold_down_allowed ; ignore for mechanical push buttons
923 bsf T4CON,TMR4ON ; Start timer 4 936 bsf T4CON,TMR4ON ; Start timer 4
924 937
925 btfsc tmr5_preemtion_allowed ; timer 5 preemption allowed? 938 btfsc tmr5_preemtion_allowed ; timer 5 preemption allowed?
926 bsf PIR5,TMR5IF ; YES - preempt timer 5 939 bsf PIR5,TMR5IF ; YES - preempt timer 5
927 movlw TMR1H_VALUE_FIRST ; load timer 1 (in steps of 7.8125 ms) 940 movlw TMR1H_VALUE_FIRST ; load timer 1 (in steps of 7.8125 ms)