; ; irq_lopri.inc: low priority interrupt handling ; ; led / key handling. ; ; author: Marko Kanala, raato ]a t[ mulletronic.com ; ; LICENSE ; Creative Commons Attribution-NonCommercial-ShareALike 2.5 ; ; You are free: ; ; * to copy, distribute, display, and perform the work ; * to make derivative works ; ; Under the following conditions: ; ; 1. Attribution. You must attribute the work in the manner specified by the ; author or licensor. ; 2. Noncommercial. You may not use this work for commercial purposes. ; 3. Share Alike. If you alter, transform, or build upon this work, you may ; distribute the resulting work only under a license identical to this one. ; ; * For any reuse or distribution, you must make clear to others the license ; terms of this work. ; * Any of these conditions can be waived if you get permission from the ; copyright holder. ; ; Your fair use and other rights are in no way affected by the above. ; ; This is a human-readable summary of the Legal Code. ; See full license at http://creativecommons.org/licenses/by-nc-sa/2.5/legalcode ; ; Copyright: Marko Kanala (raato@mulletronic.com). ; lp_irq: movwf lp_irq_wtmp movff STATUS, lp_irq_statustmp movff BSR, lp_irq_bsrtmp ; which interrupt occurred ? lp_check_irq: ; timer 0 ? btfsc INTCON, TMR0IF bra lp_irq_timer0 ; timer 2 ? btfsc PIR1, TMR2IF bra lp_irq_keysleds ; a/d converter ready ? btfsc PIR1, ADIF bra lp_irq_adc ; TODO: check din run/stop while at it to prevent ; the sequencer from stucking if din sync ; is lost ? (press stop key?) ; TODO: what to do if midi stop is missed and ; midi clock is lost ? (press stop key?) ; decrement lcdwait if needed decfsz lcdwaitcounter bra lp_irq_nolcdwait tstfsz lcdwait decf lcdwait lp_irq_nolcdwait: movff lp_irq_bsrtmp, BSR movf lp_irq_wtmp, W movff lp_irq_statustmp, STATUS retfie lp_irq_keysleds: ; light up leds and read keys call do_keysleds ; see keysleds.inc ; restart tempo pot a/d if necessary call ad_timer2 ; see adc.inc decfsz blink_counter ; toggle blink bit bra lp_blink_ok ; if necessary decfsz blink_counter2 bra lp_blink_ok movlw blink_speed movwf blink_counter movlw blink_speed2 movwf blink_counter2 btg blink, 0 lp_blink_ok: IFRUNNING lp_setstartled bcf LEDREG_START, LED_START lp_startleddone: bcf PIR1, TMR2IF bra lp_check_irq ; sets the start led lp_setstartled: IFMODE MODE_PWRITE, lp_blink_start ; light up start led if in play mode bsf LEDREG_START, LED_START bra lp_startleddone lp_blink_start: ; blink start if in write mode btfss blink_tempo, 0 bra lp_blink_ns bsf LEDREG_START, LED_START bra lp_startleddone lp_blink_ns: bcf LEDREG_START, LED_START bra lp_startleddone lp_irq_adc: ; a/d done call ad_irq ; see adc.inc bcf PIR1, ADIF bra lp_check_irq ; din clock off lp_irq_timer0: call din_clock_off bcf INTCON, TMR0IF bra lp_check_irq
do_keysleds ad_timer2 ad_irq din_clock_off