chiark / gitweb /
56ff9ae18d5400f4991925145021ac87c5f389bf
[trains.git] / detpic / tick.asm
1 ;======================================================================
2 ; TICK - REGULAR 10MS TIMER INTERRUPT
3 ;
4 ; after tick_init, and after interrupts enabled,
5 ; we call <foo>_tick every 1ms and <foo>_tickdiv every <tickdiv>ms.
6
7   include common.inc
8
9   udata_acs
10 tickdiv_count   res     1
11
12   code
13 ;----------------------------------------
14 tick_init @
15 ;  Timer 2              any                     used for tick
16         mov_lw  tick_master_t2scale ; disable (in case already running)
17         mov_wf  T2CON
18         mov_lw  tick_master_t2cycles
19         mov_wf  PR2
20         bc_f    PIR1, TMR2IF ; clear any previous interrupt
21         bc_f    IPR1, TMR2IP ; low priority
22         bs_f    IPR1, TMR2IE ; enable interrupts
23         bs_f    T2CON, TMR2ON ; enable timer
24         mov_lw  tickdiv
25         mov_wf  tickdiv_count
26         return
27
28 ;----------------------------------------
29 tick_intrl @
30         bt_f_if0 PIR1, TMR2IF
31         return
32         ; we have an interrupt
33
34         bc_f    PIR1, TMR2IF
35
36         ; add calls to <foo>_tick here:
37         call    power_fault_tick
38         call    power_polarising_tick
39         ; end of list of calls to <foo>_tick
40
41         dec_f_ifz tickdiv_count
42         bra     tickdiv_do
43
44         intrl_handled_nostack
45
46 ;----------------------------------------
47 tickdiv_do
48         ; add calls to <foo>_tickdiv here:
49         call    power_fault_tickdiv
50         call    cdu_tickdiv
51         ; end of list of calls to <foo>_tickdiv
52
53         mov_lw  tickdiv
54         mov_wf  tickdiv_count
55         intrl_handled_nostack
56
57 ;----------------------------------------------------------------------
58   include final.inc