Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Pamięć programu jest ładowana strona po stronie. Przed zaprogramowaniem strony danymi umieszczonymi w tymczasowym buforze strony, strona ta musi zostać wymazana. Bufor tymczasowy strony wypełniany jest kolejno słowami przy pomocy instrukcji SPM, a bufor ten można wypełniać albo przed rozkazem wymazania strony, albo pomiędzy operacjami wymazania strony i zapisu strony:
Alternatywa 1, wypełnij bufor przed wymazaniem strony
Alternatywa 2, wypełnij bufor po wymazaniu strony
Jeśli potrzeba zmienić tylko część strony, to reszta strony musi być zapamiętana np. w tymczasowym buforze strony przed wykonaniem operacji wymazania, a następnie ponownie zapisana. Jeśli używana jest alternatywa 1, to program ładujący (ang. Boot Loader) udostępnia wygodną opcję odczytu-modyfikacji-zapisu, która pozwala programowi użytkownika najpierw odczytać stronę, dokonać niezbędnych zmian, a następnie zapisać z powrotem zmodyfikowane dane. Jeśli używana jest alternatywa 2, to nie jest możliwe odczytanie starych danych podczas ładowania, ponieważ strona została już wymazana. Tymczasowy bufor strony można zapisywać w dowolnej kolejności. Ważne jest, aby adres strony używany w obu operacjach wymazywania i zapisu był adresem tej samej strony.
Adres strony musi być zapisany w bitach PCPAGE w rejestrze Z. Pozostałe bity tego rejestru będą zignorowane podczas tej operacji.
Uwaga: Mikroprocesor jest zatrzymywany podczas operacji wymazywania strony.
Jeśli w środku operacji ładowania strony instrukcją SPM wykonywany jest zapis EEPROM, to wszystkie załadowane dane zostaną utracone.
Adres strony musi zostać zapisany do bitów PCPAGE. Pozostałe bity rejestru rejestru wskaźnikowego Z musza mieć wartość 0 podczas tej operacji.
Uwaga: Mikroprocesor jest zatrzymywany podczas operacji zapisu strony.
Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | |
ZH(R31) | Z15 | Z14 | Z13 | Z12 | Z11 | Z10 | Z9 | Z8 | ZH |
ZL(R30) | Z7 | Z6 | Z5 | Z4 | Z3 | Z2 | Z1 | Z0 | ZL |
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Ponieważ pamięć FLASH zorganizowana jest w strony, licznik rozkazów może być traktowany tak, jakby posiadał dwie różne sekcje. Jedna sekcja, składająca się z najmniej znaczących bitów, adresuje słowa wewnątrz strony, natomiast część złożona z najbardziej znaczących bitów adresuje strony. Pokazane to jest na poniższym rysunku. Zwróć uwagę, iż operacje wymazania strony i zapisu strony adresują pamięć niezależnie od siebie (rejestr Z może mieć różną zawartość dla każdej z nich). Dlatego bardzo ważnym jest, aby oprogramowanie adresowało tę samą stronę w obu tych operacjach.
Uwaga: Zaprogramowane bity bezpiecznikowe i bity blokujące będą odczytane jako zerp. Bity niezaprogramowane dają odczyt jeden.
Wykonanie instrukcji LPM w ciągu trzech cykli zegarowych mikroprocesora po ustawieniu bitów RFLB i SELFPRGEN w SPMCSR zwróci wartości bitów blokujących w rejestrze docelowym. Bity RFLB i SELFPRGEN są automatycznie zerowane po ukończeniu odczytu bitów blokujących, lub jeśli żadna instrukcja LPM nie zostanie wykonana w ciągu trzech cykli zegarowych mikroprocesora, lub jeśli żadna instrukcja SPM nie zostanie wykonana w ciągu czterech cykli zegarowych mikroprocesora. Gdy bity RFLB i SELFPRGEN są wyzerowane, instrukcja LPM działa w sposób standardowy.
Aby odczytać bity blokujące, postępuj zgodnie z poniższą procedurą:
Jeśli procedura się powiedzie, to zawartość rejestru docelowego jest następująca:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Rd | - | - | - | - | - | - | LB2 | LB1 |
Więcej na temat bitów blokujących znajdziesz w następnym rozdziale.
Algorytm odczytywania bitów bezpiecznikowych jest podobny do opisanego powyżej algorytmu odczytywania bitów blokujących, inny jest jedynie adres.
Aby odczytać dolny bajt bitów bezpiecznikowych (ang. Fuse Low Byte, FLB), postępuj wg poniższej procedury:
Jeśli się to powiedzie, to rejestr docelowy zawiera:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Rd | FLB7 | FLB6 | FLB5 | FLB4 | FLB3 | FLB2 | FLB1 | FLB0 |
Aby odczytać górny bajt bitów bezpiecznikowych (ang. Fuse High Byte, FHB), po prostu w powyższej procedurze zastąp wartość 0x0000 wpisywaną do rejestru wskaźnikowego Z wartością 0x0003 i wykonaj resztę operacji. Jeśli procedura się powiedzie, to w rejestrze docelowym otrzymasz FHB:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Rd | FHB7 | FHB6 | FHB5 | FHB4 | FHB3 | FHB2 | FHB1 | FHB0 |
Aby odczytać rozszerzony bajt bitów bezpiecznikowych (ang. Fuse Extended Byte, FEB), zastąp wartość 0x000 wpisywaną do rejestru wskaźnikowego Z wartością 0x0002 i wykonaj resztę operacji. Jeśli procedura się powiedzie, to w rejestrze docelowym otrzymasz FEB:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Rd | FEB7 | FEB6 | FEB5 | FEB4 | FEB3 | FEB2 | FEB1 | FEB0 |
Więcej na temat bitów bezpiecznikowych znajdziesz w następnym rozdziale.
Aby odczytać zawartość tablicy sygnatur mikrokontrolera, postępuj według poniżej procedury:
Bity RSIG i SPMEN zostaną automatycznie wyzerowane po trzech cyklach mikroprocesora. Gdy bity RSIG i SPMEN są wyzerowane, to instrukcja LPM będzie działać zgodnie z opisem w rozdziale "Zestaw instrukcji AVR".
Zobacz na poniższy przykładowy program:
Przykład w kodzie maszynowym |
DSIT_read: ; Używa wskaźnika Z jako indeksu tablicy ldi ZH, 0 ldi ZL, 1 ; Załaduj bity SPMCSR do R16, następnie zapisz do SPMCSR ldi r16, (1<<RSIG)|(1<<SPMEN) out SPMCSR, r16 ; Wykonaj LPM. Dane tablice będą zwrócone w r17 lpm r17, Z ret |
Błędom w FLASH można łatwo zapobiec stosując się do następujących zaleceń projektowych (jedno jest wystarczające):
Symbol | Minimalny czas programowania | Maksymalny czas programowania |
Zapis FLASH (wymazanie strony, zapis strony i zapis bitów blokujących za pomocą SPM) | 3,7 ms | 4,5 ms |
Czasy minimalne/maksymalne dotyczą pojedynczej operacji
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x37 | - | - | RSIG | CTPB | RFLB | PGWRT | PGERS | SPMEN | SPMCSR |
Zapis/Odczyt | O | O | O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są zarezerwowane w ATtiny25/45/85 i przy odczycie dają zawsze wartość zero.
Wykonanie instrukcji LPM w ciągu trzech cykli po ustawieniu bitów RSIG i SPMEN w rejestrze SPMCSR zwróci wybrane dane (zależnie od wartości wskaźnika Z) z wewnętrznej tablicy sygnatur mikrokontrolera w rejestrze docelowym.
Jeśli bit CTPB zostanie zapisany jedynką logiczną podczas wypełniania tymczasowego bufora strony, to bufor ten zostanie wymazany i przechowywane w nim dane będą utracone.
Instrukcja LPM wykonana w obrębie do trzech cykli zegarowych po ustawieniu bitów RFLB i SPMEN w rejestrze SPMCSR odczyta do rejestru docelowego albo bity blokujące, albo bity bezpiecznikowe (w zależności od bity Z0 w rejestrze wskaźnikowym Z). Zobacz do podrozdziału "Zapis EEPROM blokuje zapis do SPMCSR".
Jeśli ten bit zostanie zapisany logiczną jedynką w tym samym czasie co bit SPMEN, to instrukcja SPM wykonana w czasie do 4 cykli zegarowych spowoduje zapis strony danymi przechowywanymi w buforze tymczasowym. Adres strony jest brany z bitów PCPAGE rejestru wskaźnikowego Z. Dane w R1 i R0 są ignorowane. Bit PGWRT automatycznie wyzeruje się po zakończeniu zapisu strony, lub jeśli żadna instrukcja SPM nie zostanie wykonana w czasie czterech cykli zegarowych. Podczas operacji zapisu strony mikroprocesor zostaje zatrzymany.
Jeśli ten bit zostanie zapisany logiczną jedynką w tym samym czasie co bit SPMEN, to instrukcja SPM wykonana w czasie do 4 cykli zegarowych spowoduje wymazanie strony. Adres strony jest brany z bitów PCPAGE rejestru wskaźnikowego Z. Dane w R1 i R0 są ignorowane. Bit PGERS automatycznie wyzeruje się po zakończeniu wymazywania strony, lub jeśli żadna instrukcja SPM nie zostanie wykonana w czasie czterech cykli zegarowych. Podczas całej operacji wymazywania strony mikroprocesor zostaje zatrzymany.
Ten bit uaktywnia działanie instrukcji SPM w ciągu następnych czterech cykli zegarowych. Jeśli zostanie ustawiony na 1 z bitami RSIG, CTPB, RFLB, PGWRT lub PGERS, to następna instrukcja LPM/SPM będzie miała specjalne działanie wg powyższego opisu.
Jeśli zostanie zapisany tylko bit SPMEN, to następna instrukcja SPM zapisze wartość z R1:R0 w tymczasowym buforze strony adresowanym przez wskaźnik Z. Najmłodszy bit wskaźnika Z jest ignorowany. Bit SPMEN zostanie automatycznie wyzerowany po zakończeniu instrukcji SPM, lub po czterech cyklach zegarowych, jeśli nie zostanie wykonana żadna instrukcja SPM. Podczas wymazywania strony i zapisu strony bit SPMEN pozostaje w stanie wysokim aż do zakończenia operacji.
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.