Wydaje mi się że wyłączenie przerwań tylko od usartu nie obroni mnie w takim przypadku przed wymieszaniem danych z ramek A i B. Dane się wymieszają w buforze, a usart wyśle wszystko w takiej kolejności w jakiej jest zapisane.
Zapewne w momencie gdy w pętli głównej chce wykonywać operacje na buforze, pomogłoby zablokowanie przerwań które też modyfikują ten bufor.
Tylko np. wyłączając przerwanie zewnętrzne w rejestrach peryferia PIO mogę zagubić część przerwań zewnętrznych.
Oczywiście z tym mogę się mylić, więc jeśli jest inaczej to nich ktoś mnie naprowadzi na dobry tok myślenia
Na razie dopiero wchodzę w świat 32bitowych mikrokontrolerów.
Więc tak jak pisałem w poprzednim poście makra __disable_irq() __enable_irq() zmieniają priorytet wykonywania się instrukcji pomiędzy tymi makrami na 0. Instrukcje stają się bardzo ważne a żadne przerwanie nie przerwie ich wykonywania. Ale też te przerwania nie zostaną zagubione, tylko zostaną odłożone na wykonanie się po makrze __enable_irq().
Ze względu na to że USART nie tylko wysyła dane, ale również odbiera je. Muszę uważać z tymi makrami aby instrukcje pomiędzy nimi nie wykonywały się dłużej niż czas przyjścia jednego bajtu danych, ponieważ w przypadku przyjścia kilku bajtów z rzędu mogę nie nadążyć z ich odbiorem co spowoduje ich nadpisywanie.
Jeśli piszę jakieś herezje to mnie poprawcie
Piszę po prostu tak jak ja to rozumiem. A dopiero się uczę, więc mogę się mylić.