Top secrets sources NedoPC pentevo

Rev

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

.MACRO  RTS_SET
        SBI     PORTD,5
.ENDMACRO

.MACRO  RTS_CLR
        CBI     PORTD,5
.ENDMACRO
;
;--------------------------------------
;
.DSEG
UART_TX_HD:     .BYTE   1
UART_TX_TL:     .BYTE   1
UART_TX_LN:     .BYTE   1
UART_RX_HD:     .BYTE   1
UART_RX_TL:     .BYTE   1
UART_RX_LN:     .BYTE   1
;        .ORG    $0300                   ;á¬. SERVICE.ASM
;.EQU    UART_TXBSIZE    =128            ;à §¬¥à ¡ãä¥à  ¤.¡. à ¢¥­ ‘’……œ_„‚Ž‰Šˆ ¡ ©â (32,64,128 ¨«¨ 256)
;UART_TX_BUFF:   .BYTE   UART_TXBSIZE    ; ¤à¥á ¤.¡. ªà â¥­ UART_TXBSIZE
;.EQU    UART_RXBSIZE    =128            ;à §¬¥à ¡ãä¥à  ¤.¡. à ¢¥­ ‘’……œ_„‚Ž‰Šˆ ¡ ©â (32,64,128 ¨«¨ 256)
;UART_RX_BUFF:   .BYTE   UART_RXBSIZE    ; ¤à¥á ¤.¡. ªà â¥­ UART_RXBSIZE
.CSEG
;
;--------------------------------------
;
UARTDIRECT_INIT:
        RCALL   UART_SET_BAUDRATE
        LDI     TEMP,(1<<TXEN)  ; §à¥è ¥¬ ¯¥à¥¤ çã
        OUTPORT UCSR1B,TEMP     ;
        CBR     FLAGS1,0B00000010
        SBR     FLAGS1,0B00000001
        RET
;
;--------------------------------------
;
UARTDIRECT_CRLF:
        LDI     DATA,$0D
        RCALL   UARTDIRECT_PUTCHAR
        LDI     DATA,$0A
;
;--------------------------------------
;in:    DATA == ¯¥à¥¤ ¢ ¥¬ë© ¡ ©â
UARTDIRECT_PUTCHAR:
UD_PCHR:INPORT  R0,UCSR1A
        SBRS    R0,UDRE
        RJMP    UD_PCHR
        OUTPORT UDR1,DATA
        RET
;
;--------------------------------------
;
UART_SET_BAUDRATE:
        OUTPORT UBRR1H,NULL
        LDI     TEMP,5 ;115200 baud (CPU @ 11.0592 MHz), Normal speed
        OUTPORT UBRR1L,TEMP
        OUTPORT UCSR1A,NULL ;Normal Speed
        LDI     TEMP,(1<<UCSZ1)|(1<<UCSZ0)|(1<<USBS) ;data8bit, 2stopbits
        OUTPORT UCSR1C,TEMP
        RET
;
;--------------------------------------
;
UART_INIT:
        RCALL   UART_SET_BAUDRATE
        LDI     TEMP,(1<<RXCIE)|(1<<RXEN)|(1<<TXEN)
        OUTPORT UCSR1B,TEMP
        CBR     FLAGS1,0B00000001
        SBR     FLAGS1,0B00000010

        LDI     TEMP,LOW(UART_TX_BUFF)
        STS     UART_TX_HD,TEMP
        STS     UART_TX_TL,TEMP
        STS     UART_TX_LN,NULL
        LDI     TEMP,LOW(UART_RX_BUFF)
        STS     UART_RX_HD,TEMP
        STS     UART_RX_TL,TEMP
        STS     UART_RX_LN,NULL

        RTS_CLR
        SBI     DDRD,5
        CBI     DDRB,6

        RET
;
;--------------------------------------
;USART1 RX Interrupt handler
USART1_RXC:
        PUSH    TEMP
        IN      TEMP,SREG
        PUSH    TEMP
        PUSH    DATA

        INPORT  DATA,UDR1
        LDS     TEMP,UART_RX_LN
        CPI     TEMP,UART_RXBSIZE ;¡ãä¥à ¯®«­ë©?
        BRCC    U1RX9
        PUSHX
        LDI     XH,HIGH(UART_RX_BUFF)
        LDS     XL,UART_RX_HD
        ST      X+,DATA
        ANDI    XL,UART_RXBSIZE-1
        ORI     XL,LOW(UART_RX_BUFF)
        STS     UART_RX_HD,XL
        POPX
        INC     TEMP
        STS     UART_RX_LN,TEMP
        CPI     TEMP,UART_RXBSIZE-20
        BRCS    U1RX9
        SBRC    FLAGS1,4
        RTS_SET
U1RX9:
        POP     DATA
        POP     TEMP
        OUT     SREG,TEMP
        POP     TEMP
        RETI
;
;--------------------------------------
;USART1 UDR Empty Interrupt handler
USART1_DRE:
        PUSH    TEMP
        IN      TEMP,SREG
        PUSH    TEMP

        LDS     TEMP,UART_TX_LN
        TST     TEMP ;¥áâì çâ® ¢ ¡ãä¥à¥?
        BREQ    U1TX1
        SBRS    FLAGS1,4
        RJMP    U1TX2
        SBIC    PINB,6
        RJMP    U1TX1

U1TX2:  PUSHX
        PUSH    DATA
        LDI     XH,HIGH(UART_TX_BUFF)
        LDS     XL,UART_TX_TL
        LD      DATA,X+
        OUTPORT UDR1,DATA
        ANDI    XL,UART_TXBSIZE-1
        ORI     XL,LOW(UART_TX_BUFF)
        STS     UART_TX_TL,XL
        DEC     TEMP
        STS     UART_TX_LN,TEMP
        POP     DATA
        POPX
        RJMP    U1TX9

U1TX1:  INPORT  TEMP,UCSR1B
        CBR     TEMP,(1<<UDRIE) ;‡ ¯à¥é ¥¬ ¯à¥à뢠­¨ï Empty Data Register
        OUTPORT UCSR1B,TEMP

U1TX9:  POP     TEMP
        OUT     SREG,TEMP
        POP     TEMP
        RETI
;
;--------------------------------------
;Put byte to UART buffer
;in:    DATA
UART_PUTCHAR:
        PUSH    TEMP
        PUSHX

U_PCHR1:SBRC    FLAGS1,4
        RCALL   UART_CHK_CTS
        LDS     TEMP,UART_TX_LN
        CPI     TEMP,UART_TXBSIZE ;¡ãä¥à ¯®«­ë©?
        BRCC    U_PCHR1

        LDI     XH,HIGH(UART_TX_BUFF)
        LDS     XL,UART_TX_HD
        ST      X+,DATA
        CLI
        LDS     TEMP,UART_TX_LN
        INC     TEMP
        STS     UART_TX_LN,TEMP
        SEI
        ANDI    XL,UART_TXBSIZE-1
        ORI     XL,LOW(UART_TX_BUFF)
        STS     UART_TX_HD,XL

        SBRS    FLAGS1,4
        RJMP    U_PCHR8
        SBIC    PINB,6
        RJMP    U_PCHR9
U_PCHR8:INPORT  TEMP,UCSR1B
        SBR     TEMP,(1<<UDRIE) ; §à¥è ¥¬ ¯à¥à뢠­¨ï Empty Data Register
        OUTPORT UCSR1B,TEMP

U_PCHR9:POPX
        POP     TEMP
        RET
;
;--------------------------------------
;Get byte from UART buffer
;out:   sreg.Z == SET - ­¥â ¤ ­­ëå
;       DATA == ¤ ­­ë¥
UART_GETCHAR:
        PUSH    TEMP
        LDS     TEMP,UART_RX_LN
        TST     TEMP
        BREQ    U_GCHR9
        PUSHX
        LDI     XH,HIGH(UART_RX_BUFF)
        LDS     XL,UART_RX_TL
        LD      DATA,X+
        CLI
        LDS     TEMP,UART_RX_LN
        DEC     TEMP
        STS     UART_RX_LN,TEMP
        SEI
        CPI     TEMP,UART_RXBSIZE-21
        BRCC    U_GCHR1
        RTS_CLR
U_GCHR1:ANDI    XL,UART_RXBSIZE-1
        ORI     XL,LOW(UART_RX_BUFF)
        STS     UART_RX_TL,XL
        CLZ
        POPX
U_GCHR9:POP     TEMP
        RET
;
;--------------------------------------
;
UART_CRLF:
        LDI     DATA,$0D
        RCALL   UART_PUTCHAR
        LDI     DATA,$0A
        RJMP    UART_PUTCHAR
;
;--------------------------------------
;
UART_DUMP512:
        PUSH    FLAGS1
        CBR     FLAGS1,0B00001101
        SBR     FLAGS1,0B00000010
        PUSHZ
        LDIZ    MSG_DUMPHEAD*2
        RCALL   PRINTSTRZ
        POPZ
        LDIX    0
UDUMP3: RCALL   UART_CRLF
        MOV     DATA,XH
        RCALL   HEXBYTE
        MOV     DATA,XL
        RCALL   HEXBYTE
        LDI     DATA,$20
        RCALL   UART_PUTCHAR
        RCALL   UART_PUTCHAR
        PUSHZ
        LDI     WL,16
UDUMP1: LD      DATA,Z+
        RCALL   HEXBYTE_FOR_DUMP
        DEC     WL
        BRNE    UDUMP1
        LDI     DATA,$20
        RCALL   UART_PUTCHAR
        POPZ
        LDI     WL,16
UDUMP2: LD      DATA,Z+
        RCALL   PUTCHAR_FOR_DUMP
        DEC     WL
        BRNE    UDUMP2
        ADIW    XL,16
        CPI     XH,$02
        BRNE    UDUMP3
        POP     FLAGS1
        RET
MSG_DUMPHEAD:
        .DB     $0D,$0A,$3B,"     .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F",0
;
;--------------------------------------
;
UART_CHK_CTS:
        SBIC    PINB,6
        RET
        PUSH    TEMP
        LDS     TEMP,UART_TX_LN
        TST     TEMP
        BREQ    UART_CHKCTS9
        INPORT  TEMP,UCSR1B
        SBR     TEMP,(1<<UDRIE) ; §à¥è ¥¬ ¯à¥à뢠­¨ï Empty Data Register
        OUTPORT UCSR1B,TEMP
UART_CHKCTS9:
        POP     TEMP
        RET
;
;--------------------------------------
;