comparison src/isr.asm @ 608:d866684249bd

work on 2.99 stable
author heinrichsweikamp
date Mon, 07 Jan 2019 21:13:43 +0100
parents ca4556fb60b9
children 1ad0531e9078
comparison
equal deleted inserted replaced
607:c5151a490d88 608:d866684249bd
1 ;============================================================================= 1 ;=============================================================================
2 ; 2 ;
3 ; File isr.asm REFACTORED VERSION V2.99d 3 ; File isr.asm REFACTORED VERSION V2.99f
4 ; 4 ;
5 ; INTERUPT subroutines 5 ; INTERUPT subroutines
6 ; 6 ;
7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. 7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
8 ;============================================================================= 8 ;=============================================================================
389 banksel common 389 banksel common
390 movff sensor_state_counter,WREG 390 movff sensor_state_counter,WREG
391 btfss WREG,0 ; every 1/4 second 391 btfss WREG,0 ; every 1/4 second
392 bsf quarter_second_update ; set flag 392 bsf quarter_second_update ; set flag
393 banksel isr_backup ; back to Bank0 ISR data 393 banksel isr_backup ; back to Bank0 ISR data
394 movlw d'2' 394 movlw d'2' ; coding for normal speed
395 cpfseq speed_setting ; set to normal in case it's not already in normal speed mode 395 cpfseq cpu_speed_state ; CPU running on normal speed?
396 rcall isr_set_speed_to_normal 396 rcall isr_set_speed_to_normal ; NO - set CPU speed to normal
397 397
398 incf sensor_state_counter,F ; counts to eight for state machine 398 incf sensor_state_counter,F ; counts to eight for state machine
399 399
400 ; State 1: Clear flags and average registers, get temperature (51 us) and start pressure integration (73.5 us) 400 ; State 1: Clear flags and average registers, get temperature (51 us) and start pressure integration (73.5 us)
401 ; State 2: Get pressure (51 us), start temperature integration (73.5 us) and calculate temperature compensated pressure (233 us) 401 ; State 2: Get pressure (51 us), start temperature integration (73.5 us) and calculate temperature compensated pressure (233 us)
665 addwfc PRODH,F 665 addwfc PRODH,F
666 movff PRODL,isr1_temp 666 movff PRODL,isr1_temp
667 movff PRODH,isr2_temp ; isr1_temp and isr2_temp hold value for backlight 667 movff PRODH,isr2_temp ; isr1_temp and isr2_temp hold value for backlight
668 668
669 ; Add current for CPU and GPU 669 ; Add current for CPU and GPU
670 ; speed_setting=1: ECO (3.1mA -> 861nAs), =2: NORMAL (5.50mA -> 1528nAs) or =3: FASTEST (8.04mA -> 2233nAs) 670 ; cpu_speed_state=1: ECO (3.1mA -> 861nAs), =2: NORMAL (5.50mA -> 1528nAs) or =3: FASTEST (8.04mA -> 2233nAs)
671 banksel isr_backup ; Bank0 ISR data 671 banksel isr_backup ; Bank0 ISR data
672 movlw .1 672 movlw .1
673 cpfseq speed_setting 673 cpfseq cpu_speed_state
674 bra isr_battery_gauge3 674 bra isr_battery_gauge3
675 movlw LOW current_speed_eco 675 movlw LOW current_speed_eco
676 addwf isr1_temp,F 676 addwf isr1_temp,F
677 movlw HIGH current_speed_eco 677 movlw HIGH current_speed_eco
678 addwfc isr2_temp,F 678 addwfc isr2_temp,F
679 bra isr_battery_gauge5 679 bra isr_battery_gauge5
680 isr_battery_gauge3: 680 isr_battery_gauge3:
681 movlw .2 681 movlw .2
682 cpfseq speed_setting 682 cpfseq cpu_speed_state
683 bra isr_battery_gauge4 683 bra isr_battery_gauge4
684 movlw LOW current_speed_normal 684 movlw LOW current_speed_normal
685 addwf isr1_temp,F 685 addwf isr1_temp,F
686 movlw HIGH current_speed_normal 686 movlw HIGH current_speed_normal
687 addwfc isr2_temp,F 687 addwfc isr2_temp,F
860 return ; done 860 return ; done
861 861
862 ;============================================================================= 862 ;=============================================================================
863 863
864 isr_restore_clock: 864 isr_restore_clock:
865 movff cpu_speed_request,cpu_speed_state ; acknowledge CPU speed request
865 banksel isr_backup 866 banksel isr_backup
866 movlw d'1' 867 movlw d'1'
867 cpfseq speed_setting 868 cpfseq cpu_speed_request
868 bra isr_restore_speed2 869 bra isr_restore_speed2
869 ; Reset to eco 870 ; Reset to eco
870 movlw b'00000000' 871 movlw b'00000000'
871 movwf OSCTUNE ; 4x PLL Ddsable (Bit 6) - only works with 8 or 16MHz (=32 or 64MHz) 872 movwf OSCTUNE ; 4x PLL Ddsable (Bit 6) - only works with 8 or 16MHz (=32 or 64MHz)
872 movlw b'00110010' 873 movlw b'00110010'
874 movlw T2CON_ECO 875 movlw T2CON_ECO
875 movwf T2CON 876 movwf T2CON
876 bra isr_restore_exit 877 bra isr_restore_exit
877 isr_restore_speed2: 878 isr_restore_speed2:
878 movlw d'2' 879 movlw d'2'
879 cpfseq speed_setting 880 cpfseq cpu_speed_request
880 bra isr_restore_speed3 881 bra isr_restore_speed3
881 ; Reset to normal 882 ; Reset to normal
882 movlw b'01110010' 883 movlw b'01110010'
883 movwf OSCCON ; 16 MHz INTOSC 884 movwf OSCCON ; 16 MHz INTOSC
884 movlw b'00000000' 885 movlw b'00000000'
885 movwf OSCTUNE ; 4x PLL disable (Bit 6) - only works with 8 or 16MHz (=32 or 64MHz) 886 movwf OSCTUNE ; 4x PLL disable (Bit 6) - only works with 8 or 16MHz (=32 or 64MHz)
886 movlw T2CON_NORMAL 887 movlw T2CON_NORMAL
887 movwf T2CON 888 movwf T2CON
888 bra isr_restore_exit 889 bra isr_restore_exit
889
890 isr_restore_speed3: 890 isr_restore_speed3:
891 ; Reset to fastest 891 ; Reset to fastest
892 movlw b'01110010' ; 16 MHz INTOSC 892 movlw b'01110010' ; 16 MHz INTOSC
893 movwf OSCCON 893 movwf OSCCON
894 movlw b'01000000' 894 movlw b'01000000'
895 movwf OSCTUNE ; 4x PLL enable (Bit 6) - only works with 8 or 16MHz (=32 or 64MHz) 895 movwf OSCTUNE ; 4x PLL enable (Bit 6) - only works with 8 or 16MHz (=32 or 64MHz)
896 movlw T2CON_FASTEST 896 movlw T2CON_FASTEST
897 movwf T2CON 897 movwf T2CON
898 ;bra isr_restore_exit 898 ;bra isr_restore_exit
899
900 isr_restore_exit: 899 isr_restore_exit:
901 btfss OSCCON,HFIOFS 900 btfss OSCCON,HFIOFS
902 bra isr_restore_exit ; loop until PLL is stable 901 bra isr_restore_exit ; loop until PLL is stable
903 return 902 return
904 903