?login_element?

Subversion Repositories NedoOS

Rev

Rev 1357 | Blame | Compare with Previous | Last modification | View Log | Download

  1.     module Uart
  2. ; This driver works with 16c550 uart that's support AFE
  3. ;AT+UART_CUR=38400,8,1,0,0
  4. ;AT+CWMODE_DEF=1
  5. ;AT+CWJAP_DEF="Kulich","password"
  6. ;
  7.  
  8. ; Internal port constants
  9. RBR_THR equ #F8
  10. IER             equ     #F9
  11. IIR_FCR equ     #FA
  12. LCR             equ     #FB
  13. MCR             equ     #FC
  14. LSR             equ     #FD
  15. MSR             equ     #FE
  16. SR              equ     #FF
  17.  
  18.     macro outp port, value
  19.         di
  20.         ld b, port
  21.         ld c, #EF
  22.     ld a, value
  23.         out (port), a
  24.         ei
  25.         endm
  26.  
  27.  
  28.  
  29. init:
  30.         push bc
  31.     outp MCR,     #0d   // Assert RTS
  32.     outp IIR_FCR, #87   // Enable fifo 8 level, and clear it
  33.     outp LCR,     #83   // 8n1, DLAB=1
  34.     outp RBR_THR, #01   // 115200 (divider 1-115200, 3 - 38400)
  35.     outp IER,     #00   // (divider 0). Divider is 16 bit, so we get (#0002 divider)
  36.     outp LCR,     #03   // 8n1, DLAB=0
  37.     outp IER,     #00   // Disable int
  38.     outp MCR,     #2f   // Enable AFE
  39.         pop bc
  40.     ret
  41.    
  42. ; Flag C <- Data available
  43. isAvailable:
  44.         ld bc, #FDEF
  45.         in a, (c)
  46.     rrca
  47.     ret
  48.  
  49. ; Blocking read
  50. ; A <- Byte
  51. read:
  52.         di
  53.     ld bc, #FDEF
  54.         in a, (c)
  55.     rrca
  56.     call nc,flashRTS
  57. readData:
  58.     ld bc, #F8EF
  59.         in a, (c)
  60.         ei     
  61.     ret
  62.  
  63. flashRTS:
  64.         ld bc,#FCEF
  65.     ld a, 2
  66.         out (c),a
  67.     call uart_delay4k
  68.     ld bc,#FCEF
  69.     ld a, 0
  70.         out (c),a
  71.  
  72.     ld bc, #FDEF
  73.         in a, (c)
  74.     rrca
  75.     jp nc,flashRTS
  76.     ret
  77.  
  78. ; A -> byte to send
  79.  
  80. write:
  81.         di
  82.     push af
  83. .wait
  84.     ld bc, #FDEF
  85.         in a, (c)
  86.     and #20
  87.     jr z, .wait
  88.     pop af
  89.  
  90.         ld bc,#F8EF
  91.         out (c),a      
  92.         ei
  93.     ret
  94. uart_delay4k:
  95.                 push de
  96.                 ld e, 0xFA
  97. loop2:         
  98.                 NOP
  99.         NOP
  100. ;               NOP
  101. ;               NOP
  102.  ;       NOP
  103.                 dec e
  104.                 jr nz,loop2
  105.                 pop de
  106.                 ret
  107.  
  108.     endmodule