Login

Subversion Repositories NedoOS

Rev

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