timer_my.asm
| 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 |
|