Subversion Repositories pentevo

Rev

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

  1. .MACRO  RTS_SET
  2.         SBI     PORTD,5
  3. .ENDMACRO
  4.  
  5. .MACRO  RTS_CLR
  6.         CBI     PORTD,5
  7. .ENDMACRO
  8. ;
  9. ;--------------------------------------
  10. ;
  11. .DSEG
  12. UART_TX_HD:     .BYTE   1
  13. UART_TX_TL:     .BYTE   1
  14. UART_TX_LN:     .BYTE   1
  15. UART_RX_HD:     .BYTE   1
  16. UART_RX_TL:     .BYTE   1
  17. UART_RX_LN:     .BYTE   1
  18. ;        .ORG    $0300                   ;см. SERVICE.ASM
  19. ;.EQU    UART_TXBSIZE    =128            ;размер буфера д.б. равен СТЕПЕНЬ_ДВОЙКИ байт (...32,64,128,256)
  20. ;UART_TX_BUFF:   .BYTE   UART_TXBSIZE    ;адрес д.б. кратен UART_TXBSIZE
  21. ;.EQU    UART_RXBSIZE    =128            ;размер буфера д.б. равен СТЕПЕНЬ_ДВОЙКИ байт
  22. ;UART_RX_BUFF:   .BYTE   UART_RXBSIZE    ;адрес д.б. кратен UART_RXBSIZE
  23. .CSEG
  24. ;
  25. ;--------------------------------------
  26. ;
  27. UARTDIRECT_INIT:
  28.         RCALL   UART_SET_BAUDRATE
  29.         LDI     TEMP,(1<<TXEN)  ;Разрешаем передачу
  30.         OUTPORT UCSR1B,TEMP     ;
  31.         CBR     FLAGS1,0B00000010
  32.         SBR     FLAGS1,0B00000001
  33.         RET
  34. ;
  35. ;--------------------------------------
  36. ;
  37. UARTDIRECT_CRLF:
  38.         LDI     DATA,$0D
  39.         RCALL   UARTDIRECT_PUTCHAR
  40.         LDI     DATA,$0A
  41. ;
  42. ;--------------------------------------
  43. ;in:    DATA == передаваемый байт
  44. UARTDIRECT_PUTCHAR:
  45. UD_PCHR:INPORT  R0,UCSR1A
  46.         SBRS    R0,UDRE
  47.         RJMP    UD_PCHR
  48.         OUTPORT UDR1,DATA
  49.         RET
  50. ;
  51. ;--------------------------------------
  52. ;
  53. UART_SET_BAUDRATE:
  54.         OUTPORT UBRR1H,NULL
  55.         LDI     TEMP,5 ;115200 baud (CPU @ 11.0592 MHz), Normal speed
  56.         OUTPORT UBRR1L,TEMP
  57.         OUTPORT UCSR1A,NULL ;Normal Speed
  58.         LDI     TEMP,(1<<UCSZ1)|(1<<UCSZ0)|(1<<USBS) ;data8bit, 2stopbits
  59.         OUTPORT UCSR1C,TEMP
  60.         RET
  61. ;
  62. ;--------------------------------------
  63. ;
  64. UART_INIT:
  65.         RCALL   UART_SET_BAUDRATE
  66.         LDI     TEMP,(1<<RXCIE)|(1<<RXEN)|(1<<TXEN)
  67.         OUTPORT UCSR1B,TEMP
  68.         CBR     FLAGS1,0B00000001
  69.         SBR     FLAGS1,0B00000010
  70.  
  71.         LDI     TEMP,LOW(UART_TX_BUFF)
  72.         STS     UART_TX_HD,TEMP
  73.         STS     UART_TX_TL,TEMP
  74.         STS     UART_TX_LN,NULL
  75.         LDI     TEMP,LOW(UART_RX_BUFF)
  76.         STS     UART_RX_HD,TEMP
  77.         STS     UART_RX_TL,TEMP
  78.         STS     UART_RX_LN,NULL
  79.  
  80.         RTS_CLR
  81.         SBI     DDRD,5
  82.         CBI     DDRB,6
  83.  
  84.         RET
  85. ;
  86. ;--------------------------------------
  87. ;USART1 RX Interrupt handler
  88. USART1_RXC:
  89.         PUSH    TEMP
  90.         IN      TEMP,SREG
  91.         PUSH    TEMP
  92.         PUSH    DATA
  93.  
  94.         INPORT  DATA,UDR1
  95.         LDS     TEMP,UART_RX_LN
  96.         CPI     TEMP,UART_RXBSIZE ;буфер полный?
  97.         BRCC    U1RX9
  98.         PUSHX
  99.         LDI     XH,HIGH(UART_RX_BUFF)
  100.         LDS     XL,UART_RX_HD
  101.         ST      X+,DATA
  102.         ANDI    XL,UART_RXBSIZE-1
  103.         ORI     XL,LOW(UART_RX_BUFF)
  104.         STS     UART_RX_HD,XL
  105.         POPX
  106.         INC     TEMP
  107.         STS     UART_RX_LN,TEMP
  108.         CPI     TEMP,UART_RXBSIZE-16
  109.         BRCS    U1RX9
  110.         RTS_SET
  111. U1RX9:
  112.         POP     DATA
  113.         POP     TEMP
  114.         OUT     SREG,TEMP
  115.         POP     TEMP
  116.         RETI
  117. ;
  118. ;--------------------------------------
  119. ;USART1 UDR Empty Interrupt handler
  120. USART1_DRE:
  121.         PUSH    TEMP
  122.         IN      TEMP,SREG
  123.         PUSH    TEMP
  124.  
  125.         LDS     TEMP,UART_TX_LN
  126.         TST     TEMP ;есть что в буфере?
  127.         BREQ    U1TX1
  128.  
  129.         PUSHX
  130.         PUSH    DATA
  131.         LDI     XH,HIGH(UART_TX_BUFF)
  132.         LDS     XL,UART_TX_TL
  133.         LD      DATA,X+
  134.         OUTPORT UDR1,DATA
  135.         ANDI    XL,UART_TXBSIZE-1
  136.         ORI     XL,LOW(UART_TX_BUFF)
  137.         STS     UART_TX_TL,XL
  138.         DEC     TEMP
  139.         STS     UART_TX_LN,TEMP
  140.         POP     DATA
  141.         POPX
  142.         RJMP    U1TX9
  143. U1TX1:
  144.         INPORT  TEMP,UCSR1B
  145.         CBR     TEMP,(1<<UDRIE) ;Запрещаем прерывания Empty Data Register
  146.         OUTPORT UCSR1B,TEMP
  147. U1TX9:  POP     TEMP
  148.         OUT     SREG,TEMP
  149.         POP     TEMP
  150.         RETI
  151. ;
  152. ;--------------------------------------
  153. ;Put byte to UART buffer
  154. ;in:    DATA
  155. UART_PUTCHAR:
  156.         PUSH    TEMP
  157.         PUSHX
  158. U_PCHR1:LDS     TEMP,UART_TX_LN
  159.         CPI     TEMP,UART_TXBSIZE ;буфер полный?
  160.         BRCC    U_PCHR1
  161.         LDI     XH,HIGH(UART_TX_BUFF)
  162.         LDS     XL,UART_TX_HD
  163.         ST      X+,DATA
  164.         CLI
  165.         LDS     TEMP,UART_TX_LN
  166.         INC     TEMP
  167.         STS     UART_TX_LN,TEMP
  168.         SEI
  169.         ANDI    XL,UART_TXBSIZE-1
  170.         ORI     XL,LOW(UART_TX_BUFF)
  171.         STS     UART_TX_HD,XL
  172.  
  173.         INPORT  TEMP,UCSR1B
  174.         SBRC    TEMP,UDRIE      ;Проверяем запрет прерывания Empty Data Register
  175.         RJMP    U_PCHR9
  176.         SBR     TEMP,(1<<UDRIE) ;Разрешаем прерывания Empty Data Register
  177.         OUTPORT UCSR1B,TEMP
  178. U_PCHR9:
  179.         POPX
  180.         POP     TEMP
  181.         RET
  182. ;
  183. ;--------------------------------------
  184. ;Get byte from UART buffer
  185. ;out:   sreg.Z == SET - нет данных
  186. ;       DATA == данные
  187. UART_GETCHAR:
  188.         PUSH    TEMP
  189.         LDS     TEMP,UART_RX_LN
  190.         TST     TEMP
  191.         BREQ    U_GCHR9
  192.         PUSHX
  193.         LDI     XH,HIGH(UART_RX_BUFF)
  194.         LDS     XL,UART_RX_TL
  195.         LD      DATA,X+
  196.         CLI
  197.         LDS     TEMP,UART_RX_LN
  198.         DEC     TEMP
  199.         STS     UART_RX_LN,TEMP
  200.         SEI
  201.         CPI     TEMP,UART_RXBSIZE-17
  202.         BRCC    U_GCHR1
  203.         RTS_CLR
  204. U_GCHR1:ANDI    XL,UART_RXBSIZE-1
  205.         ORI     XL,LOW(UART_RX_BUFF)
  206.         STS     UART_RX_TL,XL
  207.         CLZ
  208.         POPX
  209. U_GCHR9:POP     TEMP
  210.         RET
  211. ;
  212. ;--------------------------------------
  213. ;
  214. UART_CRLF:
  215.         LDI     DATA,$0D
  216.         RCALL   UART_PUTCHAR
  217.         LDI     DATA,$0A
  218.         RJMP    UART_PUTCHAR
  219. ;
  220. ;--------------------------------------
  221. ;
  222. UART_DUMP512:
  223.         PUSH    FLAGS1
  224.         CBR     FLAGS1,0B00001101
  225.         SBR     FLAGS1,0B00000010
  226.         PUSHZ
  227.         LDIZ    MSG_DUMPHEAD*2
  228.         RCALL   PRINTSTRZ
  229.         POPZ
  230.         LDIX    0
  231. UDUMP3: RCALL   UART_CRLF
  232.         MOV     DATA,XH
  233.         RCALL   HEXBYTE
  234.         MOV     DATA,XL
  235.         RCALL   HEXBYTE
  236.         LDI     DATA,$20
  237.         RCALL   UART_PUTCHAR
  238.         RCALL   UART_PUTCHAR
  239.         PUSHZ
  240.         LDI     WL,16
  241. UDUMP1: LD      DATA,Z+
  242.         RCALL   HEXBYTE_FOR_DUMP
  243.         DEC     WL
  244.         BRNE    UDUMP1
  245.         LDI     DATA,$20
  246.         RCALL   UART_PUTCHAR
  247.         POPZ
  248.         LDI     WL,16
  249. UDUMP2: LD      DATA,Z+
  250.         RCALL   PUTCHAR_FOR_DUMP
  251.         DEC     WL
  252.         BRNE    UDUMP2
  253.         ADIW    XL,16
  254.         CPI     XH,$02
  255.         BRNE    UDUMP3
  256.         POP     FLAGS1
  257.         RET
  258. MSG_DUMPHEAD:
  259.         .DB     $0D,$0A,$3B,"     .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F",0
  260. ;
  261. ;--------------------------------------
  262. ;
  263.