Mikroprocesorova Technika, 7. tyzden
Vyuzitie vyvojovej dosky ADuC836EB1 pre ladenie C programov v prostredi ARM Keil 
uVision


Ciel:
Vyuzitie modernych hardverovych ladiacich moznosti pri ladeni C projektov.
Priprava studentov pre samostatnu pracu s vyvojovou doskou. 

Uvod k HW ladeniu:
Na vyvojovej doske ADuC836EB1 je osadeny specializovany mikrokonvertor ADuC836 firmy
Analog Devices (vid prednasky), ktory obsahuje okrem vykonnych periferii aj jadro 
procesora kompatibilne s jadrom Intel 8051. Tato kompatibilita je zachovana aj 
pre casovanie jadra procesora, a teda jeden strojovy cyklus procesora trva 
12 taktov oscilatora. Novsia rodina procesorov ADuC84x obsahuje aj zrychlene jadro, 
kde u vacsiny instrukcii je strojovy cyklus rovny jednemu taktu procesora, co 
pri beznych programoch znamenaa, ze pri tej istej taktovacej frekvencii jadra 
mozu byt aplikacie na ADuC84x vykonavane takmer 10x rychlejsie. S ADuC84x sa 
v ramci cvicen=i nebude pracovat, vsetky ladiace moznosti demonstrovane pre 
ADuC836 vsak je mozne vyuzit aj pre ADuC84x.

NA vyvojovej doske ADuC836EB1 je v spodnej casti EXTERNEHO (procesory ADuC
maju 62Kb internu FLASH pamat, ktora moze byt externym pinom EA zablokovana)
pamatoveho priestoru uozeny tzv. MONITOR. Tento specializovany program (ulozeny 
v externej EPROM pamati) firmy Keil umoznuje v spolupraci s vyvojovym prostredim 
realizovanie ladenia priamo na vyvojovej doske. Na vyuzitie monitora je 
potrebne pripojit dosku pomocou serioveho rozhrania (UARTU) a zabezpecenie, 
ze vsetky aplikacie budu zacinat na adrese 0x8000. Fyzicky su adresy
0x8000-0xFFFF mapovane do externej RAM pamate, ktora moze sluzit aj ako pamat 
CODE aj ako pamat XRAM (vid prednaska a analyza dekodovania na doske ADuC836EB1).
Tento sposob ladenia bude demonstrovany v prvych prikladoch, pricom vyzaduje 
okrem ineho aj astavenie:
   Options->Debug->Setting (prave okno) ->Keil Monitor-51 Driver

Procesory ADuC umoznuje vyuzitie aj dalsich ladiacich rezimov, kotre umoznuju 
vyuzit HW ladenie aj v pripadoch, ked cielova platforma neobsahuje kod s MONITOROM:

a) Specializovany "1-vodicovy" ladiaci rezim, ktory vyzaduje specializovany 
   ladiaci HW. Podrobnejsie informacie nie su verejne dostupne, SW a HW je potrebne
   zakupit od vyrobcu ladiaceho nastroja 

b) vyuzitie RS232 a specializovaneho MONITORA (ktory je sucastou kazdeho 
   cipu ADuC83x, 84x). Jeho nastavenie je realizovane volbou
   Options->Debug->Setting (prave okno) ->ADI Monitor Driver

Poznamka:
Procesory ADuC83x,84x vyuzivaju na nastavenie taktovacej frekvencie syntezu 
taktovacej frekvencie pomocou obvodov PLL, pricom k procesoru je pripojeny
32 kHz krystal. Po resete je procesor ADuC83x standardne prednastaveny na nizsiu 
tatovaciu frekvenciu 1,572864 MHz. V pripade potreby je mozne tuto frekvenciu 
softverovo zvysit, co aj bude v prikladoch demonstrovane. 

CASOVAC_C_EVB + spustenie na vyvojovej doske ADuC836EB1
-------------------------------------------------------
Projekt demonstruje vyuzitie casovaca T0 spolu so softverovym pocitadlom,
ktore predlzuje dobu medzi zmenami LED diody na dobu podstatne dlhsiu ako 
je maximalna doba definovatelna 16 bitovym casovacom T0 (max 65536 us pre
12 MHz hodinovy signal).
Dodane zmeny je mozne najst v prislusnom zdrojovom kode.
Oproti projektu CASOVAC_C z mniuleho cvicenia je potrebne realizovat nasledujuce zmeny
(tieto je potrebne urobit pri vsetkych projektoch, pokial ich je potrebne spustit 
na ADuC836EB1):
- dodat do projektu upraveny startovaci subor (zaciatok kodu na adrese 0x8000,
  zmena taktovacej frekvencie procesora na cca 12 MHz)
- vnutenie zaciatku vykonavania programu na adresu 0x8000 (prikaz debug.ini)
- definovanie zaciatku a velkosti programovej pamate (...Options -> Target)
- presun zaciatku vektorov prerusenia na adresu 0x8000 (...Options -> C51) -
  koli ladeniu pomocou Monitora
- zmena ladenia v Simulatore na ladenie pomocou Monitora (...Options -> Debug)

Poznamka:
Tento projekt je v prostredi uVision nastaveny ako projekt pre klasicky Intel 8051.
Aj ked to nie je presne nastavenie, je principialne funkcny aj na ADuC836EB1.
V dalsich projektoch uz bude dosledne nastaveny v projekte cielovy procesor ADuC83x.


Vystup na seriovu linku ADuC836
Vystup na EVB doske s vyuzitim Monitora:
----------------------------------------
Monitor umiestneny v pamati EPROM (v rozsahu adries 0x0000-0x7fff) komunikuje
s pocitacom pomocou serioveho kanalu procesora ADuC 836 (kompatibilny so 
seriovym portom 8051). Cez toto rozhranie je do EVB dosky vysielany kod (ktory
sa zapise do RAM pamate v rozsahu adries 0x8000-0xffff), citaju sa udaje z 
registrov procesora, pripojenych pamati a pod...
Je samozrejme, ze prenosova rychlost ako aj rezim serioveho kanala je nastaveny
priamo v Monitore (vyuziva sa prenosova rychlost 9600 baudov, ktora je 
nastavena v Options ... -> Debug -> Keil Monitor 51 Driver, Settings ...).
Tiez je vhodne (pokial chceme mat spravne prepocitavane casove udaje) nastavit
procesor ADuC 836 (pripadne ADuC 834) a nastavenie 
	Xtal (MHz) = 0.032768
Monitor dalej zabezpecuje korektne zobrazovanie vysielanych udajov, ktore 
prichadzaju z uzivatelskeho programu, ktory je pomocou Monitora ladeny.
Udaje sa vypisuju na na obrazovku
	View -> Serial Window #1
             -> Serial Window #2
Program je samozrejme mozne stadardne krokovat s vyuzitim moznosti prostredia 
uVision.

TEPLOMER_MONITOR_EVB + spustenie na vyvojovej doske ADuC836EB1
--------------------------------------------------------------
Kod demonstruje vyuzitie seriovej linky na vystup udajov, pricom je na vystup
posielana teplota namerana internym teplotnym senzorom (vid blokova schema
procesora) v ADuC836.

TEPLOMER_MONITOR_FLASH + spustenie na vyvojovej doske ADuC836EB1
----------------------------------------------------------------
Kod demonstruje pracu s internou programovou FLASH pamatou (programovy kod 
je presunuty do internej programovej pamate).
Je potrebne vykonat nasledujuce upravy (su uz realizovane):
1. pouzit standardny predefinovany startovaci subor (zaciatok na adrese 0x0000,
   bez modifikacie PLL obvodu)
2. definovat zaciatok vektorov prerusenia na adresu 0x0000 (Options ->
   C51 -> Interrupt vectors at address)
3. dodat nastavenie seriovej linky (uz sa nemozeme spoliehat na to, ze 
   ho nastavil Monitor)
4. preloozit program
5. kod v Intel HEX subore ADCTEST.HEX (ktory sa vytvoril po uspesnom 
   skompilovani projektu) preniest do internej FLASH pamate.
   Toto je potrebne realizovat pomocou specializovanych programov. 
   Jednym z nich je aj program SWDN.EXE

   !!! Pozor, pred zapisom do internej Flash pamate je potrebne zmenit 
   zapojenie prepojek:
	- rozpojit prepojku JP9
        - prepojka JP8 musi byt spojena!!!

   prikazom (po zavreti Keil prostredia):
		swdn adctest.hex /C:1    (ak je pripojenie cez COM1)
   nahrajeme program do internej FLASH pamate.

6. Po nahrati je potrebne rozpojit prepojkou JP8. JP9 musi zostat 
   rozpojena. Tato konfiguracia definuje spustenie programu z internej 
   FLASH pamate.
7. Ak chceme vidiet vypisy zasielane na seriovu linku, MUSIME pouzit 
   napr. vhodne nakonfigurovany program HYPERTERMINAL (9600 baudov, 
   ...).

Poznamka:
Existuje aj komfortnejsi program na programovanie internej FLASH pamate
(integrovane prostredie, moznost zmeny resetovacej adresy a pod.).
Tento program umoznuje tiez zakazanie citania pamate programu 
(vyhodne pri ochrane programu pred nelegalnym kopirovanim).
Umoznuje vsak aj zakazanie pristupu k FLASH pamati, ktoru je mozne
zmenit len paralelnym programatorom.
Z dovodu moznosti realne zablokovat procesor nebude tento program 
na cviceni dostupny.

