Re: PIC16F15225 a synchronní sériový port
Jindrich Fucik
FULDA na seznam.cz
Pondělí Duben 29 16:35:42 CEST 2024
Ahoj,
obávám se, že tady se nám sešlo "flush" a "reset". Flush se používá pro vyčtení všech dat, ale to není můj případ. Tedy není to nic co by mne trápilo. Já potřebuji reset, který řekne, že to co přijde od teď tak bude určitě bit 0 od dalšího bajtu. A pokud máš něco v posuvném registru, tak to zahoď, nebo i klidně odevzdej, ale už v tom nepokračuj, protože tohle prostě bude nový začátek.
Mimochodem - ve světě SPI je tohle vyřešeno použitím vstupu "Enable" nebo "Select" nebo tak. Ale bohužel SPI má obrácené pořadí bitů. A je docela zvláštní, že na sériovce to není nějak řešené. Asi se špatně koukám nebo co.
---------- Původní e-mail ----------
Od: Pavel Hudeček <edizon na seznam.cz>
Komu: hw-list na list.hw.cz
Datum: 28. 4. 2024 22:54:12
Předmět: Re: PIC16F15225 a synchronní sériový port
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.
Flushing the Receive Buffer
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.
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:-)
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í.
PH
Dne 28.04.2024 v 22:21 Jindrich Fucik
napsal(a):
Ahoj,
mám takový problém, kterému moc nerozumím.
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.
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ě.
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.
Nezná někdo nějakou chytřejší metodu?
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list