Subversion Repositories NedoOS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1.     MODULE Uart
  2.                 macro getqueue
  3.                 ld      a, #55  ;подать комнаду контроллеру клавиатуры
  4.                 in      a, (#0FE)
  5.                 ld      a, #0C2 ;команда - чтение счетчика буфера приема
  6.                 in      a, (#0FE)
  7.                 endm
  8.  
  9.                 macro getbyte
  10. chk_rec:
  11.                 ld      a, #55  ;подать комнаду контроллеру клавиатуры
  12.                 in      a, (#0FE)
  13.                 ld      a, #042 ;команда - чтение счетчика буфера приема
  14.                 in      a, (#0FE)
  15.                 AND     01h             ;RDY_RX(0)
  16.                 JR      Z,chk_rec; не готов? А теперь?   
  17.                 ld      a, #55  ;подать комнаду контроллеру клавиатуры
  18.                 in      a, (#0FE)
  19.                 ld      a, #02  ;команда - чтение
  20.                 in      a, (#0FE)
  21.                 endm
  22. init:
  23. ;инициализируем порт
  24.                 di
  25.                 ld      a, #55          ;подать комнаду контроллеру клавиатуры
  26.                 in      a,(#0FE)
  27.                 ld      a,#0C3          ;команда - установить скорость порта
  28.                 in      a,(#0FE)
  29.                 ld      a,3     ;параметр - установить скорость порта 19200(6) 38400(3) 115200(1) 57600(2) 9600(12) 14400(8)
  30.                 in      a,(#0FE)
  31.                 ei
  32.                 ret
  33. read:
  34.                 di
  35. read2:
  36.                 getqueue                        ;Получили число байт в буфере
  37.                 or a
  38.                 jp nz,togetb
  39.                 call startrts2
  40.                 jp read2
  41. togetb:        
  42.                 getbyte                         ;Получаем байт в А
  43.                 ei
  44.                 ret    
  45.                
  46. ; Write single byte to UART
  47. ; A - byte to write
  48. ; BC will be wasted
  49. write:
  50.                 di
  51.                 push bc
  52.                 push de        
  53.  
  54.                 ld  c, a                ;В А получаем байт, сораняем его в C
  55. readytx:
  56.                 ld      a,#55           ;подать комнаду контроллеру клавиатуры
  57.                 in      a,(#0FE)
  58.                 ld      a,#42           ;команда - прочесть статус
  59.                 in      a,(#0FE)
  60.                 bit      6, a           ;Параметры - TX
  61.                 jp z,readytx                    ; вернуться если байта нет
  62.                 ld  a, c
  63.                 ei
  64.                 PUSH    AF
  65.                
  66.                 di
  67.                 LD      BC,#55FE        ;55FEh
  68.                 IN      A,(C)           ;Переход в режим команды
  69.                 LD      B,#03           ;запись
  70.                 IN      A,(C)
  71.                 POP     AF             
  72.                 LD      B,A                     ;БАЙТ для пересылки
  73.                 IN      A,(C)           ; ->
  74.                 pop de
  75.                 pop bc
  76.                 ei             
  77.                 ret
  78.  
  79.  
  80. stoprts
  81.                 ld      a,#55   ;подать комнаду контроллеру клавиатуры
  82.                 in      a,(#0FE)
  83.                 ld      a,#43   ;команда - установить статус
  84.                 in      a,(#0FE)
  85.                 ld      a,0     ;Параметры - установить RTS (STOP)
  86.                 in      a,(#0FE)
  87.                 ret
  88.  
  89. startrts
  90.                 ld      a,#55           ;подать комнаду контроллеру клавиатуры
  91.                 in      a,(#0FE)
  92.                 ld      a,#43           ;команда - установить статус
  93.                 in      a,(#0FE)
  94.                 ld      a, #03          ;Параметры - убрать RTS (START)
  95.                 in      a, (#0FE)
  96.                 ret
  97.  
  98.  
  99. startrts2
  100.                 ld      a,#55           ;подать комнаду контроллеру клавиатуры
  101.                 in      a,(#0FE)
  102.                 ld      a,#43           ;команда - установить статус
  103.                 in      a,(#0FE)
  104.                 ld      a, #03          ;Параметры - убрать RTS (START)
  105.                 in      a, (#0FE)
  106.                 EX (SP),HL
  107.                 EX (SP),HL
  108.                 ld      a,#55           ;подать комнаду контроллеру клавиатуры
  109.                 in      a,(#0FE)
  110.                 ld      a,#43           ;команда - установить статус
  111.                 in      a,(#0FE)
  112.                 ld      a,0                     ;Параметры - установить RTS (STOP)
  113.                 in      a,(#0FE)
  114.                 ret
  115.  
  116.  
  117.  
  118. delay
  119.                 push de
  120.                 ld e,0x01
  121. delay2
  122.                 EX (SP),HL
  123.                 EX (SP),HL
  124.                 dec e
  125.                 jr nz, delay2
  126.                 pop de
  127.                 ret
  128.  
  129.     ENDMODULE
  130.