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 | ; |