<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
Mám téměř 0 zkušeností s PIC, ale na AVR, starých od Armelu, i
nových od Microchipu, jde flush udělat tak, že se dokola čte datový
registr, dokud nezmizí příznak dokončení předchozího příjmu.<br>
<b>Flushing the Receive Buffer<br>
</b>If the RX buffer has to be flushed during normal operation,
repeatedly read the DATA location (USARTn.RXDATAH
and USARTn.RXDATAL registers) until the Receive Complete Interrupt
Flag (the RXCIF bit in the
USARTn.RXDATAH register) is cleared.<br>
Ale trochu se obávám, že to platí jen pro async. Pak by to asi
vyžadovalo si tam ty clocky nějak vyrobit, třeba přepnout na async s
dostatečně vysokým baudrate:-)<br>
<br>
Na starých v ATmega v DS doporučovali i disable/enable, na těch
nových od Microchipu už ne. Tak bych Microchip PIC zkusil to čtení.<br>
<br>
PH<br>
<br>
<div class="moz-cite-prefix">Dne 28.04.2024 v 22:21 Jindrich Fucik
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:09c23bd7-b76d-4792-8c8a-cc5bad0f47fa@seznam.cz">Ahoj,
<br>
<br>
mám takový problém, kterému moc nerozumím.
<br>
Mám synchronní sériovou komunikaci, ve které jsem slave. Master
generuje clock i data. Protokol je takový, že běží komunikace,
clock je generovaný v rozsahu 10 až 500 µs. Občas ale udělá pauzu
delší než 8 ms a podle toho slave pozná, že tady začíná nový bajt
a má začít odpočítávat začátek.
<br>
Komunikaci čtu pomocí USART v režimu sync a continuous receiver,
pauzu delší než 8ms čtu pomocí Timer 2 s externím resetem
nastaveným na clock, to funguje správně.
<br>
<br>
A teď můj problém - nevím jak vyresetovat ten USART, respektive
jak mu říci, že má zahodit co doposud nasbíral do posuvného
registru a má začít znovu. Myslel jsem, že bude stačit shodit SPEN
(disable serial port) a pak jej zase nahodit (enable serial port).
To ale evidentně nefunguje.
<br>
Nezná někdo nějakou chytřejší metodu?
<br>
</blockquote>
</body>
</html>