Programowy bufor FIFO dla AVR

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
 
 

http://www.tomaszbogusz.blox.pl/

Odpowiedzi

co oznacza zapis _0?

co oznacza zapis _0?

Dodaj nowy komentarz

Zawartość pola nie będzie udostępniana publicznie.