Programowy bufor FIFO dla AVR
Na listingu zamieszczono programowy bufor FIFO dla mikrokontrolerów AVR. Napisano go w języku asembler, co pozwala na łatwe włączenie go do własnych programów. Bufor może mieć długość 16, 32, 64, 128 lub 256 bajtów. Ustala się ją przed kompilacją, zmieniając liczbę przy etykiecie L_FIFO. Rolę wskaźnika danych pełni rejestr Y.
Listing. Bufor FIFO dla AVR
; First-In First-Out
.dseg
.equ L_FIFO=64 ; długość bufora (16,32,64,128 lub 256)
Fifo: .byte 3+N_FIFO ; liczba bajtów,wsk.odczytu,wsk.zapisu i bufor danych
.cseg
write_fifo: ;wywołanie: Y=wskazanie na FIFO
ld r17, Y ;r16=bajt do zapisu
cpi r17, L_FIFO-1 ;Ret: Z=1:bufor przepełniony
breq PC+12
inc r17
st Y, r17
ldd r17, Y+2
inc r17
std Y+2, r17
dec r17
andi r17, L_FIFO-1
add YL, r17
adc YH, _0
ori r17, 1
std Y+3, r16
ret
read_fifo: ;wywołanie: Y=wskazanie na FIFO
ld r16, Y ;Ret: r16=odczytany bajt, Z=1:bufor pusty
cpi r16, 0
breq PC+12
dec r16
st Y, r16
ldd r16, Y+1
inc r16
std Y+1, r16
dec r16
andi r16, L_FIFO-1
add YL, r16
adc YH, _0
ori r16, 1
ldd r16, Y+3
ret
init_fifo: ;wywołanie: Y=wskazanie na FIFO
std Y+0, _0
std Y+1, _0
std Y+2, _0
ret
Odpowiedzi
co oznacza zapis _0?
co oznacza zapis _0?
Dodaj nowy komentarz