Witam.
Mam pytanie odno¶nie wysy³ania ci±gu znaków w avr przez usart.
Mam przygotowanie dwadzie¶cia znaków do wys³ania w tablicy unsigned char tx_tab[20]; i zmienn± okre¶laj±c± aktualnie wysy³any znak unsigned char curr_tx; Dane wysy³am z u¿yciem przerwañ na pusty bufor wyj¶ciowy i koniec wysy³ania znaku. Nie jestem pewien co do poprawno¶ci kodu.
//start SIG_USART0_UDRE_ENABLE; //odblokuj przerwanie UDR Pusty
SIGNAL(SIG_USART0_UDRE) { UDR = tx_tab[curr_tx]; } SIGNAL(SIG_USART0_TX) { if(curr_tx == 19) //Je¶li wys³ano ostatni znak ci±gu { SIG_USART0_UDRE_DISABLE; //zablokuj przerwanie UDR Pusty return; } curr_tx++; }
Czy jest mo¿liwe ¿e przerwanie SIG_USART0_UDRE zostanie wywo³ane dwukrotnie bez przerwania SIG_USART0_TX i zwiêkszenia zmiennej curr_tx ? Tzn. ¿e do UDR zostanie zapisany dwukrotnie ten sam znak? Je¶li tak to czy powinienem w przerwaniu SIG_USART0_UDRE blokowaæ to przerwanie, a po zakoñczeniu transmisji znaku tzn. w SIG_USART0_TX odblowkowaæ je? Czy robi siê to jeszcze inaczej?
Dziêki za pomoc. Pozdrawiam Pawe³