Jak resit bufferovani UARTU v MCU

Dusan Dolezal duffa@inmail.cz
Čtvrtek Březen 23 14:27:57 CET 2006


Ja jsem to onehda resil taky, nejdriv jsem se tam implementoval s klasickym
kruhovym bufferem, ale nakonec jsem se na to vyprdnul a mam tam buffery dva.
Do jednoho se zapisuji prijate znaky v preruseni, pokud prijde znak konce
protokolu, jeste v tom preruseni se cely buffer zkopiruje do toho druheho
(to je bleskove) a nastavi se priznak prijateho protokolu. A nekde v hlavni
smycce se potom tento priznak testuje a pokud je nastaven, zavola se
podprogram pro jeho vyhodnoceni. A mezitim se muze v preruseni opet znovu
psat do prvniho bufferu. Je ale treba podotknout, ze ja tam neposilam zadna
dlouha data, ale jenom prikazy s nejakymi parametry, takze ten buffer ma
tusim jenom 8 znaku, a navic to mam v 18F452, kde ja RAMky habakuk... :-))
Zatim to funguje bez problemu.

Tohle ovsem neresi ten problem s pomalym zapisem do displeje, tam asi jine
reseni nez kruhovy (a co nejvetsi) buffer nevymyslite. Proste ty data nekde
schovat musite.

Dusan Dolezal

> -----Original Message-----
> From: hw-list-bounces@list.hw.cz 
> [mailto:hw-list-bounces@list.hw.cz] On Behalf Of RV
> Sent: Thursday, March 23, 2006 9:43 AM
> To: HW-news
> Subject: Jak resit bufferovani UARTU v MCU
> 
> Zdravim,
> 
> vcera jsem dopsal prvni pouzitelnou verzi serioveho 
> RS232->LCD s tim, ze 
> jsou implementovany zatim tri prikazy:
> 
> 1C;  = vykonej prikaz urceny parametrem C seznam zde:
>           '1':Lcd_Cmd(LCD_FIRST_ROW);
>           '2':Lcd_Cmd(LCD_SECOND_ROW);
>           '3':Lcd_Cmd(LCD_THIRD_ROW);
>           '4':Lcd_Cmd(LCD_FOURTH_ROW);
>           '5':Lcd_Cmd(LCD_CLEAR);
>           '6':Lcd_Cmd(LCD_RETURN_HOME);
>           '7':Lcd_Cmd(LCD_CURSOR_OFF);
>           '8':Lcd_Cmd(LCD_UNDERLINE_ON);
>           '9':Lcd_Cmd(LCD_BLINK_CURSOR_ON);
>          '10':Lcd_Cmd(LCD_MOVE_CURSOR_LEFT);
>          '11':Lcd_Cmd(LCD_MOVE_CURSOR_RIGHT);
>          '12':Lcd_Cmd(LCD_TURN_ON);
>          '13':Lcd_Cmd(LCD_TURN_OFF);
>          '14':Lcd_Cmd(LCD_SHIFT_LEFT);
>          '15':Lcd_Cmd(LCD_SHIFT_RIGHT);
> 
> 2RSxx....x;  = vypis znaky x na radek R a od sloupce S
> 3xx....x;  = vypis znaky x od aktualni pozice kurzoru
> 
> chci jeste implementovat prikaz pro ovladani pipaku a zhasinani 
> podsvetleni displeje a hlavne jako prvni ridici znak adresu 
> displeje aby 
> slo vice displeju ovladat po jednom dratu.
> **************************************
> Kazdy prikaz je ukoncen znakem ; a zpracovan okamzite po 
> prenosu tohoto 
> znaku.
> 
> S tim souvisi jedna nepekna vec, na kterou jsem prisel az 
> kdyz jsem psal 
> obsluhu displeje do programu k meteostanici. Kdyz poslu totiz 
> prikazy do 
> displeje hned po sobe tak o ten druhej prikaz prijdu, protoze v tu 
> chvili zpracovavam 24 bajtovy buffer (4 parametry a 20znaku) a nemuzu 
> cist UART.
> 
> Premyslim jak to lze vyresit - zatim me napadla jen jedina vec - 
> rozsirit buffer na celej zbytek RAM (asi jeste 150B) s tim, ze tohle 
> proste nesmi pretect a implementovat jeste prikaz pro zpracovani 
> bufferu. Nechci totiz pouzit zadnou zpetnou linku z displeje. 
> Je jeste 
> nejake jine reseni? At dumam jak dumam nic me nenapadlo.
> 
> RadekCX
> 
> 
> 
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> 
> 
> ----------
> www.icewarp.cz - Merak Mail Server
> Zabezpeceny mail server pro Windows a Linux s Groupware.
> 
> 




Další informace o konferenci Hw-list