Subversion Repositories pentevo

Rev

Rev 291 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
261 ddp 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
352 ddp 19
;.EQU    UART_TXBSIZE    =128            ;размер буфера д.б. равен СТЕПЕНЬ_ДВОЙКИ байт (32,64,128 или 256)
261 ddp 20
;UART_TX_BUFF:   .BYTE   UART_TXBSIZE    ;адрес д.б. кратен UART_TXBSIZE
352 ddp 21
;.EQU    UART_RXBSIZE    =128            ;размер буфера д.б. равен СТЕПЕНЬ_ДВОЙКИ байт (32,64,128 или 256)
261 ddp 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
;--------------------------------------
290 ddp 36
;
37
UARTDIRECT_CRLF:
38
        LDI     DATA,$0D
39
        RCALL   UARTDIRECT_PUTCHAR
40
        LDI     DATA,$0A
41
;
42
;--------------------------------------
261 ddp 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
352 ddp 108
        CPI     TEMP,UART_RXBSIZE-20
261 ddp 109
        BRCS    U1RX9
352 ddp 110
        SBRC    FLAGS1,4
261 ddp 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
352 ddp 129
        SBRS    FLAGS1,4
130
        RJMP    U1TX2
131
        SBIC    PINB,6
132
        RJMP    U1TX1
261 ddp 133
 
352 ddp 134
U1TX2:  PUSHX
261 ddp 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
352 ddp 148
 
149
U1TX1:  INPORT  TEMP,UCSR1B
261 ddp 150
        CBR     TEMP,(1<<UDRIE) ;Запрещаем прерывания Empty Data Register
151
        OUTPORT UCSR1B,TEMP
352 ddp 152
 
261 ddp 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
352 ddp 164
 
165
U_PCHR1:SBRC    FLAGS1,4
166
        RCALL   UART_CHK_CTS
167
        LDS     TEMP,UART_TX_LN
261 ddp 168
        CPI     TEMP,UART_TXBSIZE ;буфер полный?
169
        BRCC    U_PCHR1
352 ddp 170
 
261 ddp 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
 
352 ddp 183
        SBRS    FLAGS1,4
184
        RJMP    U_PCHR8
185
        SBIC    PINB,6
261 ddp 186
        RJMP    U_PCHR9
352 ddp 187
U_PCHR8:INPORT  TEMP,UCSR1B
261 ddp 188
        SBR     TEMP,(1<<UDRIE) ;Разрешаем прерывания Empty Data Register
189
        OUTPORT UCSR1B,TEMP
352 ddp 190
 
191
U_PCHR9:POPX
261 ddp 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
352 ddp 213
        CPI     TEMP,UART_RXBSIZE-21
261 ddp 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
;
277 ddp 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
;
352 ddp 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
;