?login_element?

Subversion Repositories NedoOS

Rev

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

  1.     module Uart
  2. ;AT+UART_CUR=115200,8,1,0,3
  3. ;AT+CWMODE_DEF=1
  4. ;AT+CWJAP_DEF="Kulich","password"
  5. ;
  6.  
  7. ; Internal port constants
  8. RBR_THR equ 0xF8EF
  9. IER             equ     0xF9EF
  10. IIR_FCR equ     0xFAEF
  11. LCR             equ     0xFBEF
  12. MCR             equ     0xFCEF
  13. LSR             equ     0xFDEF
  14. MSR             equ     0xFEEF
  15. SR              equ     0xFFEF
  16.  
  17. init:
  18.         push bc
  19.  
  20.         ld bc,MCR       // Assert RTS. In Evo only  bit #1 is used. For RTS control
  21.     ld a, 0x0d
  22.         out (c),a
  23.  
  24.         ld bc,IIR_FCR   // Enable fifo 8 level, and clear it
  25.     ld a, 0x87
  26.         out (c),a
  27.  
  28.         ld bc,LCR       // 8n1, DLAB=1
  29.     ld a, 0x83
  30.         out (c),a
  31.  
  32.         ld bc,RBR_THR   // 115200 (divider 1-115200, 3 - 38400)
  33.     ld a, 0x01
  34.         out (c),a
  35.  
  36.         ld bc,IER       // (divider 0). Divider is 16 bit, so we get (0x0002 divider)
  37.     ld a, 0x00
  38.         out (c),a
  39.  
  40.         ld bc,LCR       // 8n1, DLAB=0
  41.     ld a, 0x03
  42.         out (c),a
  43.  
  44.         ld bc,IER       // Disable int
  45.     ld a, 0x00
  46.         out (c),a
  47.  
  48.         ld bc,MCR       // Enable AFE. Not implemented in EVO
  49.     ld a, 0x2f
  50.         out (c),a
  51.         pop bc
  52.     ret
  53.    
  54. ; Flag C <- Data available
  55. isAvailable:
  56.         ld bc, LSR
  57.         in a, (c)
  58.     rrca
  59.     ret
  60.  
  61. ; Blocking read
  62. ; A <- Byte
  63. read:
  64.         ld bc, LSR          // Test FIFO for data
  65.         in a, (c)
  66.     rrca
  67.     jp nc,flashRTS    // No data in FIFO let's set RTS for awile
  68.    ld bc, RBR_THR      // Recieve data from FIFO
  69.         in a, (c)
  70.         ret
  71.  
  72. flashRTS:
  73.         di
  74.         ld bc,MCR           // Open the gate
  75.    ld a, 2
  76.         out (c),a
  77.    ld bc, LSR          // Test FIFO for data
  78. flashRTS2:
  79.         in a, (c)
  80.    rrca
  81.    jp nc,flashRTS2      // No data? Once more.
  82.    ld bc,MCR           // Close the gate
  83.    xor a
  84.         out (c),a
  85.    ei
  86.    ld bc, RBR_THR      // Recieve data from FIFO
  87.         in a, (c)
  88.         ret
  89.  
  90. ; A -> byte to send
  91. write:
  92.         push af
  93. .wait
  94.    ld bc, LSR      //FIFO is free?
  95.         in a, (c)
  96.    and 0x20
  97.    jr z, .wait     //No. Wait more.
  98.    pop af
  99.         ld bc,RBR_THR   //Write data to FIFO
  100.         out (c),a      
  101.    ret
  102.  
  103.    endmodule