?login_element?

Subversion Repositories NedoOS

Rev

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