?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.         MODULE uart_init
  2.         PUBLIC uart_init
  3.         #include "sysdefs.asm"
  4.         RSEG CODE
  5. uart_init:      ;e=divisor
  6.                 di
  7.                 push bc
  8.                 ld      bc,0x55FE               ;адрес 8952
  9.                 in      a,(c)                   ;Переход в режим команды
  10.                 ld      b,0xC3                  ;команда - установить скорость порта
  11.                 in      a,(c)                   ;выполнить команду
  12.                 ld      b,e                             ;параметр - установить скорость порта 19200(6) 38400(3) 115200(1) 57600(2) 9600(12) 14400(8)
  13.                 in      a,(c)                   ;становить параметр
  14.                 pop bc
  15.                 ei
  16.                 ret
  17.         ENDMOD
  18.        
  19.         MODULE uart_write
  20.         PUBLIC uart_write
  21.         #include "sysdefs.asm"
  22.         RSEG CODE
  23. uart_write:     ;e=byte to send
  24.                 di
  25.                 push bc
  26. readytx:
  27.                 ld      bc,0x55FE               ;адрес 8952
  28.                 in      a,(c)                   ;Переход в режим команды
  29.                 ld      b,0x42                  ;команда - прочесть статус
  30.                 in      a,(c)
  31.                 bit     6,a                             ;Параметры - TX
  32.                 jp z,readytx            ; вернуться если байта нет
  33.                 ld      bc,0x55FE               ;адрес 8952
  34.                 in      a,(c)                   ;Переход в режим команды
  35.                 ld      b,0x03                  ;запись
  36.                 in      a,(c)
  37.                 ld      b,e                             ;БАЙТ для пересылки
  38.                 in      a,(c)                   ; ->
  39.                 pop bc
  40.                 ei             
  41.                 ret
  42.         ENDMOD 
  43.  
  44.  
  45.  
  46.  
  47.         MODULE uart_flashrts
  48.         PUBLIC uart_flashrts
  49.         #include "sysdefs.asm"
  50.         RSEG CODE
  51. uart_flashrts:
  52.                 push bc
  53.                 ld      bc,0x55FE               ;адрес 8952
  54.                 in      a,(c)                   ;Переход в режим команды
  55.                 ld      b,0x43                  ;команда - установить статус
  56.                 IN      a,(c)
  57.                 ld      b,0x03                  ;Параметры - убрать RTS (START)
  58.                 in      a, (c)
  59.                 pop bc
  60.                 push bc
  61.                 ld      bc,0x55FE               ;адрес 8952
  62.                 in      a,(c)                   ;Переход в режим команды
  63.                 ld      b,0x43                  ;команда - установить статус
  64.                 in      a,(c)
  65.                 ld      b,0x00                  ;Параметры - установить RTS (STOP)
  66.                 in      a,(c)
  67.                 pop bc
  68.                 ret
  69.         ENDMOD
  70.  
  71.  
  72.  
  73.  
  74.  
  75.         MODULE uart_startrts
  76.         PUBLIC uart_startrts
  77.         #include "sysdefs.asm"
  78.         RSEG CODE
  79. uart_startrts:
  80.                 push bc
  81.                 ld      bc,0x55FE               ;адрес 8952
  82.                 in      a,(c)                   ;Переход в режим команды
  83.                 ld      b,0x43                  ;команда - установить статус
  84.                 IN      a,(c)
  85.                 ld      b,0x03                  ;Параметры - убрать RTS (START)
  86.                 in      a, (c)
  87.                 pop bc
  88.                 ret
  89.         ENDMOD
  90.  
  91.         MODULE uart_stoprts
  92.         PUBLIC uart_stoprts
  93.         #include "sysdefs.asm"
  94.         RSEG CODE
  95. uart_stoprts:
  96.                 push bc
  97.                 ld      bc,0x55FE               ;адрес 8952
  98.                 in      a,(c)                   ;Переход в режим команды
  99.                 ld      b,0x43                  ;команда - установить статус
  100.                 in      a,(c)
  101.                 ld      b,0x00                  ;Параметры - установить RTS (STOP)
  102.                 in      a,(c)
  103.                 pop bc
  104.                 ret
  105.         ENDMOD
  106.  
  107.         MODULE uart_read
  108.         PUBLIC uart_read
  109.         #include "sysdefs.asm"
  110.         RSEG CODE
  111. uart_read:                                      ;out e = byte
  112.                 di
  113.                 push bc
  114. read2:
  115.                 ld      bc,0x55FE               ;адрес 8952
  116.                 in      a,(c)                   ;Переход в режим команды
  117.                 ld      b,0xC2                  ;команда - чтение счетчика буфера приема
  118.                 in      a,(c)                   ;Получили число байт в буфере
  119.                 or a
  120.                 jp nz,togetb            ; В буфере есть байт
  121.                 jp read2                        ; А теперь есть?
  122.  
  123. togetb:        
  124.                 ld      bc,0x55FE               ;адрес 8952
  125.                 in      a,(c)                   ;Переход в режим команды
  126.                 ld      b,0x02                  ;команда - чтение
  127.                 in      a,(c)                   ;Получаем байт в А
  128.                 ld e,a
  129.                 pop bc
  130.                 ei
  131.                 ret    
  132.         ENDMOD
  133.  
  134.         MODULE uart_queue
  135.         PUBLIC uart_queue
  136.         #include "sysdefs.asm"
  137.         RSEG CODE
  138. uart_queue:                                     ;out e = queue
  139.                 push bc
  140.                 ld      bc,0x55FE               ;адрес 8952
  141.                 in      a,(c)                   ;Переход в режим команды
  142.                 ld      b,0xC2                  ;команда - чтение счетчика буфера приема
  143.                 in      a,(c)                   ;Получили число байт в буфере
  144.                 ld e,a
  145.                 pop bc
  146.                 ret
  147.         ENDMOD
  148.        
  149.         MODULE uart_delay10k
  150.         PUBLIC uart_delay10k
  151.         #include "sysdefs.asm"
  152.         RSEG CODE
  153. uart_delay10k:
  154.                 di
  155.                 push de
  156.                 ld e, 0xFA
  157. loop2:         
  158.                 NOP
  159.                 NOP
  160.                 NOP
  161.                 NOP
  162.                 NOP
  163.                 NOP
  164.                 NOP
  165.                 NOP
  166.                 NOP
  167.                 NOP
  168.                 NOP
  169.                 NOP
  170.                 NOP
  171.                 NOP
  172.                 NOP
  173.                 NOP
  174.                 NOP
  175.                 NOP
  176.                 NOP
  177.                 NOP
  178.                 NOP
  179.                 NOP
  180.                 NOP
  181.                 NOP
  182.                 NOP
  183.                 NOP
  184.                 NOP
  185.                 NOP
  186.                 NOP
  187.                 NOP
  188.                 NOP
  189.                 NOP
  190.                 NOP
  191.                 NOP
  192.                 NOP
  193.                 NOP
  194.                 NOP
  195.                 NOP
  196.                 NOP
  197.                 NOP            
  198.                 dec e
  199.                 jr nz,loop2
  200.                 pop de
  201.                 ei
  202.                 ret
  203.  
  204.         ENDMOD
  205.        
  206.         END
  207.