Инициализация счетчика в начале программы:
Код
Main_Init_UART:
; Addressed UART, Receive only (9 bit), 1Mbaud(1.25Mbaud)
ldi rh_init, 0
sts UBRR0L, rh_init
sts UBRR0H, rl_zero
ldi rh_init, 1 << MPCM0
sts UCSR0A, rh_init
ldi rh_init, 1 << RXEN0 | 1 << RXCIE0 | 1 << UCSZ02
sts UCSR0B, rh_init
ldi rh_init, 0b11 << UCSZ00
sts UCSR0C, rh_init
Main_Init_UART_:
И в подпрограммах:
Код
Main_BufferUARTSwap:
sbrs rh_flags, BUFFER_bUART_READ_DONE
rjmp Main_BufferUARTSwap_
rcall BufferUARTSwap
Main_BufferUARTSwap_:
Main_BufferUARTError:
sbrs rh_flags, BUFFER_bUART_RECEIVE_ERROR
rjmp Main_BufferUARTError_
cbr rh_flags, 1 << BUFFER_bUART_RECEIVE_ERROR
rcall BufferUARTReset
Main_BufferUARTError_:
;*******************************
BufferUARTSwap:
; swap Rx<->Tx
movw rh_init, rl_pointUARTRx
movw rl_pointUARTRx, rl_pointUARTTx
movw rl_pointUARTTx, rh_init
; pointRx->indexRx
movw rh_indexUARTRx, rl_pointUARTRx
; pointTx->indexTx
movw rh_indexUARTTx, rl_pointUARTTx
ldi rh_init, BUFFER_bUART_SIZE
mov rl_countUARTRx, rh_init
cbr rh_flags, 1 << BUFFER_bUART_READ_DONE
sbr rh_flags, 1 << BUFFER_bUART_WRITE_DONE
BufferUARTSwap_:
ret
BufferUARTReset:
movw rh_indexUARTRx, rl_pointUARTRx
ldi rh_init, BUFFER_bUART_SIZE
mov rl_countUARTRx, rh_init
BufferUARTReset_:
ret