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

.text

start:
	jmp timer
complete

;;;;; Processing timer ;;;;; MC assembler version 0.5.4:76
timer:
	jmp initTimer
	setl #IHOOKADDR,P1
	setl #flag, 0
	setl #flag2, 2 ;value for time interval 
complete
;Interrupt handler 
P1: 
	getl #flag2
	subl @1, 1
	setl #flag2, @1
        getl 0x0000001F ; ? почему не работает здесь однократный режим работы? 
        ; перезагрузка таймера
        wrl @1, TIM0_CR 
	getl #flag
	je @1, Ledoff
	jne @2, Ledon
complete 

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

complete

StartTimer0:
        jmp MainLoop

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

;;use periodic mode
MainLoop:
	jmp MainLoop
complete
;;Led off
Ledoff:
	getl #flag2
	je @1, disable
	jne @2, #IRETADDR
	setl #PSW, 1
complete

; disable led 2,3
disable:
	jmp #IRETADDR
	getl 0x60000000
	wrl @1, GPIOB_DIR
	getl 0x00000000
	wrl @1, GPIOB_OUT
	setl #flag2, 4
	setl #flag, 1
complete

;;Led on
Ledon:
	getl #flag2
	je @1, enable
	jne @2, #IRETADDR
	setl #PSW, 1
complete

; enable led 2,3
enable:
	jmp #IRETADDR
	getl 0x60000000
	wrl @1, GPIOB_DIR
	getl 0x60000000
	wrl @1, GPIOB_OUT ;set PortB 29,30 pin
	setl #flag2, 4
	setl #flag, 0
complete









