Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
MODULE Uart
macro getqueue
ld a, #55 ;╨┐╨╛╨┤╨░╤В╤М ╨║╨╛╨╝╨╜╨░╨┤╤Г ╨║╨╛╨╜╤В╤А╨╛╨╗╨╗╨╡╤А╤Г ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л
in a, (#0FE)
ld a, #0C2 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤З╤В╨╡╨╜╨╕╨╡ ╤Б╤З╨╡╤В╤З╨╕╨║╨░ ╨▒╤Г╤Д╨╡╤А╨░ ╨┐╤А╨╕╨╡╨╝╨░
in a, (#0FE)
endm
macro getbyte
chk_rec:
ld a, #55 ;╨┐╨╛╨┤╨░╤В╤М ╨║╨╛╨╝╨╜╨░╨┤╤Г ╨║╨╛╨╜╤В╤А╨╛╨╗╨╗╨╡╤А╤Г ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л
in a, (#0FE)
ld a, #042 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤З╤В╨╡╨╜╨╕╨╡ ╤Б╤З╨╡╤В╤З╨╕╨║╨░ ╨▒╤Г╤Д╨╡╤А╨░ ╨┐╤А╨╕╨╡╨╝╨░
in a, (#0FE)
AND 01h ;RDY_RX(0)
JR Z,chk_rec; ╨╜╨╡ ╨│╨╛╤В╨╛╨▓? ╨Р ╤В╨╡╨┐╨╡╤А╤М?
ld a, #55 ;╨┐╨╛╨┤╨░╤В╤М ╨║╨╛╨╝╨╜╨░╨┤╤Г ╨║╨╛╨╜╤В╤А╨╛╨╗╨╗╨╡╤А╤Г ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л
in a, (#0FE)
ld a, #02 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤З╤В╨╡╨╜╨╕╨╡
in a, (#0FE)
endm
init:
;╨╕╨╜╨╕╤Ж╨╕╨░╨╗╨╕╨╖╨╕╤А╤Г╨╡╨╝ ╨┐╨╛╤А╤В
di
ld a, #55 ;╨┐╨╛╨┤╨░╤В╤М ╨║╨╛╨╝╨╜╨░╨┤╤Г ╨║╨╛╨╜╤В╤А╨╛╨╗╨╗╨╡╤А╤Г ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л
in a,(#0FE)
ld a,#0C3 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╨║╨╛╤А╨╛╤Б╤В╤М ╨┐╨╛╤А╤В╨░
in a,(#0FE)
ld a,3 ;╨┐╨░╤А╨░╨╝╨╡╤В╤А - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╨║╨╛╤А╨╛╤Б╤В╤М ╨┐╨╛╤А╤В╨░ 19200(6) 38400(3) 115200(1) 57600(2) 9600(12) 14400(8)
in a,(#0FE)
ei
ret
read:
di
read2:
getqueue ;╨Я╨╛╨╗╤Г╤З╨╕╨╗╨╕ ╤З╨╕╤Б╨╗╨╛ ╨▒╨░╨╣╤В ╨▓ ╨▒╤Г╤Д╨╡╤А╨╡
or a
jp nz,togetb
call startrts2
jp read2
togetb:
getbyte ;╨Я╨╛╨╗╤Г╤З╨░╨╡╨╝ ╨▒╨░╨╣╤В ╨▓ ╨Р
ei
ret
; Write single byte to UART
; A - byte to write
; BC will be wasted
write:
di
push bc
push de
ld c, a ;╨Т ╨Р ╨┐╨╛╨╗╤Г╤З╨░╨╡╨╝ ╨▒╨░╨╣╤В, ╤Б╨╛╤А╨░╨╜╤П╨╡╨╝ ╨╡╨│╨╛ ╨▓ C
readytx:
ld a,#55 ;╨┐╨╛╨┤╨░╤В╤М ╨║╨╛╨╝╨╜╨░╨┤╤Г ╨║╨╛╨╜╤В╤А╨╛╨╗╨╗╨╡╤А╤Г ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л
in a,(#0FE)
ld a,#42 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╨┐╤А╨╛╤З╨╡╤Б╤В╤М ╤Б╤В╨░╤В╤Г╤Б
in a,(#0FE)
bit 6, a ;╨Я╨░╤А╨░╨╝╨╡╤В╤А╤Л - TX
jp z,readytx ; ╨▓╨╡╤А╨╜╤Г╤В╤М╤Б╤П ╨╡╤Б╨╗╨╕ ╨▒╨░╨╣╤В╨░ ╨╜╨╡╤В
ld a, c
ei
PUSH AF
di
LD BC,#55FE ;55FEh
IN A,(C) ;╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨▓ ╤А╨╡╨╢╨╕╨╝ ╨║╨╛╨╝╨░╨╜╨┤╤Л
LD B,#03 ;╨╖╨░╨┐╨╕╤Б╤М
IN A,(C)
POP AF
LD B,A ;╨С╨Р╨Щ╨в ╨┤╨╗╤П ╨┐╨╡╤А╨╡╤Б╤Л╨╗╨║╨╕
IN A,(C) ; ->
pop de
pop bc
ei
ret
stoprts
ld a,#55 ;╨┐╨╛╨┤╨░╤В╤М ╨║╨╛╨╝╨╜╨░╨┤╤Г ╨║╨╛╨╜╤В╤А╨╛╨╗╨╗╨╡╤А╤Г ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л
in a,(#0FE)
ld a,#43 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╤В╨░╤В╤Г╤Б
in a,(#0FE)
ld a,0 ;╨Я╨░╤А╨░╨╝╨╡╤В╤А╤Л - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М RTS (STOP)
in a,(#0FE)
ret
startrts
ld a,#55 ;╨┐╨╛╨┤╨░╤В╤М ╨║╨╛╨╝╨╜╨░╨┤╤Г ╨║╨╛╨╜╤В╤А╨╛╨╗╨╗╨╡╤А╤Г ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л
in a,(#0FE)
ld a,#43 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╤В╨░╤В╤Г╤Б
in a,(#0FE)
ld a, #03 ;╨Я╨░╤А╨░╨╝╨╡╤В╤А╤Л - ╤Г╨▒╤А╨░╤В╤М RTS (START)
in a, (#0FE)
ret
startrts2
ld a,#55 ;╨┐╨╛╨┤╨░╤В╤М ╨║╨╛╨╝╨╜╨░╨┤╤Г ╨║╨╛╨╜╤В╤А╨╛╨╗╨╗╨╡╤А╤Г ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л
in a,(#0FE)
ld a,#43 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╤В╨░╤В╤Г╤Б
in a,(#0FE)
ld a, #03 ;╨Я╨░╤А╨░╨╝╨╡╤В╤А╤Л - ╤Г╨▒╤А╨░╤В╤М RTS (START)
in a, (#0FE)
EX (SP),HL
EX (SP),HL
ld a,#55 ;╨┐╨╛╨┤╨░╤В╤М ╨║╨╛╨╝╨╜╨░╨┤╤Г ╨║╨╛╨╜╤В╤А╨╛╨╗╨╗╨╡╤А╤Г ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Л
in a,(#0FE)
ld a,#43 ;╨║╨╛╨╝╨░╨╜╨┤╨░ - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╤Б╤В╨░╤В╤Г╤Б
in a,(#0FE)
ld a,0 ;╨Я╨░╤А╨░╨╝╨╡╤В╤А╤Л - ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М RTS (STOP)
in a,(#0FE)
ret
delay
push de
ld e,0x01
delay2
EX (SP),HL
EX (SP),HL
dec e
jr nz, delay2
pop de
ret
ENDMODULE