Project

General

Profile

timer_my.asm

программа обработки таймера GPTIM0 - trott, 10/30/2013 01:12 AM

 
1
; Define name of registers
2
.alias flag 2
3
.alias flag2 3
4
.include "HDL50001_pcf.inc"
5

    
6
.text
7

    
8
start:
9
	jmp timer
10
complete
11

    
12
;;;;; Processing timer ;;;;; MC assembler version 0.5.4:76
13
timer:
14
	jmp initTimer
15
	setl #IHOOKADDR,P1
16
	setl #flag, 0
17
	setl #flag2, 2 ;value for time interval 
18
complete
19
;Interrupt handler 
20
P1: 
21
	getl #flag2
22
	subl @1, 1
23
	setl #flag2, @1
24
        getl 0x0000001F ; ? почему не работает здесь однократный режим работы? 
25
        ; перезагрузка таймера
26
        wrl @1, TIM0_CR 
27
	getl #flag
28
	je @1, Ledoff
29
	jne @2, Ledon
30
complete 
31

    
32
;; Set counter period and allow interrupt from timer
33
initTimer:
34
	jmp StartTimer0
35
	setl #PSW, 1    ; глобальное разрешение прерываний 
36
        getl 0x0000FFFF
37
        wrl @1, TIM0_CNT       ; настраиваем счетчик таймера
38
        getl 0x0000007A
39
        wrl @1, TIM0_PSC  ;(10Hz) ; настраиваем предделитель
40

    
41
complete
42

    
43
StartTimer0:
44
        jmp MainLoop
45

    
46
        getl 0x0002000 ; разрешаем прерывание GPTIM0
47
        setl #MSKR, @1 
48
        getl 0x0000001D
49
                    ;^ для того чтобы очистить пятый бит IP, нужно записать в него "1".
50
                      ;  перезагрузка таймера
51
        wrl @1, TIM0_CR 
52
complete
53

    
54
;;use periodic mode
55
MainLoop:
56
	jmp MainLoop
57
complete
58
;;Led off
59
Ledoff:
60
	getl #flag2
61
	je @1, disable
62
	jne @2, #IRETADDR
63
	setl #PSW, 1
64
complete
65

    
66
; disable led 2,3
67
disable:
68
	jmp #IRETADDR
69
	getl 0x60000000
70
	wrl @1, GPIOB_DIR
71
	getl 0x00000000
72
	wrl @1, GPIOB_OUT
73
	setl #flag2, 4
74
	setl #flag, 1
75
complete
76

    
77
;;Led on
78
Ledon:
79
	getl #flag2
80
	je @1, enable
81
	jne @2, #IRETADDR
82
	setl #PSW, 1
83
complete
84

    
85
; enable led 2,3
86
enable:
87
	jmp #IRETADDR
88
	getl 0x60000000
89
	wrl @1, GPIOB_DIR
90
	getl 0x60000000
91
	wrl @1, GPIOB_OUT ;set PortB 29,30 pin
92
	setl #flag2, 4
93
	setl #flag, 0
94
complete
95

    
96

    
97

    
98

    
99

    
100

    
101

    
102

    
103