Subversion Repositories pentevo

Rev

Rev 291 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  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            ;размер буфера д.б. равен СТЕПЕНЬ_ДВОЙКИ байт (32,64,128 или 256)
  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-20
  109.         BRCS    U1RX9
  110.         SBRC    FLAGS1,4
  111.         RTS_SET
  112. U1RX9:
  113.         POP     DATA
  114.         POP     TEMP
  115.         OUT     SREG,TEMP
  116.         POP     TEMP
  117.         RETI
  118. ;
  119. ;--------------------------------------
  120. ;USART1 UDR Empty Interrupt handler
  121. USART1_DRE:
  122.         PUSH    TEMP
  123.         IN      TEMP,SREG
  124.         PUSH    TEMP
  125.  
  126.         LDS     TEMP,UART_TX_LN
  127.         TST     TEMP ;есть что в буфере?
  128.         BREQ    U1TX1
  129.         SBRS    FLAGS1,4
  130.         RJMP    U1TX2
  131.         SBIC    PINB,6
  132.         RJMP    U1TX1
  133.  
  134. U1TX2:  PUSHX
  135.         PUSH    DATA
  136.         LDI     XH,HIGH(UART_TX_BUFF)
  137.         LDS     XL,UART_TX_TL
  138.         LD      DATA,X+
  139.         OUTPORT UDR1,DATA
  140.         ANDI    XL,UART_TXBSIZE-1
  141.         ORI     XL,LOW(UART_TX_BUFF)
  142.         STS     UART_TX_TL,XL
  143.         DEC     TEMP
  144.         STS     UART_TX_LN,TEMP
  145.         POP     DATA
  146.         POPX
  147.         RJMP    U1TX9
  148.  
  149. U1TX1:  INPORT  TEMP,UCSR1B
  150.         CBR     TEMP,(1<<UDRIE) ;Запрещаем прерывания Empty Data Register
  151.         OUTPORT UCSR1B,TEMP
  152.  
  153. U1TX9:  POP     TEMP
  154.         OUT     SREG,TEMP
  155.         POP     TEMP
  156.         RETI
  157. ;
  158. ;--------------------------------------
  159. ;Put byte to UART buffer
  160. ;in:    DATA
  161. UART_PUTCHAR:
  162.         PUSH    TEMP
  163.         PUSHX
  164.  
  165. U_PCHR1:SBRC    FLAGS1,4
  166.         RCALL   UART_CHK_CTS
  167.         LDS     TEMP,UART_TX_LN
  168.         CPI     TEMP,UART_TXBSIZE ;буфер полный?
  169.         BRCC    U_PCHR1
  170.  
  171.         LDI     XH,HIGH(UART_TX_BUFF)
  172.         LDS     XL,UART_TX_HD
  173.         ST      X+,DATA
  174.         CLI
  175.         LDS     TEMP,UART_TX_LN
  176.         INC     TEMP
  177.         STS     UART_TX_LN,TEMP
  178.         SEI
  179.         ANDI    XL,UART_TXBSIZE-1
  180.         ORI     XL,LOW(UART_TX_BUFF)
  181.         STS     UART_TX_HD,XL
  182.  
  183.         SBRS    FLAGS1,4
  184.         RJMP    U_PCHR8
  185.         SBIC    PINB,6
  186.         RJMP    U_PCHR9
  187. U_PCHR8:INPORT  TEMP,UCSR1B
  188.         SBR     TEMP,(1<<UDRIE) ;Разрешаем прерывания Empty Data Register
  189.         OUTPORT UCSR1B,TEMP
  190.  
  191. U_PCHR9:POPX
  192.         POP     TEMP
  193.         RET
  194. ;
  195. ;--------------------------------------
  196. ;Get byte from UART buffer
  197. ;out:   sreg.Z == SET - нет данных
  198. ;       DATA == данные
  199. UART_GETCHAR:
  200.         PUSH    TEMP
  201.         LDS     TEMP,UART_RX_LN
  202.         TST     TEMP
  203.         BREQ    U_GCHR9
  204.         PUSHX
  205.         LDI     XH,HIGH(UART_RX_BUFF)
  206.         LDS     XL,UART_RX_TL
  207.         LD      DATA,X+
  208.         CLI
  209.         LDS     TEMP,UART_RX_LN
  210.         DEC     TEMP
  211.         STS     UART_RX_LN,TEMP
  212.         SEI
  213.         CPI     TEMP,UART_RXBSIZE-21
  214.         BRCC    U_GCHR1
  215.         RTS_CLR
  216. U_GCHR1:ANDI    XL,UART_RXBSIZE-1
  217.         ORI     XL,LOW(UART_RX_BUFF)
  218.         STS     UART_RX_TL,XL
  219.         CLZ
  220.         POPX
  221. U_GCHR9:POP     TEMP
  222.         RET
  223. ;
  224. ;--------------------------------------
  225. ;
  226. UART_CRLF:
  227.         LDI     DATA,$0D
  228.         RCALL   UART_PUTCHAR
  229.         LDI     DATA,$0A
  230.         RJMP    UART_PUTCHAR
  231. ;
  232. ;--------------------------------------
  233. ;
  234. UART_DUMP512:
  235.         PUSH    FLAGS1
  236.         CBR     FLAGS1,0B00001101
  237.         SBR     FLAGS1,0B00000010
  238.         PUSHZ
  239.         LDIZ    MSG_DUMPHEAD*2
  240.         RCALL   PRINTSTRZ
  241.         POPZ
  242.         LDIX    0
  243. UDUMP3: RCALL   UART_CRLF
  244.         MOV     DATA,XH
  245.         RCALL   HEXBYTE
  246.         MOV     DATA,XL
  247.         RCALL   HEXBYTE
  248.         LDI     DATA,$20
  249.         RCALL   UART_PUTCHAR
  250.         RCALL   UART_PUTCHAR
  251.         PUSHZ
  252.         LDI     WL,16
  253. UDUMP1: LD      DATA,Z+
  254.         RCALL   HEXBYTE_FOR_DUMP
  255.         DEC     WL
  256.         BRNE    UDUMP1
  257.         LDI     DATA,$20
  258.         RCALL   UART_PUTCHAR
  259.         POPZ
  260.         LDI     WL,16
  261. UDUMP2: LD      DATA,Z+
  262.         RCALL   PUTCHAR_FOR_DUMP
  263.         DEC     WL
  264.         BRNE    UDUMP2
  265.         ADIW    XL,16
  266.         CPI     XH,$02
  267.         BRNE    UDUMP3
  268.         POP     FLAGS1
  269.         RET
  270. MSG_DUMPHEAD:
  271.         .DB     $0D,$0A,$3B,"     .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F",0
  272. ;
  273. ;--------------------------------------
  274. ;
  275. UART_CHK_CTS:
  276.         SBIC    PINB,6
  277.         RET
  278.         PUSH    TEMP
  279.         LDS     TEMP,UART_TX_LN
  280.         TST     TEMP
  281.         BREQ    UART_CHKCTS9
  282.         INPORT  TEMP,UCSR1B
  283.         SBR     TEMP,(1<<UDRIE) ;Разрешаем прерывания Empty Data Register
  284.         OUTPORT UCSR1B,TEMP
  285. UART_CHKCTS9:
  286.         POP     TEMP
  287.         RET
  288. ;
  289. ;--------------------------------------
  290. ;
  291.