Comparativ cu seriile ATmega și ATtiny, ATXmega a achiziționat o mulțime de chifle sălbatice plăcute, și anume:
Viteza ceasului este de până la 32MHz.
Unitate logică aritmetică (ALU). Acum numerele de reper sunt prietenii noștri, deoarece MK este capabil să lucreze cu ele!
Controller de întrerupere pe mai multe niveluri (și anume, 3 niveluri).
Porniți MK cu sistemul tahometric implicit și selectați unul direct din cod. Acum este imposibil să faci greșeli cu fuziunea, atunci când selectezi un sistem de sincronizare este imposibil :)
Programare-depanare interfață cu 4 fire PDI (2 fire de la care pământ și putere). Coaseți și depanați prin același conector mic, răcoroase răcoroase în opinia mea :)
Și mai multe chifle despre care poți citi de la tovarășii noștri de lătrătoare
De asemenea, acum nu este absolut necesar să puneți lanțul RC pe pinul RESET, dar este necesar să scoateți puterea în 10K.
Singurul lucru care poate incetini usor incepatorul, atunci cand trece de la controlerele clasice AVR - este ca seria Xmega necesita 3.3V pentru putere. Mă grăbesc să te liniștesc, această cerere nu este atât de severă cât pare. După efectuarea unei serii de experimente inumane sa stabilit că MK funcționează bine chiar și de la 4.2v, pentru o scurtă perioadă de timp a fost hrănit cu 5V, MC nu a făcut nici macar strănut. De asemenea, s-au dat semnale în nivelul 5c, iar MK a lucrat cu ele destul de calm, fără a pierde eficiența.
Sistem de ceas
Caracteristici distinctive
Timp de pornire rapidă
Sincronizare sigură în timpul funcționării
Generatoare interne:
Generator de frecvențe interne RC 32 MHz cu capacitatea de a calibra automat
Oscilator intern 2 MHz RC cu capacitate de calibrare automată
Generator de frecvențe RC calibrat intern 32 kHz
Generator de putere ultra-scăzut de 32 kHz (generator ULP)
Surse externe de ceas
Cuarț de oscilație cu frecvență de 0,4 ... 16 MHz
Cuarț oscilator de frecvență 32.768 kHz
Semnal de sincronizare externă
PLL cu surse de sincronizare interne și externe și un multiplicator de frecvență de la 1 la 31
Separatoare de frecvență de sincronizare cu un raport de divizare de la 1 la 2048
Sincronizarea rapidă a UVB, de 2 și 4 ori mai mare decât frecvența ceasului procesorului
Calibrarea automată a generatoarelor interne
Detectarea unei defecțiuni a oscilatorului de cuarț
La pornire sau resetare, MC pornește de la un generator intern RC cu o frecvență de 2 MHz. Și apoi, în cod, alegem deja ceea ce avem nevoie (dacă este necesar). Personal, am avut un oscilator RC intern cu o frecvență de 32 MHz, pentru că stabilitatea lui a satisfăcut toate nevoile mele.
Acest lucru se face astfel:
Aici totul este simplu:
De la început includem activitatea ceasului 32MHz intern, și el a fost ca să înceapă, iar noi așteptăm într-o buclă până când se pregătească, tobish frecvența nu este stabilită, și va fi adecvat pentru utilizare, ceea ce raportăm biți RC32MRDY. Apoi vom scrie valoarea în registrul PCC. permițându-ne astfel să deranjeze Înregistrare CLK_CTRL. care este protejat. Dar există, de asemenea, un coc! Pentru a permite ajustarea securizat registrului de intrare-ieșire sau de a efectua un ghid securizat într-un interval de timp de cel mult 4, ciclurile de instrucțiuni CPU, registrul trebuie să fie scris CPC semnătura corectă. Toate întreruperile întâlnite în decursul acestui interval de timp sunt ignorate, iar la expirarea acestuia - procesate în conformitate cu nivelul și prioritate. Asta e doar 0xD8 și ne permite următoarele 4 cicluri schimba valoarea registrului protejat. Rezoluție a primit, și un registru CLK_CTRL spune „cicluri de ceas ale sursei (în acest caz, 32MHz ceas intern)».
Pentru alte metode de sincronizare, principiul este același, doar registrele sunt diferite.
Și astfel, am selectat frecvența dorită este acum necesară pentru a face un fel de «Bună ziua, lume!» În stilul de MC, și anume, să clipească un LED. Și pentru aceasta avem nevoie să învățăm cum să lucrăm cu porturile I / O.
Într-o serie de XMEGA lucra cu porturi similare cu porturile din clasic AVR, dar sunt multe mai plăcut mai sălbatică de pluș, și anume:
Pentru a lucra cu porturile avem 3 registre. Scopul liniei IO este ajustată în funcție de programul de utilizator. Fiecare port are următoarele linii de registre de control la / în: registru direcție (DRI), registrul de date de ieșire (OUT). Pentru a supraveghea starea liniilor în / furnizează registrul de date de intrare (IN), și caracteristici suplimentare ale fiecărei linii / in pot fi configurate prin intermediul registrului de configurare a liniei de intrare-ieșire (PINnCTRL. În cazul în care liniile n-numerice / in).
Direcția liniei n este specificată printr-un bit separat DIRn al registrului direcției DIR. Dacă bitul DIRn este setat la unu, atunci linia n va funcționa ca ieșire. Dacă bitul DIRn este setat la zero, linia va funcționa ca intrare. Dacă linia este configurată ca ieșire, bitul OUTn al registrului OUT va determina starea sa. Scrierea unei unități pe bitul OUTn determină un nivel ridicat pe linia n, iar un zero scrie la un nivel scăzut.
Pentru a interoga starea liniei, este furnizat registrul IN. Analiza stării liniilor poate fi efectuată indiferent dacă linia funcționează ca intrare sau ca ieșire, cu excepția cazului în care starea de intrare digitală este dezactivată. După transferarea MK în starea de resetare, toate liniile de I / O, indiferent de activitatea de sincronizare, intră într-o stare de impedanță înaltă.
Regiștrii DIR și OUT au registre SET suplimentare. CRJ. GL unde SET - setați valoarea, CLR - ștergeți valoarea, GL - inversați valoarea bitului dorit doar scriind unitatea pe bitul unuia dintre aceste registre, de care avem nevoie, în funcție de ceea ce avem nevoie. Toate acestea nu ne interzic să lucrăm cu registrele DIR și OU T ca în AVR-ul clasic.
ceea ce am făcut de fapt la începutul studiului acestor MK:
De asemenea, fiecare port acceptă orice configurație de 2 picioare pe întrerupere externă, având în același timp un vector separat pentru fiecare dintre cele 2 întrerupe pe port.
Mai multe informații despre porturile I / O pot fi citite aici
Controller de întrerupere pe mai multe niveluri
Deoarece am atins deja lucrul cu întreruperi, merită să ne spunem cum să lucrăm cu aceste întreruperi.
Deci, avem 2 tipuri de permisiuni de întrerupere. Rezoluția globală, care se face prin stabilirea unui pic în registrul SREG:
Dar numai această acțiune nu va permite ca întreruperile să funcționeze, pentru că înainte de aceasta trebuie să configuram controlerul de întrerupere propriu-zis. Acest lucru se face astfel:
In acest exemplu, vom lasa toate întrerupe nivelurile, care, după cum poate fi înțeles din exemplul 3. Întrerupe un nivel mai mare poate avea loc chiar și în timpul unei întreruperi de nivel scăzut, și o întrerupere de nivel scăzut nu poate întrerupe un nivel superior.
Acest articol ar trebui considerat o parte introductivă a seriei Xmega. Scopul său a fost să ceară primul început pentru cei care ar dori să studieze această serie de MC.
Personal, mi-a plăcut cu adevărat această serie cu ușurința de a lucra cu ea, atitudinea mea agilă și destul de tolerantă față de experimentele inumane.
În următorul articol, vom analiza detaliat la lucru cu diferite interfețe ale acestui MC.
Ei bine, există fenomene tranzitorii. Puneți recipientul pe resetare, pentru a le vreme. La siguranța de instalare la 0 ms, avem încă o întârziere de N ms, iar în cazul în care nu sunt setate, atunci MK de mai multe ori în tranziție „rezet“ atât de repede încât nu are timp pentru a inițializa. Se pare că, în timpul Fuse de instalare de la 0 ms, avem la fel de N întârziere ms. Ei bine, dacă setați o întârziere pe ms N, acesta va suprascrie tranzitorii. Se pare că nu este necesară capacitatea. Un alt lucru, dacă avem un pic de „ajutor“ de declanșare Schmitt pentru creșterea duratei de histerezis, în cazul în care rezet urcă un obstacol în procesul de MC (bine, de exemplu, staticii de test). Cu tot binele ne-am uitat un asistent - un BOD.
În general, AFAIK toate aceste întârzieri sunt contorizate numai după ce puterea MC a atins nivelul necesar și POR a permis operațiunea. Deci, tranzitorii de pe sursa de alimentare a MK trece înainte de începutul acestei întârzieri. Este necesar să se aștepte stabilizarea "finală" a puterii și să se acorde timp pentru a inițializa alte elemente ale circuitului, precum și pentru a stabiliza oscilatorul de cristal.