Portál AbcLinuxu, 8. května 2025 15:30

Dotaz: Čítanie úrovne na RxD na sér. porte...

22.6.2012 21:23 marallo | skóre: 4 | blog: marallo | Dubnica nad Vahom
Čítanie úrovne na RxD na sér. porte...
Přečteno: 402×
Odpovědět | Admin
Dobrý večer.

Píšem jeden program ktorý číta úrovne jednotlivých vstupov na sériovom porte. Vstupy CTS, DSR, RI a DCD viem čítať pomocou hodnoty v registri "Baseadress + 6", no potrebujem čítať aj úroveň na RxD. Nikde som nenašiel ako na to. Poradíte prosím?

Ďakujem.
diakritiku neuznavam, a na chyby kaslem...

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.6.2012 22:05 com
Rozbalit Rozbalit vše Re: Čítanie úrovne na RxD na sér. porte...
Odpovědět | | Sbalit | Link | Blokovat | Admin
zdravim,

myslim ze sa to neda. Rx a Tx su urcene na seriovy prenos.

pripoj si k seriovemu portu mikroprocesor...

Vynikajuce clanky (jedny z najlepsich na tomto portali) su tu:

http://www.abclinuxu.cz/clanky/hardware/seriova-komunikace-pod-linuxem-i

http://www.abclinuxu.cz/clanky/hardware/jednocipy-pod-linuxem-i
23.6.2012 07:05 marallo | skóre: 4 | blog: marallo | Dubnica nad Vahom
Rozbalit Rozbalit vše Re: Čítanie úrovne na RxD na sér. porte...
Dík za odpoveď. TxD sa ovládať dá cez register BaseAdress + 3. Ak tam zapíšeme hodnotu 64, TxD sa prepne do log. 1. To mám v praxi odskúšané. Ale pre RxD som podobnú fintu nenašiel...
diakritiku neuznavam, a na chyby kaslem...
Josef Kufner avatar 23.6.2012 10:25 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Čítanie úrovne na RxD na sér. porte...
Obávám se, že máš smůlu.
Hello world ! Segmentation fault (core dumped)
Jendа avatar 23.6.2012 12:35 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Čítanie úrovne na RxD na sér. porte...
<prasárna>Co zkusit přijmou bajt a podívat se, jestli obsahuje jedničky nebo nuly?</prasárna>
Řešení 1× (linuxik)
23.6.2012 19:57 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Čítanie úrovne na RxD na sér. porte...
Prasárna, neprasárna, hlavně to nebude fungovat protože pro příjem bytu potřebuješ start a stop.
23.6.2012 20:10 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Čítanie úrovne na RxD na sér. porte...
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud ti nevadí jisté zpoždění, mělo by to jít sledovat přes BREAK (a taktéž se pomocí BREAK dá nastavit výstup do nuly). Ke přečtení v Line Status registru, pokud mapování pro procesor odpovídá registrům 16550 chipu, tak je to adresa +5, bit 4.

Ale přecijen BREAK je spíš chybový stav, než úroven pinu, takže se to možná nebude chovat podle tvých představ. Pokud víš jaký konkrétní UART obvod používáš, koukni na jeho datasheet, jinak doufej, že to bude odpovídat chování 16550, což znamená především to, že přečtením registru se příznak BREAK vynuluje a zpět se nastaví asi až po vypršení času dalšího znaku (bez záruky, přečti si datasheet!).
23.6.2012 20:14 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Čítanie úrovne na RxD na sér. porte...
PS: tvůj uváděný postup pro TX je právě "Set Break" bit. Koukni třeba sem: http://www.datasheetcatalog.org/datasheet/nationalsemiconductor/DS008652.PDF a trochu si počti místo zkoušení "fíglů". :)
25.6.2012 12:39 marallo | skóre: 4 | blog: marallo | Dubnica nad Vahom
Rozbalit Rozbalit vše Re: Čítanie úrovne na RxD na sér. porte...
Ďakujem za odpovede. Oneskorenie mi vadí, je tam dosť rýchla slučka. Zatiaľ som to odložil na neskôr, datasheet som si vytlačil, keď budem mať čas, preštudujem to. Pekný deň...
diakritiku neuznavam, a na chyby kaslem...
28.6.2012 09:24 mluno
Rozbalit Rozbalit vše Re: Čítanie úrovne na RxD na sér. porte...
Odpovědět | | Sbalit | Link | Blokovat | Admin
Já osobně jsem tento problém řešil před časem. Přímé ovládání linek portu ale nedoporučuju. Měl jsem zařízení, které takto kdysi komunikovalo (RXD ale nevyužívalo), ale 10 let leželo ladem a když jsem ho chtěl rozchodit, narážel jsem na mnohé problémy. Snad jsem i našel knihovny, kde je toto vyřešené. Číst RxD žřejmě nejde, nebo jsem na to nepřišel, ostatní linky je možné ovládat a číst ve všech rozumných systémech (protože se někdy používají pro handshake). I s tím nastavením breaku jsem měl problém, zatimco příkazy typu set_DCD a get_CTS jsem objevil, s tim brejkem to bylo nějaké složitější. Rozuzlení přišlo samo, v tu dobu jsem si začal hrát s atmely. Kromě jiného obsahují na čipu jeden nebo více sériových portů. A tak jsem pro komunikaci svého zařízení použil normální sériový protokol (mě stačilo 9600Bd, ale lze daleko víc). Cena atmelu je 50-100 korun. Použil jsem ATtiny2313, který se akorát vešel do volného místa na destičce. Psaní programu v AVR studiu (na stránkách atmelu), které obsahuje i emulátor (já v něm objevil několik chyb, ale ty se týkaly timerů, sériová linka je snad ok). Programování přes SPI pomocí ponny prog (programátor obsahuje jen hradla, emulaci SPI dělá ponny prog). Nevím čemu říkáte poměrně rychlá smyčka (pro mě je to třeba 50 mikrosekund), na milisekundy bych si se sériovým portem netroufnul, desítky možná ale stovky milisekund by měly bejt OK. Výhodou tohoto řešení je, že vystačíte s obyčejným sériovým přenosem, který poměrně snadno implementujete napříč operačními systémy (a nemusíte šašit s BA, stačí číslo/označení portu a instrukce pro příjem a odeslání znaku + nějaký init a close), a taky to že to jde i přes USB adaptér a vůbec i pod nepřátelskými systémy jako windows. Kromě toho by část smyčky mohla být v tom atmelu, tam nejsou problém ani mikrosekundy (při 10MHz je jedna instrukce na 0.1-0.4us). Je daleko jednodušší posílat na port písmenka, než nastavovat linky portu. Totéž by šlo asi i jakýmkoliv jiným mikrořadičem, ale s PICy ani ostatními nemám zkušenost (podle příznivců piců jsou atmely na nic, ale nevim, já si skoro totéž myslim o picech). Můžu Vám případně poskytnout svůj program pro ATtiny2313, kde je udělaná obsluha přerušení od příjmu znaku, což by Vám ušetřilo tak dva dny pročítání manuálů a experimentování.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.