[HWnews] Problem s UARTom 16C550 a WinCE
Radek Pulpan
hw@elatec.cz
Čtvrtek Březen 18 19:13:29 CET 2004
Narazil jsem na podobny problem pri programovani ARM procesoru.
Predpokladam, ze v PDA bude nejaky klon. Nakonec jsem to resil tak , ze
okamzite pri vstupu do prerusovaci rutiny zmenim v nastavovacim registru
radice IRQ polaritu urovne preruseni. Pak jsem vedel, ze dalsi
preruseni je vyvolane spadovou hranou a to uz jsem si to osetril
softwarove. Zase jsem zmenil polaritu a vedel jsem ze dalsi preruseni
prijde na nabeznou hranu. Mate sice dvojnasobny pocet preruseni, ale
jinak to beha v pohode. Takhle se to da resit v pripade ze mate moznost
konfigurovat radic preruseni, coz by jste mel na CE mit.
Pokud tu moznost nemate, musite si nastavit nejaky FLAG, ktery vam
rekne, ze jste jeste v predchozi IRQ rutine a toto IRQ vam prislo drive
nez jste predchzi rutinu ukoncil a tesne pred ukoncenim rutiny schodit
flag a pending bit.
S pozdravem
Radek Pulpan
Martin wrote:
> Zdravim,
> neocakavam ze moj problem vzbudi podobny zaujem ako tema kapacitoru, ale
> mozno niekto poradi...
>
> Robim periferiu k PDA (iPAQ), komunikujucu cez 16C550 zapojenu na
> CompactFlash konektor. Vsetko chodilo, ale z novou verziou iPAQ-u sa
> vyskytol problem. Nastastie po navesani analyzatora sa mi podarilo
> presne identifikovat pricinu, akurat neviem ako ju odstranit :-)
> Problem je v tom, ze 16C550 generuje IRQ na uroven (znuluje sa po
> vycitani reg.identifikacie prerusenia) a PDA sa tvari ze reaguje na
> hranu a navyse ze nuluje prerusovaci flag pri odchode z prerusovacej
> rutiny! Pokial ma vysielany paket o1B viac ako je fronta 16C550, teda
> 17, 33, 49 atd. bajtov, dojde k neprijemnej situacii, ktorej
> zjednoduseny popis vyzera nasledovne:
>
> - pda zapise 16B do uartu
> - po odvysielani sa vystavi IRQ
> - pda vojde do prerusenia, precita register ident. prerusenia (zhodi
> IRQ) a zapise 17-ty bajt
> - 16C550 ho presunie do shift registra a kedze viac bajtov vo fronte
> nema, vystavi znovu IRQ
> - pda vyskoci z prerusenia cim vynuluje prerusovaci flag
> - druha strana korektne prijme paket a odpovie, ale pda nic nechyti,
> lebo IRQ zostalo vystavene este z konca vysielania
> To ze na jednej verzii to chodilo a inej nie, je dane v inak
> vychadzajucom casovani. U nechodiveho sa vyskytuje kriticke IRQ za cca
> 2us od posledneho pristupu pda k uartu a na chodivom cca 4us. Z toho
> usudzujem, ze v druhom pripade stihne vyskocit z prerusenia kym saIRQ
> vystavi.
>
> Ja robim len HW, ale softweristi mi povedali, ze oni nemaju moznost
> nastavit aby pda reagovalo tak ako treba - na uroven a nie na hranu.
> Takze ak maju pravdu, chyba sa zda byt v driveroch. Bolo mi vysvetlene,
> ze WinCE sa nepredavaju samostatne, ale dodavaju sa spolu s vyrobkom. To
> by znamenalo reklamovat chybu u HP. Nechce sa mi verit, ze by nikto iny
> s tym nemal takyto problem.
>
> Inak obist sa to da napr. zarovnanim vysielanych paketov napr. na parny
> pocet bajtov, ale zda sa mi to chore...
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> HW-list@mailman.nethouse.cz
> http://nethouse.cz/mailman/listinfo/hw-list
>
>
>
Další informace o konferenci Hw-list