dodatek A

Transkrypt

dodatek A
Wykład
Mikrokontrolery
i Mikrosystemy
Dodatek
A
Środowiska IDE oraz programowanie
mikrokontrolerów z pamięcią FLASH
autor: dr inż. Zbigniew Czaja
Gdańsk 2003
Mikrokontrolery i Mikrosystemy – Dodatek A
2
Spis treści
1. Mikrokontrolery oparte na rdzeniu 80C51/52................................................................ 5
1.1. Mikrokontrolery AT89Cxx firmy Atmel ..................................................................... 5
1.2. Mikrokontrolery AT89S53 i AT89S8252 programowalne w systemie (ISP) ............. 18
1.3. Mikrokontrolery serii ADuC8xx firmy Analog Devices ............................................. 20
2. Mikrokontrolery rodziny AVR firmy Atmel .................................................................. 23
2.1. Programowanie równoległe ......................................................................................... 23
2.2. Szeregowe przesyłanie danych .................................................................................... 26
2.3. Środowisko programistyczne AVR Studio firmy Atmel ............................................. 26
2.4. Programatory dla mikrokontrolerów rodziny AVR ..................................................... 29
3. Mikrokontrolery PIC16F87X firmy Microchip.............................................................. 31
3.1. Środowisko IDE MPLAB firmy Microchip ................................................................ 33
3.2. Programatory dla mikrokontrolerów PIC16F87X ....................................................... 36
3.1. Samo-programowanie pamięci FLASH....................................................................... 38
Mikrokontrolery i Mikrosystemy – Dodatek A
3
1. Mikrokontrolery oparte na rdzeniu 80C51/52
1.1. Mikrokontrolery AT89Cxx firmy Atmel
Dla tej rodziny mikrokontrolerów używa się środowisk IDE typowych dla standardowych
mikrokontrolerów 80C51/52. Niezliczona ilość zarówno asemblerów, kompilatorów języka C,
symulatorów programowych, debugerów jest dostępna w Internecie. Są one dostarczane
między innymi np. przez firmy: Keil Software, Ceibo, Avocet Systems, ChipTools, IAR,
Tasking, Raisonance.
Do rodziny AT89Cxx należą między innymi mikrokontrolery: AT89C1051, AT89C2051,
AT89C4051, AT89C51, AT89C52.
Poniżej pokazano schemat mikrokontrolera AT89C2051 z opisem sygnałów używanych w
trybie programowania (rys. 1).
Rys. 1. Opis sygnałów używanych w trybie programowania mikrokontrolera AT89C2051
Programowanie mikrokontrolerów serii AT89Cx051 opiera się na algorytmie
równoległego programowania AT051. Charakterystyka algorytmu:
• U5=5V tylko, Vpp=5V lub Vpp=12V.
• Adres dla odczytu sygnatury to: 0, 1, 2.
• Algorytm zawiera:
- operację odczytu pamięci,
- operację kasowania układu,
- operację programowania i weryfikacji pamięci,
- programowania bitów security, dwa bity tylko programowanie - bez odczytu.
Na rys. 2 pokazano konfigurację połączeń przy użyciu algorytmu AT051. Z rys. widać, iż
dane programujące pamięć FLASH ładowane i, podczas weryfikacji lub odczytu,
odczytywane są za pośrednictwem portu P1. Sygnały sterujące podłączone są do portu P3.
Mikrokontrolery i Mikrosystemy – Dodatek A
4
Rys. 2. Konfiguracja połączeń przy użyciu algorytmu AT051
Sygnały V6, V5, V4, V2 (linie 7, 5, 4 i 3 portu P3) służą do wyboru trybu pracy, co pokazano
w tabeli 1. Linia PROG (P3.2) powoduje zatrzaśniecie (wprowadzenie/wyprowadzenie)
danych na porcie P1. Impuls na linii X0 inkrementuje adres wskazujący na komórkę pamięci
FLASH. Gotowość mikrokontrolera do przyjęcia kolejnego rozkazu jest wskazywana przez
linię BUSY (P3.1).
Tabela 1. Tryby pracy mikrokontrolera dla algorytmu AT051
Na rys. 3 pokazano schemat ogólny algorytmu. Składa się on z trzech cykli START,
PROCEDURY i KONIEC. W pierwszym cyklu następuje odczyt sygnatury z linii V6, V5,
V4, V2 i wejście w dany tryb pracy (tabela 1). Następnie (cykl PROCEDURY) wykonywana
jest właściwa operacja, po czym, o ile chcemy skończyć programować, następuje zakończenie
programowania mikrokontrolera.
Mikrokontrolery i Mikrosystemy – Dodatek A
5
Rys. 3. Schemat ogólny algorytmu AT051
W konfiguracji programowania (rys. 4), układ scalony zawiera w sobie własny licznik
adresowy. Impuls do inkrementacji tego licznika jest na zewnątrz, na pinie 5 = XTAL1.
Pamięć programowa posiada orientację adresowania bajtowego.
Rys. 4. Programowanie pamięci z weryfikacją
Te mikroprocesory zawierają wewnętrzny licznik adresowy. Zerowanie licznika wykonuje
się: RST := 0 a następnie RST := 1. Zerowanie następuje w czasie podnoszenia się ze stanu
"L" do stanu "H" na RST. ("0" do "1", - logiczny signał <= 5V).
Na rys. 5 pokazano procedurę kasowania pamięci programu.
Mikrokontrolery i Mikrosystemy – Dodatek A
6
Rys. 5. Procedura kasowania pamięci programu
Na kolejnych rysunkach przedstawiono pozostałe operacje wykonywane przez algorytm
AT051.
Rys. 6. Procedura odczytu danych z pamięci FLASH
Mikrokontrolery i Mikrosystemy – Dodatek A
Rys. 7. Procedura odczytu sygnatury
Rys. 8. Programowanie bitu LB1 (dalsze programowanie jest zablokowane, odczyt pamięci
jest możliwy)
7
Mikrokontrolery i Mikrosystemy – Dodatek A
8
Rys. 9. Programowanie bitów LB2 i LB1 (dalsze programowanie jak i odczyt z pamięci
są zablokowane)
Dzięki udostępnieniu przez firmę Atmel pełnej dokumentacji dotyczącej programowania
mikrokontrolerów powstało wiele, w tym darmowych, programatorów jak i programów je
obsługujących. Poniżej pokazano schemat ideowy jednego z najprostszych programatorów
obsługiwanych między innymi przez program BlowIT lub pip04.exe (pod DOS).
Rys. 10. Schemat prostego programatora dla mikrokontrolerów AT89Cx051
Mikrokontrolery i Mikrosystemy – Dodatek A
9
Innym rozwiązaniem może być programator pokazany na rys. 11.
Rys. 10. Schemat prostego programatora dla mikrokontrolerów AT89Cx051 bez
automatycznej obsługi sygnału RST
Programator ten obsługiwany jest przez program, którego ekran pokazano na rys. 12.
Rys. 12. Ekran przykładowego programu do programowania mikrokontrolerów AT89Cx051
Mikrokontrolery i Mikrosystemy – Dodatek A
10
Dla mikrokontrolerów serii AT89C51/52 (PDIP 40) korzysta się z równoległego
algorytmu programowania AT51, podobnego do poprzedniego.
Charakterystyka algorytmu:
• U5=5V,
• Vpp=5V lub Vpp=12V.
• Adres dla odczytu sygnatury to: 30h, 31h, 32h (48,49,50 dziesiętnie.).
• Algorytm zawiera:
- operację odczytu pamięci,
- operację kasowania układu,
- operację programowania i weryfikacji pamięci,
- programowania bitów security, trzy bity tylko programowanie - bez odczytu.
Sygnał PROG ma tylko jeden impuls = 20 µs. Sygnały: A15, A14, A13, ... , A0 są
przeznaczone dla wartości adresu dla pamięci programowej. Sygnały: D7, D6, ... , D0 to
wartości bajtów wejście / wyjście. Inne sygnały niosą sobą dyrektywy sterujące operacją (rys.
13). Algorytm przewiduje adresowanie zorientowane bajtowo.
Rys. 13. Konfiguracja połączeń dla programowania za pomocą algorytmu AT51
Mikrokontrolery i Mikrosystemy – Dodatek A
11
Tabela 2. Tryby pracy mikrokontrolera w trakcie programowania
Na kolejnym rysunku pokazano schemat ogólny algorytmu AT51. Analogicznie do
poprzedniego algorytmu składa się on z trzech cykli: START, PROCEDURY i KONIEC.
Rys. 14. Schemat ogólny algorytmu AT51
Kolejne rysunki przedstawiają przebiegi dla poszczególnych rozkazów.
Mikrokontrolery i Mikrosystemy – Dodatek A
Rys. 15. Zapis bajta oraz jego odczyt w celu weryfikacji programowania
Rys. 16. Odczyt bajtów z pamięci
12
Mikrokontrolery i Mikrosystemy – Dodatek A
13
Rys. 17. Programowanie tylko bitu LB1 (dalsze programowanie pamięci i realizacja MOVC z
zewnętrznej pamięci dla odczytu wewnętrznej pamięci zablokowane, ale odczyt pamięci jest
możliwy)
Rys. 18. Programowanie bitów LB2 i LB1 (dalsze programowanie pamięci i realizacja
MOVC z zewnętrznej pamięci dla odczytu wewnętrznej pamięci zablokowane oraz odczyt
pamięci zablokowany)
Mikrokontrolery i Mikrosystemy – Dodatek A
Rys. 19. Programowanie bitów LB3, LB2 i LB1 (dalsze programowanie pamięci, odczyt
pamięci i wykonanie zewnętrznego programu są zablokowane)
Rys. 20. Kasowanie pamięci
14
Mikrokontrolery i Mikrosystemy – Dodatek A
15
Rys. 21. Odczyt sygnatury
Bazując na przedstawionym algorytmie opracowano wiele dostępnych w Internecie
schematów programatorów. Poniżej przedstawiono jeden z nich (rys. 22).
Rys. 22. Schemat przykładowego programatora dla mikrokontrolerów serii AT89Cxx
Mikrokontrolery i Mikrosystemy – Dodatek A
16
1.2. Mikrokontrolery AT89S53 i AT89S8252 programowalne w systemie
(ISP)
Mikrokontrolery te można programować za pomocą interfejsu SPI w systemie docelowym
(ISP). Dzięki temu w bardzo prosty sposób można zrealizować programatory jak i
oprogramowanie do nich.
Oczywiście, mikrokontrolery te można programować w trybie równoległym, tak jak było
to opisane dla mikrokontrolerów AT89Cxx.
Na rys. 23 pokazano schemat mikrokontrolera AT89S53 w trybie programowania
szeregowego.
Rys. 23. Sygnały w trybie programowania szeregowego
Jak widać do programowania wykorzystywany jest interfejs SPI (linie MOSI, MISO, SCK)
oraz sygnał RST, który wraz z komendą umożliwiającą programowanie uprowadza
mikrokontroler w tryb programowania. W tym trybie mikrokontroler musi być zasilany
sygnałem zegarowym podłączonym do linii XTAL1 o częstotliwości od 3 do 24MHz, o ile
nie jest do niego podłączony oscylator kwarcowy. Sygnał zegarowy SCK taktujący transmisję
musi być przynajmniej 40 razy wolniejszy niż częstotliwość na XTAL1.
Aby zaprogramować lub zweryfikować układ należy wykonać następującą sekwencję:
1. Włączyć napięcie zasilania i na linię RST podać stan „H”.
2. Umożliwić szeregowe programowanie przez wysłanie komendy Programing Enable za
pomocą interfejsu SPI.
3. Wysłać odpowiednią komendę programującą i odczekać czas potrzebny na
zaprogramowanie lub komendę związaną z odczytem (lista wszystkich komend zawarta
jest w tabeli 3).
4. Na zakończenie programowania lub weryfikacji układu ustawić sygnał RST w stan niski,
aby przejść w normalny tryb pracy.
Jak wspomniano dane do i z mikrokontrolera są przesyłane za pomocą interfejsu SPI, dla
którego przebiegi czasowe podano na rys. 24.
Mikrokontrolery i Mikrosystemy – Dodatek A
17
Tabela 3. Lista instrukcji w trybie programowania mikrokontrolera AT89S53
Rys. 24.Przebiegi czasowe dla interfejsu SPI
Dzięki przedstawionym właściwościom mikrokontrolera AT89S53 można zrealizować
bardzo proste programatory. Przykład takiego programatora, obsługiwanego przez popularny
program PonyProg (na licencji freeware, do ściągnięcia z Internetu) pokazano na rys. 25.
Rys. 25. Uproszczona wersja programatora PonyProg dla mikrokontrolera AT89S53
Mikrokontrolery i Mikrosystemy – Dodatek A
18
1.3. Mikrokontrolery serii ADuC8xx firmy Analog Devices
Firma Analog Devices produkuje mikrokontrolery serii ADuC8xx oparte na rdzeniu
80C52. Są one wyposażane między innymi w bogaty zestaw przetworników A/C i C/A
począwszy od rozdzielczości 12-bitowej aż do 24-bitowej. Posiadają wbudowany
programowy ładujący (loader) pozwalający na programowanie mikrokontrolera przez
interfejs szeregowy UART przy prędkości 9600 bodów.
Firma bezpłatnie dostarcza zintegrowane środowisko programistyczne IDE Devices
MicroConventer QuickStart Development System. Składa się ono z następujących
programów:
• WSD (Windows Srial Downloader),
• ADSIM (Analog Devices MicroConventer Simulator),
• ASM51 (Cross Asambler),
• WASP (Windows Analysis Software Package),
• DeBugV2 (debugger).
Program WSD odpowiada za załadowanie pamięci programu poprzez interfejs RS232 do
uruchamianego mikrokontrolera. W programie możemy wyróżnić dwa standardowe okna. W
pierwszym, podstawowym oknie WSD opisana jest aktualnie wykonywana operacja. Program
umożliwia wybór:
• okna konfiguracji,
• resetu programatora,
• załadowania programu,
• uruchomienia załadowanego programu po jego załadowaniu do pamięci Flash.
Rys.27. Podstawowe okno Windows Serial Downloader (WDS).
Drugie okno konfiguracji, służy do zmiany konfiguracji parametrów pracy programu WDS.
Mikrokontrolery i Mikrosystemy – Dodatek A
19
Rys. 28. Okno konfiguracji Windows Srial Downloader(WDS).
ADSIM jest programowym symulatororem mikrokontrolerów rodziny ADuC. Symulator
ADSIM jest aplikacją działającą w środowisku Windows pozwalającą w pełni symulować
wszystkie peryferia mikrokontrolera z uwzględnieniem przetworników A/D i D/C. Posiada
łatwy w użyciu i intuicyjny interfejs. Łączy wiele standardowych funkcji śledzenia programu
miedzy innymi:
• wielokrotny breackpoint,
• tryb pracy krokowej,
• zdolność do śledzenia wykonywanego kodu programu,
• ustawianie punktów kontrolnych.
Rys. 29. Przykładowe okno symulatora ADSIM.
Mikrokontrolery i Mikrosystemy – Dodatek A
20
Programowanie mikrokontrolera następuje poprzez port szeregowy UART. W tym trybie
programowania mikrokontroler nie musi zostać demontowany z uruchomianego urządzenia.
Za obsługę tego typu programowania odpowiedzialny jest specjalny program znajdujący się w
mikrokontrolerze - LOADER. Aby zaprogramować mikrokontroler w trybie szeregowym
należy wejście PSEN mikrokontrolera zewrzeć do masy układu poprzez rezystor o wartości 1
kΩ, wyzerować (zresetować) mikrokontroler i załadować program z komputera poprzez
interfejs RS232.
Rys.30. Zalecany sposób programowania mikrokontrolera ADuC812.
Rys. 31. Schemat ideowy interfejsu RS232.
•
•
•
•
•
•
•
Np. w celu zaprogramowania mikrokontrolera ADuC812 należy wykonać następujące
kroki:
na liniach portu P0 nie powinno być poziomów niskich,
sygnały RX i TX powinny być podłączone do interfejsu UART mikrokontrolera,
na linię EA mikrokontrolera podać stan niski,
zewrzeć linię PSEN przez rezystor 1kΩ do masy (poziom zero na tym pinie w trakcie
resetu wprowadza mikrokontroler w tryb programowania),
zresetować mikrokontroler,
uruchomić program wsd.exe. Powinien pojawić się komunikat w okienku programu
wsd.exe informujący, iż nawiązano połączenie z mikrokontrolerem ADuC812,
załadować plik *.hex do pamięci FLASH mikrokontrolera,
Mikrokontrolery i Mikrosystemy – Dodatek A
•
•
•
21
po poprawnym załadowaniu pliku, co zostaje potwierdzone odpowiednim komunikatem,
na linii EA ustawić stan wysoki – mikrokontroler wykonuje instrukcje z wewnętrznej
pamięci programu,
nacisnąć klawisz RESET,
program wsd.exe można już zamknąć,
Mikrokontrolery i Mikrosystemy – Dodatek A
22
2. Mikrokontrolery rodziny AVR firmy Atmel
Sposób programowania i uruchamiania rodziny mikrokontrolerów AVR zostanie
przedstawiony na przykładzie mikrokontrolera AT90S8515.
Mikrokontroler AT90S8515 oferuje 8K bajtów reprogramowalnej w systemie pamięci
programu typu Flash oraz 512 bajtów pamięci danych typu EEPROM.
AT90S8515 są dostarczane przez producenta z wewnętrzną pamięcią programu typu Flash
oraz tablicami pamięci danych typu EEPROM w stanie wykasowania (zawartość = $FF)
gotowymi do zaprogramowania. Układ jest przystosowany do wysokonapięciowego (12V)
równoległego trybu programowania oraz niskonapięciowego szeregowego trybu
programowania. Napięcie +12V jest używane jedynie jako sygnał odblokowania trybu
programowania układu i poza tym nie spełnia żadnej innej znaczącej funkcji. Tryb
programowania szeregowego układu jest bardzo dogodną formą przesyłania informacji do
pamięci programu i danych układów AT90S8515 zagnieżdżonych wewnątrz systemu
użytkownika.
Tablice pamięci programu i danych wewnątrz AT90S4414/8515 są programowane bajt po
bajcie w obydwu z trybów programowania. Dla pamięci EEPROM w trybie programowania
szeregowego cykl auto-kasowania jest zapewniony wewnątrz operacji samotaktującego
zapisu. Podczas programowania napięcia zasilające muszą być dla programowania
szeregowego od 2,7 do 6V, a dla równoległego od 4,5 do 5,5V.
2.1. Programowanie równoległe.
Końcówki XA1/XA0 wyznaczają procedurę działania w przypadku, gdy na wejściu
XTAL1 pojawi się impuls dodatni. Tabela stanów pokazana jest w tabeli 4.
Zmiana wartości sygnałów WR lub OE służy do wprowadzania komend programujących i
weryfikujących (tabela 5). Listę komend podano w tabeli 6.
Tabela 4. Tabela stanów dla linii XA1 i XA0
Tabela 5. Funkcje sygnałów w trybie programowania
Mikrokontrolery i Mikrosystemy – Dodatek A
23
Tabela 6. Lista komend w trybie programowania
Rys. 32. Schemat połączeń mikrokontrolera AT90S8515 w trybie programowania
równoległego
Aby wejść w tryb programowania równoległego należy postępować zgodnie z
algorytmem:
1. podaj napięcie zasilające,
2. ustaw końcówki RESET i BS w stan „0” i odczekaj przynajmniej 100ns,
3. podaj na końcówkę RESET napięcie 11.5-12.5V. Jakakolwiek aktywność logiczna na
końcówce BS w przeciągu 100ns od podania +12V na RESET będzie powodowała błąd
przy wchodzeniu w tryb programowania.
Następnie można wykonać jedną z komend. Dla przykładu wykonanie komendy Chip
Erase – kasowanie układu - spowoduje wykasowanie pamięci Flash i EEPROM oraz bitów
blokady. Żaden z bitów blokady nie zostanie wcześniej skasowany dopóki pamięci Flash i
EEPROM nie zostaną wykasowane do końca. Bity zabezpieczenia pozostaną nienaruszone.
Komenda Chip Erase musi zostać wykonana przed ponownym programowaniem pamięci
Flash lub EEPROM.
Algorytm ładowania komendy „Chip Erase”:
1. ustaw XA1, XA0 w stan „10”. Odblokowuje to ładowanie komend,
2. ustaw BS=0,
Mikrokontrolery i Mikrosystemy – Dodatek A
24
3. ustaw DATA na „1000 0000”. To jest komenda Chip Erase,
4. podaj na XTAL impuls dodatni. Zostanie załadowana komenda,
5. podaj na WR w przeciągu czasu tWLWH_CE impuls ujemny by wykonać komendę Chip
Erase. Komenda Chip Erase nie generuje żadnej aktywności na końcówce RDY / BSY .
Programowanie bitów blokady pamięci danych i programu.
Mikrokontroler AT90S8515 oferuje dwa bity zabezpieczenia, które mogą pozostać nie
zaprogramowane (wtedy mają stan ‘1’) lub też zaprogramowane (stan ‘0’). Znaczenie bitów
obrazuje tabela 7. Bity blokady (Lock Bits) mogą być skasowane jedynie komendą kasowania
całego układu (Chip Erase).
Tabela 7. Tryby blokady
Bity zabezpieczenia.
Mikrokontroler AT90S8515 posiada dwa bity zabezpieczenia: SPIEN i FSTRT.
• kiedy bit SPIEN jest zaprogramowany (ustawiony na ‘0’) dozwolone są operacje
szeregowego programowania oraz kopiowania danych (odczytu zawartości układu).
Domyślnie zaprogramowany (‘0’),
• kiedy bit FSTRT jest zaprogramowany (ustawiony na ‘0’) wybrana zostanie opcja
krótkiego czasu startu (short start-up time). Domyślnie nie jest zaprogramowany (‘1’)
jednakże mikrokontrolery z bitem FSTRT zaprogramowanym na ‘0’ mogą być
dostarczane na zamówienie.
Do bitów zabezpieczenia nie ma dostępu w trybie szeregowego trybu programowania
(Serial Programming Mode). Bity zabezpieczenia pozostają nienaruszone w przypadku
wykonania komendy Chip Erase.
Bity sygnatury – cyfrowego podpisu.
Wszystkie mikrokontrolery firmy Atmel posiadają trzybajtowy kod sygnatury, który
identyfikuje urządzenie. Kod ten może zostać odczytany zarówno w szeregowym jak i
równoległym trybie odczytu. Trzy bajty sygnatury są ulokowane w oddzielnej przestrzeni
adresowej.
Dla układu AT90S8515(1) :
1. $000: $1E (wskazuje, że układ wyprodukowany został przez firmę Atmel)
2. $001: $93 (wskazuje na 8KB rozmiar pamięci Flash)
3. $002: $01 (wskazuje na układ AT90S8515, gdy bajt $001 sygnatury wynosi $93)
Mikrokontrolery i Mikrosystemy – Dodatek A
25
(1)
kiedy obydwa bity blokady są zaprogramowane (tryb 3 blokady) bity sygnatury nie mogą
zostać odczytane w trybie szeregowym. Odczyt tych bitów w trybie szeregowym zwróci
wartości $00, $01, $02.
2.2. Szeregowe przesyłanie danych.
Obydwa obszary pamięci programu i danych mogą zostać zaprogramowane używając
szyny SPI w momencie podciągnięcia końcówki RESET do masy (GND). Interfejs
szeregowy składa się z końcówek SCK, MOSI (wejście szeregowe) i MISO (wyjście
szeregowe) (rys. 33). Po ustawieniu RESET w stan niski najpierw należy wykonać instrukcję
Programming Enable (programowanie dozwolone) zanim zostanie wykonana jakakolwiek z
instrukcji programowania / kasowania.
Rys. 33. Schemat połączeń mikrokontrolera AT90S8515 w trybie programowania
szeregowego
Dla pamięci EEPROM cykl autokasowania jest zapewniony w środku samotaktującej się
instrukcji zapisu i nie ma potrzeby wykonywania instrukcji Chip Erase. Instrukcja Chip Erase
zamienia każdą z komórek pamięci programu (Flash) i EEPROM na wartość $FF.
Pamięć programu i EEPROM posiadają odrębne przestrzenie adresowe:
• $0000 do $0FFF na pamięć programu.
• $0000 do $01FF na pamięć EEPROM.
Zegar zewnętrzny taktujący mikrokontroler podłączany jest do końcówki XTAL1. Gdy
używamy generatora kwarcowego umieszcza się go między wyprowadzenia XTAL1 i
XTAL2.
Minimalny okres stanów wysokiego i niskiego dla wejścia zegara szeregowego (SCK) jest
zdefiniowany następująco:
Stan niski
! 2 * XTAL1 cykli zegara.
Stan wysoki ! 2 * XTAL1 cykli zegara.
2.3. Środowisko programistyczne AVR Studio firmy Atmel
Firma Atmel udostępnia na stronach www.atmel.com nieodpłatnie aplikacje AVR Studio
3.5 i 4 ułatwiające pisanie, kompilowanie programów dla mikrokontrolerów rodziny AVR.
Pakiet zawiera asembler, ale umożliwia również podłączenie zewnętrznego kompilatora
języka C.
Mikrokontrolery i Mikrosystemy – Dodatek A
1.
2.
3.
4.
5.
6.
26
W skład AVR Studio 3.5 wchodzą następujące bloki:
menager projektów,
edytor tekstowy,
kompilator asemblera,
symulator procesorów,
interfejsy obsługi układów uruchomieniowych,
oprogramowanie programatora ISP.
Menager projektów.
Ułatwia zarządzanie istniejącymi projektami i tworzenie nowych. Nadzoruje pracę edytora
tekstowego, kompilatora (przechwytuje jego komunikaty i wysyła do niego polecenia).
Rys.34.Przykładowe okno managera projektu
Kompilator.
Po napisaniu kodu programu, w celu skompilowania, wciskamy klawisz F7, który
uruchamia kompilator. Wynikiem jego działania jest okienko Project Output. Menager
projektów automatycznie wybierze odpowiedni kompilator, w zależności od tego, czy projekt
pisany jest w C, czy w asemblerze. W wyniku kompilacji pokaże się okno, jak na rysunku 35.
Mikrokontrolery i Mikrosystemy – Dodatek A
27
Rys.35.Okno kompilatora.
Prawidłowo skompilowany plik można za pomocą programatora wgrać bezpośrednio do
mikrokontrolera, wykorzystując plik w formacie HEX, wygenerowany przez kompilator (rys.
36).
Rys.36.Okno generacji pliku.
Symulator programowy
Napisany i skompilowany wcześniej kod można przetestować za pomocą programowego
symulatora procesorów. Uruchomienie symulatora odbywa się poprzez wybranie polecenia
Build and Run (rys. 37).
Mikrokontrolery i Mikrosystemy – Dodatek A
28
Rys.37.Okno podglądu rejestrów głównych, układów we/wy procesora.
W symulatorze dostępnych jest wiele opcji ustawienia pułapek programowych,
zatrzymywania warunkowego programu itd. oraz możliwość bezpośredniej edycji wartości w
poszczególnych rejestrach, pinach we/wy, komórkach pamięci i rejestrach procesora, do
której to edycji uzyskujemy dostęp przez dwukrotne kliknięcie na danym obiekcie. Dzięki
temu uzyskuje się możliwość bezpośredniego wpływania (online) na sposób wykonywania
danego programu. Można symulować zaistnienie określonych warunków zewnętrznych
(wywołanie przerwania itp).
Interfejsy obsługi układów uruchomieniowych.
Oprócz symulatora można wykorzstać również możliwość komunikacji między AVR
Studio a układami uruchomieniowymi produkcji Atmel, dostępnej w wersji 3.55, na przykład
komunikacji z modułami STK500, ICE10, ICE200 (Tools->...; rys.3.17).
Oprogramowanie programatora ISP.
AVR Studio posiada również własne oprogramowanie sterujące programatorem ISP.
Jednakże wymaga ono programatora firmy Atmel lub zgodnego z nim. Możliwe jest jednak
podstawienie zamiast oryginalnego oprogramowania programatora innego programu i
wykorzystanie innego programatora. Aby z poziomu AVR Studio wywołać oprogramowanie
programatora wciskamy ALT+F9 lub z poziomu menu wybieramy opcję Tools i AVR Prog.
2.4. Programatory dla mikrokontrolerów rodziny AVR
W Internecie dostępnych jest wiele programatorów i oprogramowania do nich. Poniżej
przedstawiono kilka wybranych programatorów.
Mikrokontrolery i Mikrosystemy – Dodatek A
29
Rys. 38. Schemat ideowy programatora obsługiwanego przez oprogramowanie Atmel AVR
ISP firmy Kanda
Na rys. 38 pokazano programator obsługiwany przez oprogramowanie Atmel AVR ISP
firmy Kanda. Jest to programator zrealizowany zgodnie ze standardem STK200.
Programator należy podłączyć do złącza LPT komputera, kabel zakończony złączem
IDC10 do złącza ISP modułu uruchomieniowego. Zasilanie programatora (+5V) pobierane
jest z płytki laboratoryjnej (PIN 2).
Firma Atmel wprowadziła wiele standardów programatorów, między innymi STK200,
STK300 i STK500.
Rys. 39. Schemat ideowy programatora obsługiwanego przez oprogramowanie PonyProg
Kolejny programator (rys. 39) podłączany jest do portu szeregowego komputera PC. Jako
stabilizator U1 może być wyłącznie użyty układ LM2936Z-5 firmy National Semiconductors
lub jego odpowiednik. Programator jest obsługiwany przez popularny program PonyProg.
Mikrokontrolery i Mikrosystemy – Dodatek A
30
3. Mikrokontrolery PIC16F87X firmy Microchip
Mikrokontrolery PIC16F87X mogą być programowane w finalnym układzie (w
mikrosystemie elektronicznym). Jest to realizowane za pomocą dwóch linii z zegarem i
danymi oraz trzech: zasilanie, masa i napięcie programujące. Zatem użytkownik może
zbudować urządzenie z zamontowanym nie zaprogramowanym mikrokontrolerem, poczym
go wielokrotnie programować.
Tryb programowania mikrokontrolera PIC16F87X pozwala na wpisanie do pamięci
programu danych oraz programu użytkownika, danych pod specjalne lokacje typu ID i do
rejestru konfiguracyjnego. Istnieją dwie metody programowania mikrokontrolera:
• normalne programowanie – Algorytm 1 (dla napięć zasilania od 2,2V do 5,5V i napięcia
programowania VPP wynoszącego 13V ±0,5V),
• programowanie niskonapięciowe – Algorytm 2 (dla napięć zasilania od 4,5V do 5,5V),
nazywane w skrócie LVP (Low Voltage ICSP, gdzie ICSP – In-Circuit Serial
Programmable).
W trybie programowania wykorzystuje się trzy linie portu B: RB3 (PGM) linia wejściowa
wykorzystywana w trybie LVP, RB6 (CLOCK) wejście zegara, RB7 (DATA)
wejście/wyjście danych oraz pin resetu MCLR służący do wyboru trybu programowania, VDD
zasilanie i VSS masa.
W tym trybie obszar programu rozszerza się z 8K (0000h do 1FFFh) do 16K (0000h do
3FFFh), przy czym pierwsza część służy do trzymania kodu programu i stałych, i tylko ona
jest dostępna w normalnym trybie pracy. Druga część obszaru zwana pamięcią
konfiguracyjną zawiera cztery rejestry indentyfikacyjne ID (adresy od 2000h do 2003h i
2006h) oraz rejestr konfiguracyjny (adres 2007h). Pamięć EEPROM jest mapowana od adresu
2100h, zatem zawartość, która ma się w niej znaleźć może być wprowadzona w trakcie
programowania z pliku HEX.
a)
b)
Rys. 40. Sposoby wejścia w tryb programowania: a) tryb normalny, b) tryb niskonapięciowy
Jak pokazano na rys. 40a w normalny tryb programowania można wprowadzić
mikrokontroler, jeżeli linie RB6 i RB7 są trzymane w stanie niskim podczas gdy napięcie na
linii MCLR rośnie z VIL (0V) do VIHH (około 13V). W tym przypadku nie jest
wykorzystywany pin RB3.
Natomiast tryb programowania LVP (rys. 40b) uzyskuje się przez podanie na RB3 sygnału
narastającego podczas gdy MCLR=0, a następnie zwiększenie na linii MCLR napięcia z VIL
do VIH (VDD równe około 5V). Linie RB6 i RB7 również muszą być w stanie niskim.
Mikrokontrolery i Mikrosystemy – Dodatek A
31
W obu przypadkach pozostałe linie mikrokontrolera są w stanie resetu, tzn. są liniami
wejściowymi o wysokiej impedancji. Ponadto w trybie programowania linie RB6 i RB7 są
wejściami Schmitta.
Po wprowadzeniu w ten tryb licznik rozkazów PC jest ustawiony na 0. Rozkaz
inkrementacji (increment address) będzie zatem zwiększał licznik o jeden. Aby przejść do
pamięci konfiguracyjnej należy wykonać instrukcję ładowania konfiguracji (load
configuration), która ustawia licznik PC na 2000h. Listę komend zestawiono w tabeli 8.
Tabela 8. Zestawienie komend obsługi trybu programowania mk PIC16F873
Pin RB6 służy jako linia zegarowa, natomiast na linii RB7 szeregowo wprowadza się
rozkaz oraz dane do zapisu lub wyprowadza się dany w przypadku odczytu. Dane na linii
RB7 są wprowadzane na narastające zbocze sygnału zegarowego, a próbkowane opadającym
zboczem. Aby wprowadzić komendę potrzeba sześć impulsów zegarowych, po których jak
mają być przesyłane dane powinno być opóźnienie minimum 1µs. Następnie można
wprowadzić dane (14 bitów). Zaczynają się one od bitu START („0”) i kończą bitem STOP
(„0”), co łącznie daje 16 bitów do przesłania. Rozkazy oraz dane są przesyłane od
najmłodszego do najstarszego bitu. Na rys. 41 pokazano przykładowy diagram czasowy dla
rozkazu Load Configuration.
Rys. 41. Diagram czasowy rozkazu Load Configuration
Zatem programowanie mk polega na wydawaniu odpowiednich rozkazów zgodnie z
algorytmami zawartymi w dokumentacji mk. Np. aby wykasować pamięć programu należy
wykonać kroki:
1. Wykonać komendę Load Data for Program Memory z daną 3FFFh,
2. Wykonać komendę Bulk Erase Setup1,
3. Wykonać komendę Bulk Erase Setup2,
4. Wykonać komendę Begin Erase Programming Cycle,
Mikrokontrolery i Mikrosystemy – Dodatek A
32
5. Odczekać 8ms,
6. Wykonać komendę Bulk Erase Setup1,
7. Wykonać komendę Bulk Erase Setup2.
3.1. Środowisko IDE MPLAB firmy Microchip
MPLAB jest zintegrowanym środowiskiem programistycznym (Integrated Development
Environment) umożliwiającym pisanie, edytowanie, kompilowanie i symulowanie działań
programów dla mikrokontrolerów PIC. Jeśli komputer, na którym zainstalowany jest pakiet
MPLAB wyposażony jest dodatkowo w odpowiedni sprzęt, możliwe jest programowanie
mikrokontrolerów (np.: programator PICSTART PLUS) lub emulowanie ich działania (np.:
MPLAB-ICD) z poziomu programu. Dostępne są również inne programatory i emulatory.
Pakiet PMLAB rozprowadzany bezpłatnie przez firmę Microchip. Najnowszą wersję
pakietu można ściągnąć z serwera internetowego firmy: www.microchip.com.
W skład pakietu wchodzą:
- MPLAB Project Manager – menadżer projektu, który umożliwia zarządzanie plikami z
jakich składa się projekt,
- MPLAB SIM Software Simulator – symulator programowy, umożliwiający śledzenie
działania programu, umożliwia korzystanie z pułapek programowych, podglądanie
zawartości zmiennych, modyfikowanie stanów linii wejścia / wyjścia,
- MPLAB Editor – edytor tekstowy,
- MPASM Universal Macro Assembler – asembler, który umożliwia między innymi
korzystanie z makr, kompilację warunkową,
- MPLINK Linker – program, który pozwala na łącznie wielu modułów relokowalnych,
tworzonych za pomocą asemblera lub kompilatora C w jednym pliku z danymi dla
programatora, emulatora, symulatora,
- MPLIB Librarian – program, który umożliwia tworzenie bibliotek z funkcjami do
późniejszego wykorzystania w projektach.
Wygodną formą przechowywania i archiwizacji wyników pracy związanych z danym
zadaniem jest tworzenie „projektów”. Plikiem głównym jest wówczas plik z rozszerzeniem
.pjt przechowujący informacje o stanie realizacji zadnia w momencie zamykania projektu lub
całego programu MPLAB).
Rys. 42. Okienko managera projektów
W prosty sposób można skonfigurować kompilator. Służy do tego okno Node
Properites pokazane na rys. 43.
Mikrokontrolery i Mikrosystemy – Dodatek A
33
Rys. 43. Okienko Node Properites
W polu Language Tool jest wybierany rodzaj kompilatora. Pole Description umożliwia:
- określenie formatu pliku wyjściowego .hex – pole Hex Format (najczęściej używany jest
format INHX8M).
- włączanie lub wyłącznie generowania przez asembler pliku z listą błędów kompilacji,
listingu i pliku typu cross referece zawierającego informacje o wszystkich zdefiniowanych
w pliku źródłowym etykietach, tzn. w której linii została zdefiniowana i w których liniach
programu występuje,
- określenie poziomu generowania komunikatu o błędach i ostrzeżeniach ( warning level),
- włączenie lub wyłącznie rozróżniania małych i dużych liter (case sensitive),
- określenie domyślnego formatu stałych numerycznych (default radix),
- rozwijanie makrodefinicji (macro expansion),
- włącznie dostępu tabulacji (tab size).
Dodatkowe polecenia można wpisać w pole Additional Command Line Options. Podczas
pierwszego wywołania okna Node Properites MPLAB ustawia opcje domyślne, które w
większości przypadków nie muszą być zmieniane. Należy pamiętać, że gdy w obszarze Hex
Format nie zostanie wybrana żadna opcja to domyślnym będzie format INHX8M.
MPLAB wraz z modułem ICD umożliwia programowanie mikrokontrolera, sprzętowy
debuging i symulację programową. Jest to realizowane przez polecenia z menu Debug, które
zarządzają symulowaniem i uruchamianiem programów w środowisku MPLAB. Na rys. 44
przedstawiono okienko Debug z rozwiniętym menu Run.
Mikrokontrolery i Mikrosystemy – Dodatek A
34
Rys. 44. Okienko Debug.
-
-
Poniżej przedstawiono opispoleceń:
Run – Wykonanie polecenia Run (F9) wymaga aby istniał plik .hex. Wybranie tego
polecenia powoduje uruchomienie symulacji wykonania programu.
Reset – Polecenie Reset (F6) powoduje zerowanie kontrolera (odpowiada to podaniu 0 na
linię MCLR). Powoduje to wyzerowanie licznika rozkazów (0 do PC) i wpisanie do
rejestrów SFR wartości początkowych.
Step – Polecenie Step (F7) pozwala na krokową pracę symulatora. Jednocześnie
podświetlana jest instrukcja, która jest aktualnie wykonywana. Można także oglądać
zawartość rejestrów aktualizowanych po każdym kroku.
Step Over – Polecenie Step Over (F8) umożliwia przejście do kolejnej instrukcji bez
wizualizacji wchodzenia do podprogramu, które jednak są wykonywane. Po wykonaniu
symulacji wykonania podprogramu symulator zatrzymuje się w następnej, widocznej na
ekranie linii programu co sprawia wrażenie przeskoku.
Halt –Polecenie Halt (F5) – symuluje zatrzymanie pracy procesora.
Animate – Polecenie Animate (ALTF9) powoduje symulowanie wykonania programu z
aktualizacją zawartości rejestrów w otwartych okienkach po każdej linii programu.
Powoduje to spowolnienie przebiegu symulacji ale możemy śledzić zmiany w rejestrach
itp.
Obsługa programatora ICD jest realizowana za pomocą okienka pokazanego na rys. 45.
Rys. 45. Okienko do obsługi emulatora sprzętowego ICD
Natomiast opcje programowania ustawia się w oknie „ICD Options”, które należy
wywołać naciskając przycisk Options.. (rys. 46).
35
Mikrokontrolery i Mikrosystemy – Dodatek A
Rys. 46. Okno „ICD Options” z poprawnie ustawionymi opcjami
Aby zaprogramować mikrokontroler nacisnąć na przycisk Program (rys. 45). Poczekać aż
mikrokontroler zostanie zaprogramowany.
W celu uruchomienia programu zawartego w mikrokontrolerze należy uruchomić
debugger sprzętowy wykonując polecenie Debug > Run > Run (klawisz F9).
3.2. Programatory dla mikrokontrolerów PIC16F87X
Moduł ICD
Moduł ICD wykorzystuje możliwość debagowania w systemie (In-Circuit Debugging)
mikrokontrolera PIC16F87X oraz możliwość programowania w systemie (In-Circuit Serial
Programming (ICSP)). Funkcje te są realizowane przez oprogramowanie MPLAB IDE.
Moduł ICD pokazany na rys. 47 oferuje następujące możliwości:
• praca w czasie rzeczywistym oraz praca krokowa,
• pułapki programowe,
• In-Circuit debugging,
• programowanie w systemie,
• zakres napięć roboczych od 3V do 5,5V,
• możliwość korzystania z napięcia zasilającego urządzenie docelowe,
• częstotliwość pracy od 32kHZ do 20MHz,
• korzystanie z oprogramowanie MPLAB IDE,
• kompatybilność z oprogramowaniem Microsoft Windows®3.X,
WindowsNT® oraz Windows 2000®,
• interfejs RS-232.
Windows95/98,
Mikrokontrolery i Mikrosystemy – Dodatek A
36
Rys. 47. Schemat ideowy modułu ICD
Aby korzystać z trybu debagowania należy pamiętać o tym, że:
• Programowanie niskim napięciem (Low Voltage Programing) nie jest wykorzystywane
przez MPLAB ICD. W trybie debagowania należy wyłączyć możliwość programowania
niskim napięciem.
• Piny RB6 oraz RB7 zarezerwowane są do programowania i debagowania w systemie.
• Sześć lub siedem rejestrów ogólnego przeznaczenia zarezerwowanych jest dla trybu
debagowania (opis w tabeli poniżej).
• Początek obszaru pamięci programu (adres 0x0000) musi zawierać instrukcję NOP.
• Ostatnich 256 lub 288 słów w pamięci programu jest zarezerwowanych dla kodu debagera
(opis w tabeli poniżej).
• Jeden poziom stosu jest niedostępny.
MPLAB ICD używa następujących rejestrów i obszarów pamięci programu w
mikrokontrolerach PIC16F87X:
Mikrokontroler
Używane rejestry
Używany obszar pamięci programu
PIC16F870/871/872
PIC16F873/874
PIC16F876/877
0x70, 0x0BB-0x0BF 0x06E0-0x07FF
0x6D,0x16D,0x0EB- 0x0EE0-0x0FFF
0x0F0, 0x1EB-0x1F0
0x70, 0x1EB-0x1EF 0x1F00-0x1FFF
Programator JDM
Programator ten jest obsługiwany przez program ic-prog, który to obsługuje przynajmniej
14 różnych typów programatorów zarówno do programowania mikrokontrolerów PIC16,
PIC18 jak i mikrokontrolerów firmy Atmel.
Mikrokontrolery i Mikrosystemy – Dodatek A
Na rys. 48 i 49 pokazano przykładowe panele programu ic-prog.
Rys. 48. Podstawowy panel programu ic-prog
Rys. 48. Panel programu ic-prog w wyborem programowanego mikrokontrolera
Na rys. 50 pokazano jedną z wersji programatora JDM:
37
Mikrokontrolery i Mikrosystemy – Dodatek A
38
Rys. 50. Schemat programatora JDM
Ponadto istnieje wiele innych programatorów np. PICPROG czy JUPIC, do których
schematy ideowe oraz oprogramowanie dostępne jest w Internecie.
3.3. Samo-programowanie pamięci FLASH
Jedną z cech mikrokontrolerów PIC16F87X jest możliwość modyfikacji pamięci FLASH
(pamięci programu) przez sam program zapisany w mikrokontrolerze. Odbywa się to za
pomocą identycznego mechanizmu, jak mechanizm dostępu do pamięci EEPROM.
Pamięć danych typu EEPROM i pamięć programu typu FLASH może być zapisywana i
odczytywana podczas normalnej pracy mikrokontrolera. Operacja zapisu powoduje
wymazanie poprzednio wpisanej danej przed zapisem nowej. Zapisywanie do pamięci danych
EEPROM nie wpływa na operacje wykonywane przez układ. Zapisywanie do pamięci
programu powoduje wstrzymanie wykonywania instrukcji przez mikrokontroler dopóki
operacja zapisu nie dobiegnie końca. Pamięć programu nie jest dostępna podczas operacji
zapisu. Oscylator oraz układy peryferyjne pracują wtedy bez przerwy. Przerwania są
wykrywane i kolejkowane do czasu zakończenia operacji zapisu. Kiedy się ona zakończy
następna instrukcja w programie jest wykonywana i jeśli wystąpiło przerwanie oraz jest ono
aktywne wykonywany jest skok do wektora przerwań.
Zapis i odczyt z obu rodzajów pamięci wykonywany jest pośrednio przez rejestry specjalne
(SFR): EEDATA, EEDATH, EEADR, EEADRH, EECON1, EECON2.
Odczyt z pamięci programu FLASH jest możliwy w każdym momencie pracy
mikrokontrolera. Natomiast operacja zapisu powoduje zatrzymanie pracy mikrokontrolera, aż
do momentu jej zakończenia.
Rejestry EEADRH : EEADR przechowują 13-bitowy adres pamięci, do którego
użytkownik chce mieć dostęp. Rejestry EEDATH : EEDATA przechowują 14-bitową daną,
która ma być wpisana pod wskazany adres lub została spod tego adresu odczytana.
Wartości w rejestrach EEADRH : EEADR muszą pokrywać się z dostępnym obszarem
pamięci dla danego mikrokontrolera. Dla mikrokontrolera PIC16F873/874 wynosi on od
0000h do 1FFFh, a dla mikrokontrolera PIC16F876/877 od 0000h do 3FFFh. Adresy spoza
39
Mikrokontrolery i Mikrosystemy – Dodatek A
zakresu nie są automatycznie przenoszone na początek obszaru pamięci np.: nie ma
automatycznego przejścia między adresami 4000h i 0000h dla mikrokontrolera PIC16F877.
Rejestr EECON1 (Adres 18Ch)
R/W-x U-0
EEPGD bit 7
U-0
-
U-0
-
R/W-x
R/W-0
WRERR WREN
R/S-0
WR
R/S-0
RD
Bit 0
EEPGD: Bit wybory pamięci (danych lub programu):
1 = dostęp do pamięci programu,
0 = dostęp do pamięci danych (bit ten nie może być zmieniany podczas operacji
zapisu lub odczytu).
WRERR: Bit informujący o błędzie podczas zapisu:
1 = operacja zapisu została przerwana,
0 = operacja zapisu została ukończona.
WREN : Bit zezwalający na zapis do pamięci EEPROM:
1 = zezwolenie na zapis,
0 = zakaz zapisu do pamięci EEPROM.
WR
: Bit kontrolny zapisu:
1 = inicjowanie operacji zapisu(bit ten może być ustawiona programowo, a zerowany
może być tylko przez mikrokontroler),
0 = operacja zapisu do EEPROM została zakończona.
RD
: Bit kontrolny odczytu:
1 = inicjowanie operacji odczytu (bit ten jest zerowany przez mikrokontroler),
0 = odczyt nie jest inicjowany.
Rejestry EECON1 i EECON2
Rejestr EECON1 jest rejestrem kontrolnym. Rejestr EECON2 jest rejestrem, który jest
używany podczas operacji zapisu aby uniknąć przypadkowych błędów zapisu.
Istniej kilka bitów kontrolnych, które są używane podczas operacji zapisu i odczytu
pamięci danych EEPROM i pamięci programu FLASH.
Bit EEPGD decyduje o tym, do którego rodzaju pamięci (danych / programu) będzie
możliwy dostęp. Kiedy jest on równy zero EEPGD=0, wszystkie kolejne operacje będą
wykonywane na pamięci danych EEPROM. Ustawienie bitu EEPGD = 1 powoduje, że
kolejne operacje będą dotyczyć pamięci programu.
Operacje odczytu są kontrolowane prze bit RD, który inicjuje odczyt z określonej
lokalizacji. RD=1 oznacza, że dana z określonego obszaru będzie dostępna w rejestrach
danych. Bit ten jest automatycznie zerowany po zakończeniu operacji odczytu. Jeśli
odczytywana jest pamięć EEPROM, dane są dostępne w rejestrze EEDATA w następnym
cyklu po ustawieniu bitu RD na 1.
Operacje zapisu sterowane są przez dwa bity kontrolne WR i WREN oraz dwa bity
statusowe WRERR i EEIE. Bit WREN uaktywnia operacje zapisu. Kiedy WREN=0 zapis
będzie uniemożliwiony, dlatego WREN musi być ustawiony WREN=1 przez rozpoczęciem
zapisu. Bit WR inicjuje operacje zapisu. Po jej zakończeniu bit ten jest automatycznie
zerowany.
Flaga EEIF jest używana do określenia kiedy operacja zapisu dobiegła końca. Musi ona
być wyzerowana w programie przed ustawieniem bitu WR (WR=1).
Mikrokontrolery i Mikrosystemy – Dodatek A
40
Kiedy bity WREN i WR są ustawione – równe jeden, określony w rejestrze EEADR adres
pamięci danych EEPROM będzie wymazany po zapisie danej do rejestru EEDATA.
Działanie te są wykonywane równolegle z normalną pracą mikrokontrolera. Po zakończeniu
operacji zapisu flaga EEIF jest ustawiana (EEIF=1).
Natomiast po ustawieniu bitów WREN i WR dla pamięci programu, spowoduje
zatrzymanie wykonywania instrukcji przez mikrokontroler. Pożądany obszar pamięci
zapisany w rejestrach EEADRH : EEDATA jest wymazywany, a następnie dane z rejestrów
EEDATH : EEDATA są zapisywane. Po zakończeniu tych operacji flaga EEIF jest ustawiana,
a mikrokontroler kontynuuje prace.
Bit WRERR jest używany do wskazania, czy mikrokontroler był zresetowany podczas
operacji zapisu. Bit ten powinien być wyzerowany po włączeniu zasilania (Power-on Reset).
Powinien być on również sprawdzany po każdym resecie. Jest on ustawiany jeśli operacja
zapisu zostanie przerwana przez sygnał MCLR lub gdy nastąpi reset od układu od WDT
(WDT Time-out RESET) podczas normalnej pracy. Wtedy, po stwierdzenia przez
użytkownika, że bit WRERR jest ustawiony, powinien on powtórzyć operacje zapisu.
Zawartości rejestrów danych, adresów i bit EEPGD nie są zmieniane podczas resetu podczas
normalnej pracy mikrokontrolera.
Odczytywanie pamięci programu FLASH
Odczytywanie pamięci programu jest bardzo podobne do odczytywania pamięci danych.
Różnica polega na dodaniu dwóch instrukcji NOP po ustawieniu bitu RD (RD=1). Dwa
dodatkowe cykle, które są wykonywane podczas realizacji instrukcji NOP są używane przez
mikrokontroler do odczytu danych z pamięci programu i przesłania danych od rejestrów
EEDATH : EEDATA. Dane są dostępne do odczytu po wykonaniu drugiej instrukcji NOP.
Rejestry EEDATH i EEDATA będą przechowywały dane, aż do momentu rozpoczęcia się
kolejnej operacji odczytu lub zapisania do nich danych przez program.
Aby odczytać pamięć programu FLASH należy wykonać następujące kroki:
• zapisać adres do rejestrów EEADRH:EEADR (należy się upewnić, że wpisany adres nie
jest większy od dostępnego obszaru dla danego mikrokontrolera),
• ustawić bit EEPGD – EEPGD=1,
• ustawi bit RD – RD=1,
• wykonać dwie instrukcje NOP ,
• odczytać dane z rejestrów EEDATH:EEDATA.
Przykład fragmentu programu do odczytu pamięci programu:
BSF
BCF
MOVF
MOVWF
MOVF
MOVWF
BSF
BSF
BSF
NOP
NOP
BCF
MOVF
MOVWF
MOVF
MOVWF
STATUS, RP1
STATUS, RP0
ADDRL, W
EEADR
ADDRH,W
EEADRH
STATUS, RP0
EECON1, EEPGD
EECON1, RD
STATUS, RP0
EEDATA, W
DATAL
EEDATH,W
DATAH
;
;Bank 2
;wpisz
;adres bajtu
;do odczytu
;
;Bank 3
;
;rozpoczęcie operacji odczytu
;
;
;Bank 2
;DATAL = EEDATA
;
;DATAH = EEDATH
;
Mikrokontrolery i Mikrosystemy – Dodatek A
41
Zapisywanie do pamięci programu FLASH
Operacja zapisywania do pamięci programu FLASH powoduje przerwanie wykonywania
programu przez mikrokontroler. Oscylator oraz układy peryferyjne pracują bez przerwy.
Przerwania są wykrywane i kolejkowane. Po zakończeniu operacji zapisu mikrokontroler
kontynuuje wykonywanie programu od miejsca zatrzymania. Wyzerowanie bitu WRT
zapobiega zapisaniu do pamięci programu jakichkolwiek danych.
Aby zapisać daną do pamięci programu należy wykonać kilka kroków. Adres i dane do
zapisu muszą być wpisane w odpowiednie rejestry. Aby uaktywnić możliwość zapisu należy
ustawić bit EEPGD (EEPGD=1) i bit WREN. Bit WR może być ustawiony tylko jeśli bit
WREN był ustawiony wcześniej. Bity te nie mogą być ustawione w tej samej instrukcji
jednocześnie. Po zakończeniu zapisu bit WREN powinien być wyzerowany w programie.
Zapis do pamięci programu musi być także poprzedzony sekwencją operacji, aby uniknąć
błędów zapisu. Sekwencja ta składa się z pięciu instrukcji. Następnie muszą być wykonane
dwie instrukcje NOP. Po zakończeniu operacji zapisu wykonywanie instrukcji rozpoczyna się
od wykonania instrukcji po drugim NOP.
Aby zapisać daną do pamięć programu FLASH należy wykonać następujące kroki:
• zapisać adres do rejestrów EEADRH:EEADR (należy się upewnić, że wpisany adres nie
jest większy od dostępnego obszaru dla danego mikrokontrolera),
• zapisać do rejestrów EEDATH : EEDATA 14–bitową daną, która ma być zapisana do
pamięci,
• ustawić bit EEPGD,
• ustawić bit WREN,
• zablokować przerwania (jeśli aktywne),
• wykonać sekwencję pięciu instrukcji aby uniknąć błędów:
− zapisać 55h od rejestru EECON2 w dwóch krokach (najpierw do W potem do rejestru
EECON2),
− zapisać AAh do rejestru EECON2 w dwóch krokach (najpierw do W potem do rejestru
EECON2),
• ustawić bit WR (WR=1),
• wykonać dwie instrukcje NOP,
• uaktywnić przerwania (jeśli są używane),
• wyzerować bit WREN.
• Po zakończeniu operacji zapisu bit WR jest wyzerowany, a flaga EEIF jest ustawiona
(EEIF=1).
Przykład fragmentu programu do zapisu pamięci programu:
BSF
BCF
MOVF
MOVWF
MOVF
MOVWF
MOVF
MOVWF
MOVF
MOVWF
BSF
BSF
BSF
STATUS, RP1
STATUS, RP0
ADDRL, W
EEADR
ADDRH, W
EEADRH
VALUEL, W
EEDATA
VALUEH, W
EEDATH
STATUS, RP0
EECON1, EEPGD
EECON1, WREN
;
;Bank 2
;wpisanie adresu
;żądanego obszaru pamięci
;
;
;wpisanie danej
;
;
;
;Bank 3
;
;uaktywnienie zapisu
Mikrokontrolery i Mikrosystemy – Dodatek A
BCF
INTCON, GIE
;ten krok jest wymagany gdy aktywne są przerwania
MOVLW
MOVWF
MOVLW
MOVWF
BSF
NOP
NOP
0x55
EECON2
0xAA
EECON2
EECON1, WR
;zapisanie 55h do
;EECON2
;zapisanie AAh do
;EECON2
;rozpoczęcie operacji zapisu
;
;
BSF
BCF
INTCON, GIE
EECON1, WREN
;ten krok jest wymagany gdy używane są przerwania
;dezaktywowanie możliwości zapisu
42

Podobne dokumenty