AVR Software UART – do meje

Torej za določeno aplikacijo – (hitri AD pretvornik), sem rabil tudi precej hiter serijski prenos podatkov na računalnik:

.DEF Reg1 = R16
.DEF Reg2 = R17

LDI Reg1, 0b10101010 // 1
LDI Reg2, 8 // 1

Startbit:
ROR reg1 // 1
BRCS Clearbit // 2 če je skok, 1 če ga ni

Dec reg2 // 1
SBI PortB, 0 // 2
RJMP Endbit // 2

Clearbit:
CBI PortB, 0 // 2
NOP // 1
dec reg2 // 1
Endbit:
// // za 10.5 timing se doda še:
// SBRS/SBRC reg2,0 // 1/2
// brne Startbit // 2
brne Startbit //2

end:
rjmp end

Zadeva rabi 2 registra (en za podatke, drugi za bitcounter), 22 bajtov programskega prostora, prenos enega bita pa izvrši v 9 AVR procesorskih ciklih, napisana je tudi koda za 10.5 ciklov (izmenjujoče 10/11). Zaenkrat še nisem implementiral start in stop bitov, ampak to je v bistvu celo lažje kot samo enakomerno pošiljanje podatkov…

V teoriji deluje 🙂 bo treba preizkusit še v praksi… Če bo vse v redu bom s to kodo z 9.6MHz AVRja lahko pošiljal podatke pri 921600bps…