registre egais. Când ar trebui soldurile în egais să fie egale cu soldurile reale? Transferul produselor în al doilea registru Nu se transferă complet în al 2-lea registru 1c


7.2 Registre de transfer

7.2.1 Registrul evenimentelor de încălcare a FIFO (FWEV)

bitul 7
RXFIFO3
bitul 6
RXFIFO2
bitul 5
RXFIFO1
bitul 4
-
bitul 3
TXFIFO3
bitul 2
TXFIFO2
bitul 1
TXFIFO1
bit 0
-
RXWARN3-1 rezervă TXWARN3-1 rezervă
0 0 0 - 0 0 0 -
r - r -

TXWARN. Avertizare de întrerupere a transmisiei. Setați la „1” atunci când punctul final FIFO de transmisie corespunzător a depășit limita definită de bitul TFWL în registrul TXCx și transmisia de la punctul final corespunzător este activată. Acest bit este șters atunci când condiția de avertizare de încălcare este șters, fie prin scrierea de noi date în FIFO când FIFO este șters, fie la finalizarea transferului, așa cum este indicat de bitul TX_DONE din registrul TXSx.

RXWARN. Avertizare de recepție. Setați la „1” când punctul final FIFO de trimitere corespunzător a depășit limita definită de bitul RFWL din registrul EPCx. Acest bit este șters atunci când condiția de avertizare de încălcare este șters, fie prin citirea datelor din FIFO, fie când FIFO este șters.

7.2.2 Registrul de măști de încălcare a FIFO (FWMSK)

Când bitul corespunzător din registrul FWEV este setat, WARN în registrul MAEV este setat. Când este șters, bitul corespunzător din registrul FWEV nu determină setarea WARN.

bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
Aceeași descriere a biților ca în registrul FWEV
0 0 0 0 0 0 0 0
r/w

7.2.3 Registrul semnificativ al numărului de cadre (FNH)

bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
M.F. UL RFC Rezervat FN10-8
1 1 0 - 0 0 0
r r w/r - r

FN. Numărul cadrului. Acesta este numărul de cadru primit curent în ultimul pachet SOF. Dacă numărul de cadre corect nu este primit în timpul celor 12060 de biți (lungimea maximă a cadrului, FLMAX) ai schimbului anterior, atunci numărul de cadre este crescut artificial. Dacă două cadre consecutive sunt ratate sau sunt incorecte, FN-ul curent este înghețat și încărcat cu numărul de cadre din pachetul SOF.

Dacă octetul scăzut al numărului de cadre a fost citit de firmware înainte de a citi registrul FNH, atunci utilizatorul citește de fapt conținutul registrului tampon, care conține valoarea celor trei biți de număr de cadre ai acelui registru atunci când octetul scăzut a fost citit. Secvența corectă pentru a citi numărul cadrului este: FNL, FNH. Operațiile de citire pentru registrul FNH, fără a citi mai întâi registrul Frame Number Low Byte (FNL), citiți valoarea reală a celor trei biți cei mai puțin semnificativi în numărul de cadru. La resetare, FN este setat la „0”.

RFC. Resetați contorul de cadre. Setarea acestui bit resetează numărul cadrului la 0x0000, după care acest bit se șterge singur. Acest bit este întotdeauna citit ca „0”.

UL. Deblocați steag. Acest bit indică faptul că au fost primite cel puțin două cadre fără numărul de cadre așteptat sau că nu a fost primit un SOF valid în 12060 de biți din timpul de sosire. Dacă acest bit este setat, atunci numărul cadrului din următorul pachet valid este încărcat în FN. La resetare, acest flag este setat la „1”.

M.F. Steagul SOF pierdut. Acest bit este setat atunci când numărul de cadru din pachetul SOF primit nu este egal cu valoarea așteptată sau când SOF nu este recepționat în 12060 de biți din timpul de sosire. La resetare, acest flag este setat la „1”.

7.2.4 Registrul de octet inferior al numărului de cadre (FNL)

Acest registru conține octetul mic al numărului de cadru, așa cum este descris mai sus. Pentru a asigura coerența, citirea acestui octet mic face ca cei trei biți de număr de cadre din registrul FNH să fie blocați în timp ce registrul este citit. Secvența corectă pentru citirea numărului cadrului este: FNL, FNH. La resetare, FN este setat la „0”.

bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
FN7-0
0 0 0 0 0 0 0 0
r

7.2.5 Registrul funcțional de adrese (FAR)

Acest registru stabilește adresa funcțională a dispozitivului. Diferitele numere ale punctelor finale sunt setate individual prin registrul de control al punctelor finale.

bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
AD_EN AD6-0
0 0 0 0 0 0 0 0
r/w r/w

ANUNȚ. Abordare. Acest câmp conține adresa funcțională de 7 biți utilizată pentru a trimite și a primi toate caracterele adresate dispozitivului.

AD_EN. Adresarea rezoluției. Când bitul este setat la „1”, biții AD6-0 sunt utilizați în compararea adreselor (a se vedea secțiunea 6.2 pentru detalii). Când este șters, dispozitivul nu răspunde la niciun personaj din autobuz.

Notă: Dacă bitul DEF din registrul de control al punctului de control 0 este setat, atunci punctul final 0 răspunde la adresa sa implicită.

7.2.6 Registrul de control DMA (DMACNTRL)

bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
DEN IGNRXTGL DTGL ADMA DMOD DSRC2-0
0 0 0 0 0 0 - 0
r/w r/w r/w r/w r/w r/w

DSRC. Sursa DMA. Câmpul Biți sursă DMA conține o valoare binară care determină care dintre punctele finale, 1...6, sunt disponibile pentru a suporta DMA. Biții DSRC sunt șterși la resetare. Tabelul 7 prezintă setările de biți DSRC.

Tabelul 7. Descrierea biților DSRC

DSRC Numărul punctului final
2 1 0
0 0 0 1
0 0 1 2
0 1 0 3
0 1 1 4
1 0 0 5
1 0 1 6
1 1 X Rezervat

DMOD. Modul DMA. Acest bit determină când apare o solicitare DMA. Dacă este șters, solicitarea DMA apare când transferul este finalizat. Pentru transmiterea punctelor finale EP1, EP3 și EP5, datele sunt transmise complet, așa cum este indicat de bitul TX_DONE (pentru a completa FIFO cu date noi transmise). Pentru recepția punctelor finale EP2, EP4 și EP6, acest lucru este reflectat de bitul RX_LAST. Când bitul DMOD este setat, apare o solicitare DMA atunci când este setat bitul de avertizare de încălcare FIFO corespunzător. Bitul DMOD este șters la resetare.

Solicitarea DMA de la punctul final de trimitere este activată până când starea de solicitare este șters. Dacă DMOD este setat la „0”, atunci solicitările DMA apar fie până când firmware-ul citește registrul de stare de transmisie corespunzător (TXSx), ștergând astfel bitul TX_DONE, fie dacă bitul TX_LAST din registrul de comandă de transmisie (TXCx) instalat de hardware- software-ul implementat. Dacă bitul DMOD este setat la „1”, atunci solicitările DMA apar până când stările de avertizare privind încălcarea FIFO cauzate fie de trimiterea suficienților octeți la punctul final, fie dacă bitul TX_DONE este setat din cauza unui transfer sunt șterse.

Solicitarea DMA de la punctul final de trimitere este activată până când starea de solicitare este șters. Dacă DMOD este setat la „0”, atunci solicitările DMA apar fie până când firmware-ul citește registrul de stare de recepție corespunzător (RXSx), ștergând astfel bitul RX_LAST, fie dacă FIFO devine gol din cauza citirii suficiente cicluri. Dacă bitul DMOD este setat la „1”, atunci solicitările DMA apar până când stările de avertizare privind încălcarea FIFO sunt șterse sau dacă punctul final FIFO devine gol din cauza unor cicluri de citire suficiente.

Dacă DMOD este setat la „0” și punctul final și DMA sunt activate, atunci apare o solicitare DMA atâta timp cât firmware-ul citește registrul TXSx sau RXSx corespunzător, ștergând astfel bitul TX_DONE/RX_LAST. Dacă bitul DMOD este setat la „1” și punctul final și DMA sunt activate, atunci cererea DMA are loc atâta timp cât semnalează alerta de încălcare FIFO.

ADMA. DMA automat. Setarea acestui bit activează automat punctul final de recepție sau transmisie selectat. Înainte de a activa modul ADMA, bitul DEN din Registrul de control DMA (DMACNTRL) trebuie să fie șters. Modul ADMA funcționează atâta timp cât este setat orice alt bit decât NTGL din Registrul de evenimente DMA (DMAEV). Pentru a inițializa modul ADMA, toți biții cu excepția NTGL din registrul DMAEV trebuie șterși.

Pentru operațiunile de recepție, receptorul este pornit automat; Când un pachet este primit, acesta este transferat prin DMA în memorie.

Pentru operațiunile de transfer, pachetul de date este trimis prin DMA din memorie; transmițătorul pornește automat.

Când un dispozitiv intră în modul ADMA, orice stare existentă a punctului final se poate pierde. Dacă există deja date în FIFO, acestea sunt resetate. Starea actuală a RX_EN și TX_EN se poate modifica, de asemenea.

Ștergerea ADMA scoate dispozitivul din modul ADMA. DEN se poate șterge în același timp sau mai târziu. Dacă în același timp, toate operațiunile DMA sunt oprite imediat și firmware-ul trebuie să trimită toate datele rămase. Dacă mai târziu, dispozitivul va finaliza orice operațiune DMA curentă înainte de a ieși din modul ADMA (vezi descrierea bitului DSHL în registrul DMAEV).

DTGL. Comutator DMA. Acest bit este utilizat pentru a determina starea operațiunilor ADMA la inițializare. La inițializare, firmware-ul setează acest bit la „1” dacă începe cu o operațiune DATA1 și la „0” dacă începe cu o operațiune DATA0.

Scrierea acestui bit actualizează și bitul NTGL din registrul DMAEV.

IGNRXTGL. Se ignoră comutarea RX. Dacă acest bit este setat, comparația dintre bitul NTGL din registrul DMAEV și bitul TOGGLE din registrul RXSx corespunzător este ignorată în timpul operațiunilor de recepție. În acest caz, o nepotrivire a ambilor biți în timpul unei operațiuni de recepție nu va opri operația ADMA. Dacă acest bit nu este setat, ADMA se oprește dacă există o nepotrivire de biți. După resetare, acest bit este setat la „0”.

7.2.7 Registrul evenimentelor DMA (DMAEV)

Biții din acest registru sunt utilizați în modul ADMA. Biții 0...3 pot provoca o întrerupere dacă nu sunt șterși, chiar dacă dispozitivul nu a setat modul ADMA. Până când toți acești biți nu sunt șterși, modul ADMA nu poate fi inițializat. Modul ADMA se termină automat când oricare dintre acești biți este setat.

bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
Rezervat NTGL rezervă DSIZ DCNT DERR DSHLT
- 0 - 0 0 - 0
- r - Vacă Vacă Vacă Vacă

DSHLT. Oprirea software-ului DMA. Acest bit este setat atunci când operațiunile ADMA sunt oprite de firmware. Acest bit este setat numai după ce motorul DMA a finalizat toate operațiunile de curățare necesare și a revenit la starea inactiv. Se execută în următoarele condiții:

  • Dacă bitul ADMA este șters (și DEN rămâne setat). În acest caz, operațiunea curentă este finalizată. Aceasta înseamnă că orice date din FIFO sunt transferate în memorie prin DMA. Bitul DSHLT este setat numai după aceasta. Rețineți că DEN rămâne instalat și poate fi necesar să fie șters mai târziu.
  • Dacă DEN este șters (ADMA poate rămâne setat sau poate fi șters în același timp). Aceasta oprește toate operațiunile DMA și setează imediat bitul DSHLT. Dacă aceste date sunt într-un FIFO, atunci sunt stocate, dar nu sunt transmise.
  • Dacă firmware-ul încearcă să citească, scrieți registrele EPCx, TXCx, RXCx, TXCx sau RXSx corespunzătoare (când sunt setate ambele DEN și ADMA în registrul DMACNTRL). Aceasta oprește toate operațiunile DMA și setează imediat bitul DSHLT. Operația de citire sau scriere nu are efect.

    DERR. Eroare DMA. Acest bit este setat pentru a indica faptul că pachetul a fost primit sau trimis incorect. De asemenea, este setat dacă bitul TOGGLE din registrul RXSx/TXSx nu este egal cu bitul NTGL din registrul DMAEV după trimiterea/primirea unui pachet. (Rețineți că această comparație are loc înainte ca bitul NTGL să își schimbe starea din cauza transmisiei pachetelor.)

    Pentru recepție, DERR este echivalent cu RX_ERR. Pentru transmisie, este echivalent cu TX_DONE (setat) și ACK_STAT (nesetat). Dacă bitul AEH din Registrul de contor de erori DMA (DMAERR) este setat, DERR nu va fi setat până când DMAERRCNT din registrul DMAERR este șters și nu este detectată o altă eroare. Erorile sunt tratate așa cum este specificat în registrul DMAERR.

    DCNT. Contor DMA. Acest bit este setat când registrul de contor DMA (DMACNT) este „0” (vezi registrul DMACNT).

    DSIZ. Dimensiunea DMA. Acest bit este relevant doar pentru operațiunile de recepție DMA. Indică faptul că pachetul primit este mai mic decât lungimea completă a FIFO. De obicei, arată sfârșitul unei transmisii cu mai multe pachete.

    NTGL. Următorul comutator. Acest bit determină starea de comutare atunci când se trimite următorul pachet de date (dacă se trimite), sau starea de comutare când se așteaptă următorul pachet de date (dacă se primește). Acest bit este inițializat prin scrierea bitului DTGL în registrul DMACNTRL. Apoi își schimbă starea cu fiecare pachet trimis sau primit la punctul final selectat în prezent de DSRC2-0. Dacă o operație de scriere DTGL are loc în același timp cu o operație de actualizare a biților, operația de scriere are o prioritate mai mare.

    Dacă are loc un transfer în timpul operațiunilor ADMA, bitul DTGL suprascrie bitul TOGGLE corespunzător din registrul TXCx. Acest lucru asigură comutarea corectă a datelor USB.

    Rețineți că nu există biți de mască corespunzători pentru aceste evenimente, deoarece nu sunt utilizați pentru a genera o întrerupere.

    7.2.8 Registrul masca DMA (DMAMSK)

    Orice bit setat la „1” în acest registru setează automat bitul DMA în registrul ALTEV atunci când are loc un eveniment corespunzător în registrul DMAEV. În caz contrar, setarea bitului DMA este dezactivată. Pentru o descriere a biților 0...3, consultați registrul DMAEV.

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    DSIZ DCNT DERR DSHLT
    - 0 0 - 0
    - r/w r/w r/w r/w

    7.2.9 Registrul oglindă (MIR)

    Acest registru este doar pentru citire. Simpla citire a acestuia nu schimbă starea registrului TXSx sau RXSx, software-ul implementat de hardware poate verifica liber starea canalului.

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    STAT
    -
    r
  • STAT. Stat. Acest câmp reflectă biții de stare ai emițătorului sau receptorului selectați în câmpul DSRC2-0 din registrul DMACNTRL (DMA nu trebuie să fie activ sau activat). Corespunde TXSx sau RXSx.

    7.2.10 Registrul de contor DMA (DMACNT)

    Acest registru specifică numărul maxim specificat pentru operațiuni ADMA.

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    AEH DMAERRCNT
    0 0 0 0 0 0 - 0
    r/w r/w

    DCOUNT. Contor DMA. Acest câmp este decrementat pe măsură ce o operațiune DMA se finalizează până când devine 0. Bitul DCNT din registrul de evenimente DMA este apoi setat numai când următoarea operațiune DMA se finalizează cu succes. Acest registru nu-și pierde semnificația.

    Pentru operațiunile de primire, acest contor este decrementat atunci când un pachet este primit cu succes și apoi transferat în memorie prin DMA.

    Pentru operațiunile de transfer, acest contor este decrementat atunci când un pachet este transferat din memorie prin DMA și apoi trimis cu succes.

    DCOUNT ar trebui setat după cum urmează: DCOUNT = (Numărul pachetului de trimis) -1

    Dacă o operație de scriere DMACNT are loc în același timp cu o operație de decrementare, operația de scriere are prioritate mai mare.

    7.2.11 Registrul erorilor DMA (DMAERR)

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    FHT H.O.S. WKMODE rezervă ENUC ENUSB PNDUC PNDUSB
    0 0 0 - 1 1 1 1
    w/r0 w/r w/r - w/r w/r Vacă Vacă

    DMAERRCNT. Contor de erori DMA. În combinație cu capacitatea de gestionare a erorilor aritmetice, acest contor determină numărul maxim de erori consecutive de magistrală înainte de a opri modul ADMA. Software-ul hardware poate seta contorul de 7 biți la o valoare prestabilită. Odată ce ADMA este pornit, contorul este decrementat cu 1 de la o valoare prestabilită de fiecare dată când este detectată o eroare pe magistrală. Fiecare tranziție reușită resetează contorul la valoarea prestabilită. Când modul ADMA este oprit, contorul este, de asemenea, setat înapoi la valoarea prestabilită.

    Dacă contorul ajunge la 0 și este detectat un alt pachet eronat, bitul DERR din registrul de evenimente DMA este setat. Detalii în secțiunea 7.2.7. Acest registru nu-și pierde semnificația.

    DMAERRCNT ar trebui setat după cum urmează: DMAERRCNT = 3D (Numărul maxim de încercări de trimitere efectuate) - 1

    Accesul de scriere la acest registru este posibil numai atunci când ADMA este inactiv. În caz contrar, este ignorat. Citirea din acest registru în timp ce ADMA este activ returnează valoarea curentă a contorului. Citirea din registru atunci când ADMA este inactiv returnează valoarea prestabilită. Contorul este decrementat doar dacă este setat AEH (tratarea automată a erorilor este activată).

    Gestionarea automată a erorilor. Acest bit are două semnificații diferite în funcție de modul de tranziție curent:

  • Mod non-izocron

    Acest mod este folosit pentru a transfera matrice mari, întreruperi și control. Setarea AEH în acest mod permite procesarea automată a pachetelor care conțin CRC sau erori de potrivire a biților.

    Dacă acest bit este setat în timpul operațiunilor de transmisie, dispozitivul reîncarcă automat FIFO și reintroduce în coadă pachetul pentru care controlerul gazdă nu a returnat un ACK. Dacă acest bit este clar, tratarea automată a erorilor este dezactivată.

    Dacă acest bit este setat în timpul operațiunilor de primire, un pachet primit în eroare (așa cum este definit de bitul DERR din registrul DMAEV) este șters automat din FIFO pentru a redobândi pachetul. Dacă acest bit este clar, tratarea automată a erorilor este dezactivată.

  • Mod izocron

    Setarea acestui bit permite dispozitivului să ignore pachetele primite în eroare (așa cum este definit de bitul DERR din registrul DMAEV).

    Dacă acest bit este setat în timpul operațiunilor de primire, dispozitivul șterge și resetează automat FIFO pentru a primi următorul pachet. Pachetul eronat este ignorat și nu este trimis prin DMA. Dacă acest bit este clar, tratarea automată a erorilor este dezactivată.

    7.2.12 Registrul de pornire (WKUP)

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    STAND DEF Rezervat EP3-0
    0 0 - 0 0 0 0 0
    r/w r/w - r; hardware la „0”

    PNDUSB. Activare USB așteptată. Acest bit indică faptul că acest dispozitiv va fi activat prin activitatea USB. De asemenea, trimite un semnal de cerere de întrerupere de așteptare la pornire. Bitul PNDUSB trebuie șters de controlerul gazdă scriind „0”. O resetare hardware setează acest bit.

    PNDUC. Se așteaptă pornirea microcontrolerului. Acest bit indică faptul că dispozitivul va fi pornit la cererea microcontrolerului. De asemenea, trimite un semnal de cerere de întrerupere de așteptare la pornire. Bitul PNDUC trebuie șters de controlerul gazdă scriind „0”. O resetare hardware setează acest bit.

    ENUSB. Rezoluție USB. Când este setat la „1”, acest bit permite dispozitivului să pornească atunci când este detectată activitate USB.

    ENUC. Rezoluția microcontrolerului. Când este setat la „1”, acest bit permite dispozitivului să se pornească atunci când microcontrolerul accesează dispozitivul.

    WKMODE. Modul activat. Acest bit selectează intervalul după care dispozitivul generează o întrerupere de pornire (dacă este activată) atunci când are loc un eveniment de pornire, după cum se arată mai jos:

    0 - Generează o întrerupere imediată de pornire

    1 - Generează o întrerupere la pornire după o întârziere la pornire

    HOS. Opriți prin suspendare. Când acest bit este setat, dispozitivul intră în modul Halt imediat ce intră în starea de suspendare. Scrierea „1” în starea suspendată nu are efect.

    FHT. Oprire forțată. Când nodul nu este atașat (NAT în registrul MCNTRL este setat la „0”), setarea acestui bit pune nodul în modul Halt. Când gazda este conectată (NAT la „1”), intrarea „1” este ignorată.

    7.2.13 Registrul de control al punctului final 0 (EPC0)

    Acest registru controlează punctul final 0.

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    rezervă ACK_STAT TX_DONE TCOUNT4-0
    - 0 0 0 0 0 0 0
    - CoR CoR r

    EP. Punctul final. Acest câmp conține adresa punctului final pe 4 biți. Pentru punctul final 0, acești biți sunt setați la 0000b în hardware.

    DEF. Adresă implicită. Când acest bit este setat, dispozitivul răspunde la adresa implicită, indiferent de conținutul câmpurilor FAR6-0/EP03-0 Când este trimis un caracter IN pentru un punct final, bitul DEF este șters automat.

    Acest bit ajută la trecerea de la adresa implicită la adresa desemnată. Tranziția de la adresa implicită 00000000000b la adresa specificată în timpul numerotării magistralei poate eșua în mijlocul secvenței de control SET_ADDRESS. Acest lucru este necesar pentru a finaliza secvența de control. Cu toate acestea, adresa trebuie să se schimbe imediat după sfârșitul acestei secvențe pentru a evita erorile atunci când o altă secvență de control urmează imediat comanda SET_ADRESS.

    La o resetare USB, firmware-ul are 10 ms de configurat și trebuie să scrie 0x80 în registrul FAR și 0x00 în registrul EPC0. La primirea comenzii SET_ADRESS, firmware-ul trebuie să scrie 0x40 în registrul EPC0 și 0x80 în registrul FAR.

    STAND.

    1. - Transmiterea FIFO este activată și simbolul IN este recepționat.

    2. - FIFO de recepție este activat și este primit un caracter OUT.

    Notă:

    La transmiterea confirmării semnalului STALL, biții RX_LAST și TX_DONE sunt setați în registrele de stare de transmisie/recepție corespunzătoare.

    7.2.14 Registrul de stare transmisie 0 (TXS0)

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    Rezervat IGN_IN CULOARE COMUTARE rezervă TX_EN
    - 0 0 0 0 0 - 0
    - r/w r/w HW r/w - r/w HW

    TCOUNT. Contor de transferuri. Acest bit indică numărul de octeți gol disponibili în FIFO. Acest câmp nu depășește niciodată 8 pentru punctul final 0.

    TX_DONE. Transfer finalizat. Când bitul este setat, indică faptul că pachetul a fost transmis complet. Este șters când acest registru este citit.

    ACK_STAT. Starea de confirmare. Acest bit indică starea primită de la controlerul principal confirmând primirea unui pachet trimis anterior. Acest bit este interpretat când TX_DONE este setat la „1”. Este setat atunci când se primește o confirmare; în caz contrar, rămâne purificat. Acest bit este, de asemenea, șters atunci când acest registru este citit.

    7.2.15 Registrul de comandă de transmisie 0 (TXC0)

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    Rezervat IGN_IN CULOARE COMUTARE rezervă TX_EN
    - 0 0 0 0 0 - 0
    - r/w r/w HW r/w - r/w HW

    TX_EN. Permisiune de transmisie. Acest bit permite transferul de date de la FIFO. Este șters de cip după transmiterea unui singur pachet, sau o confirmare STALL, ca răspuns la simbolul IN. Trebuie setat de firmware pentru a începe transmiterea pachetului. Bitul RX_EN din Registrul de comandă de recepție 0 (RXC0) are prioritate față de acest bit; deoarece dacă RX_EN este setat, bitul TX_EN este ignorat până când RX_EN este șters.

    Pachetele cu lungime zero sunt afișate când acest bit este setat fără a scrie date FIFO.

    COMUTARE.

    CULOARE. Scrierea unui 1 pe acest bit șterge toate datele din punctul de control FIFO de control, resetează punctul final la starea Inactiv, șterge indicatorii de citire și scriere FIFO și apoi se șterge singur. Dacă punctul final utilizează în prezent FIFO0 pentru a transfera date pe USB, atunci curățarea este amânată până la finalizarea transferului. Acest bit este șters la resetare. Este echivalent cu bitul FLUSH din registrul RXC0.

    IGN_IN. Ignoră caracterul IN. Când acest bit este setat, punctul final va ignora orice caracter IN direcționat către adresa sa configurată.

    7.2.16 Registrul de transmitere a datelor 0 (TXD0)

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    TXFD
    -
    r/w

    TXFD. Transfer de octeți de date FIFO. Pentru o descriere a procesării datelor, consultați „Operațiuni bidirecționale ale punctului final de control FIFO0” în Secțiunea 6.2.2.

    Software-ul hardware se așteaptă să fie scris doar pachetul de date util. PID și CRC16 sunt generate automat.

    7.2.17 Registrul de stare de primire 0 (RXS0)

    Acesta este registrul de stare de primire pentru punctul final de control bidirecțional 0. Pentru a primi un pachet SETUP după primirea unui pachet OUT/SETUP de lungime zero, există două copii hardware ale acestui registru. Unul conține starea de primire a unui pachet de lungime zero, iar celălalt conține starea următorului pachet SETUP cu date. Dacă un pachet cu lungime zero urmează un pachet SETUP, atunci prima citire a acestui registru arată starea pachetului cu lungime zero (cu RX_LAST setat la 1 și RCOUNT setat la 0), iar a doua citește starea pachetului SETUP .

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    rezervă ÎNFIINȚAT COMUTARE RX_LAST RCOUNT3-0
    - 0 0 0 0 0 0 0
    - CoR CoR CoR r

    RCOUNT. Ghișeu de recepție. Acest bit indică numărul de octeți prezenți în RX FIFO. Acest câmp nu depășește niciodată 8 pentru punctul final 0.

    RX_LAST.

    COMUTARE. Acest bit determină dacă PID-ul este utilizat la transmiterea unui pachet. O valoare de „0” generează un PID DATA0, iar o valoare de „1” generează un PID DATA1. Acest bit nu este modificat de hardware.

    ÎNFIINȚAT. Acest bit indică faptul că pachetul de instalare a fost primit. Acest bit nu se modifică pentru un pachet de lungime zero. Acest bit este șters când acest registru este citit.

    7.2.18 Primire registru de comandă 0 (RXC0)

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    Rezervat CULOARE IGN_SETUP IGN_OUT RX_EN
    - 0 0 0 0
    - r/w r/w r/w r/w HW

    RX_EN. Permisiune de recepție. Recepția caracterului OUT este dezactivată după fiecare recepție a unui pachet de date sau când este returnată o confirmare STALL ca răspuns la caracterul OUT. Pachetele cu lungime zero sunt afișate când acest bit este setat fără a scrie date FIFO. Un „1” trebuie scris pe acest bit pentru a reactiva recepția datelor. Recepția pachetului SETUP este întotdeauna permisă. În cazul pachetelor SETUP dus-întors (pentru un punct final dat), unde este primit un pachet SETUP valid cu alte caractere non-SETUP, controlerul punctului final renunță la noul pachet SETUP și returnează un ACK. Aceasta asigură recuperarea dintr-o stare în care ACK-ul primului caracter SETUP a fost pierdut de controlerul gazdă.

    CULOARE. Scrierea unui 1 pe acest bit șterge toate datele din punctul de control FIFO de control, resetează punctul final la starea Inactiv, șterge indicatorii de citire și scriere FIFO și apoi se șterge singur. Dacă punctul final utilizează în prezent FIFO0 pentru a transfera date pe USB, atunci curățarea este amânată până la finalizarea transferului. Acest bit este șters la resetare. Este echivalent cu bitul FLUSH din registrul TXC0.

    IGN_OUT. Ignoră caracterul OUT. Când acest bit este setat, punctul final va ignora orice caracter OUT direcționat către adresa sa configurată.

    IGN_SETUP.

    7.2.19 Registrul de transfer de date 0 (RXD0)

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    RXFD
    -
    r/w

    RXFD. Primește octetul de date FIFO. Pentru o descriere a procesării datelor, consultați „Operațiuni bidirecționale ale punctului final de control FIFO0” în Secțiunea 6.2.2.

    Software-ul hardware se așteaptă să citească numai pachetul de date util. PID și CRC16 sunt eliminate automat din fluxul de date primite.

    7.2.20 Registrul de control al punctului final 0 (EPC1…EPC6)

    Fiecare punct final unidirecțional are un registru EPCx cu biții descriși mai jos.

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    STAND rezervă ISO EP_EN EP3-0
    0 - 0 0 0 0 0 0
    r/w - r/w r/w r/w

    EP. Punctul final. Acest câmp conține adresa punctului final pe 4 biți.

    EP_EN. Rezoluția punctului final. Când acest bit este setat, câmpul EP3-0 este utilizat pentru compararea adresei, împreună cu câmpul AD6-0 din registrul FAR. Descriere în secțiunea 6.2. Când este șters, punctul final nu răspunde la niciun caracter de pe magistrala USB.

    Notă: AD_EN în registrul FAR permite compararea adresei globale a dispozitivului. Dacă este șters, dispozitivul nu răspunde la nicio adresă, indiferent de starea EP_EN.

    ISO. Izocron. Când acest bit este setat la „1”, punctul final este izocron. Aceasta presupune că un NAK este trimis dacă punctul final nu este pregătit, dar este permis; deoarece dacă se primește un caracter IN și nu există date disponibile în FIFO pentru transmisie sau dacă este primit un caracter OUT și FIFO este plin, atunci nu există nicio strângere de mână USB pentru transmisia izocronă.

    STAND. Setarea acestui bit face ca cipul să genereze confirmări de semnal STALL în următoarele condiții:

    3. FIFO de transmisie este activat și simbolul IN este primit.

    4. FIFO de recepție este activat și este primit un caracter OUT.
    Notă: Caracterul SETUP nu face ca semnalul STALL să fie afirmat atunci când acest bit este setat.

    7.2.21 Registrul de stare de transmisie X (TXS1, TXS2, TXS3)

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    TX_URUN ACK_STAT TX_DONE TCOUNT4-0
    0 0 0 0 0 0 0 0
    CoR CoR CoR r

    TCOUNT. Contor de transferuri. Acest bit indică numărul de octeți gol disponibili în FIFO. Dacă acest număr este mai mare decât 31, atunci valoarea 31 este raportată.

    TX_DONE. Transfer finalizat. Când bitul este setat, indică faptul că punctul final a răspuns la pachetul USB. Trei condiții pot determina setarea bitului:

    1. Întregul pachet de date este transmis ca răspuns la simbolul IN cu operare non-ISO.

    2. Punctul final a trimis o confirmare ca răspuns la caracterul IN.

    3. Coada stabilită pentru serviciul de cadre ISO a fost trimisă sau eliminată.
    Acest bit este șters când acest registru este citit.

    ACK_STAT. Starea de confirmare. Acest bit este interpretat când TX_DONE este setat.

    Pentru operațiuni non-ISO, acest bit indică starea ACK a unui pachet trimis anterior. Acest bit este el însuși setat când se primește un ACK; în caz contrar, se șterge.

    Pentru operațiunile ISO, acest bit este setat dacă a avut loc o comparație cu octeți mici cu numărul de cadre (a se vedea „IGN_ISOMSK” în Secțiunea 7.2.22) și datele au fost trimise ca răspuns la caracterul IN. În caz contrar, acest bit este șters, FIFO este șters și TX_DONE este setat.

    Acest bit este, de asemenea, șters atunci când acest registru este citit.

    TX_URUN. Oprire anticipată a transmiterii FIFO. Acest bit este setat dacă FIFO de transmisie devine gol în timpul transmisiei și nu există date noi scrise în FIFO. Dacă da, controlerul de arhitectură de rețea (MAC) emite o eroare de potrivire a bitului în urma EOP. Acest bit este șters când acest registru este citit.

    7.2.22 Registrul de comandă de transmisie X (TXC1, TXC2, TXC3)

    Fiecare punct final de transmisie (1, 3 și 5) are un registru de comandă de transmisie cu biții descriși mai jos.

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    IGN_ISOMSK TFWL1-0 RFF CULOARE COMUTARE ULTIMUL TX_EN
    0 0 0 0 0 0 0 0
    r/w r/w r/w HW r/w HW r/w r/w HW r/w HW

    TX_EN. Permisiune de transmisie. Acest bit permite transferul de date de la FIFO. Este șters de cip după transmiterea unui singur pachet, sau o confirmare STALL, ca răspuns la simbolul IN. Trebuie setat de firmware pentru a începe transmiterea pachetului.

    ULTIMUL. Setarea acestui bit indică faptul că pachetul de intrare a fost scris în FIFO. Acesta este folosit pentru a introduce un flux de date în FIFO în timp ce un transfer real este în curs. Dacă ULTIMUL bit nu este setat și FIFO de transmisie devine gol în timpul transmisiei, atunci EOP-ul este urmat de o eroare de coerență a magistralei. Pachetele cu lungime zero sunt indicate prin setarea acestui bit fără a scrie date în FIFO.

    COMUTARE. Funcționarea acestui bit diferă în funcție de utilizarea operațiunilor ISO sau non-ISO.

    Pentru operațiuni non-ISO, specifică utilizarea PID-ului la transmiterea pachetului. O valoare de „0” generează un PID DATA0, iar o valoare de „1” generează un PID DATA1. Acest bit nu este modificat de hardware.

    Pentru operațiunile ISO, acest bit și biții inferiori ai contorului de cadre (FNL0) acționează ca maxim pentru ca bitul TX_EN să aplice predeterminarea ordinii de pachete pentru numerele speciale de cadre; deoarece Transmisia este posibilă numai dacă bitul 0 din registrul FNL este setat la TOGGLE. Dacă caracterul IN nu este primit în timp ce această condiție este adevărată, atunci conținutul FIFO este șters cu următorul SOF. Dacă punctul final este setat la ISO, atunci datele sunt întotdeauna transmise cu DATA0 PID.

    Acest bit nu este modificat de hardware.

    CULOARE. Scrierea unui 1 pe acest bit șterge toate datele din FIFO de transmisie corespunzătoare, resetează punctul final la starea Inactiv și șterge pointerii FIFO de citire și scriere. Dacă controlerul de arhitectură de rețea (MAC) utilizează în prezent FIFO0 pentru a transfera date, atunci datele sunt șterse după ce transferul este finalizat. După ștergerea datelor, acest bit este resetat de hardware.

    RFF. Reumplere FIFO. Setarea ULTIMULUI bit stochează automat indicatorul de citire transmis (TXRP) într-un buffer. Când bitul RFF este setat, TXRP-ul tamponat este reîncărcat în TXRP. Acest lucru permite utilizatorului să repete ultima tranziție dacă nu a fost primit un ACK de la controlerul principal. Dacă controlerul de nivel al arhitecturii de rețea (MAC) utilizează în prezent un transfer FIFO, TXRP este reîncărcat numai după ce transferul se încheie. După o repornire, acest bit este resetat de hardware.

    TFWL. Se transmite limită de avertizare de încălcare a FIFO. Acești biți determină câți octeți pot fi transferați din FIFO-ul corespunzător înainte să apară o condiție de oprire prematură. Dacă numărul de octeți rămași în FIFO este egal sau mai mic decât limita de avertizare de încălcare selectată, atunci bitul TXWARN din registrul FWEV este setat. Pentru a evita întreruperile cauzate de setarea acestui bit (în timp ce se completează FIFO înainte de a începe un transfer), bitul TXWARN este setat numai când transferul de la punctul final este activat (TX_ENx este setat în registrul TXCx). Vezi tabelul 8.

    Tabel 8. Setarea limitei de avertizare de încălcare a FIFO de transmisie

    IGN_ISOMSK. Ignorați masca ISO. Acest bit este eficient numai dacă punctul final este setat să fie izocron. Dacă acest bit este setat, dezactivează blocarea anumitor numere de cadre cu funcția de intercalare a bitului TOGGLE. Astfel, datele sunt transmise la primirea următorului caracter IN. Dacă bitul este clar, atunci datele sunt transmise când FNL0 este egal cu TOGGLE. Acest bit este șters la resetare.

    7.2.23 Registrul de transmitere a datelor X (TXD1, TXD2, TXD3)

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    TXFD
    -
    w

    TXFD. Transfer de octeți de date FIFO. Pentru o descriere a procesării datelor de la punctul final FIFO, consultați „Transmiterea operațiunilor de la punctul final (TXFIFO1, TXFIFO2, TXFIFO3)” în Secțiunea 6.2.2. Software-ul hardware se așteaptă să fie scris doar pachetul de date util. PID și CRC16 sunt inserate automat în fluxul de date primite.

    7.2.24 Registrul de stare de primire X (RXS1, RXS2, RXS3)

    Fiecare canal de punct final de recepție (2, 4 și 6) are un registru de stare de recepție cu biții definiți mai jos. Pentru a primi un pachet SETUP după primirea unui pachet OUT de lungime zero, există două copii hardware ale acestui registru. Unul conține starea de primire a unui pachet de lungime zero, iar celălalt conține starea următorului pachet SETUP cu date. Dacă un pachet cu lungime zero urmează un pachet SETUP, atunci prima citire a acestui registru indică starea pachetului cu lungime zero, iar a doua citește starea pachetului SETUP.

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    RE_ERR ÎNFIINȚAT COMUTARE RX_LAST RCOUNT3-0
    0 0 0 0 0 0 0 0
    CoR CoR CoR HW CoR r

    RCOUNT. Ghișeu de recepție. Acest bit indică numărul de octeți prezenți la punctul final al FIFO de recepție. Acest câmp nu depășește niciodată 15, pentru punctul final 0.

    RX_LAST. Ultimii octeți primiți. Indică faptul că a fost trimis un ACK la finalizarea unei operațiuni de primire cu succes. Este șters când acest registru este citit.

    COMUTARE. Funcționarea acestui bit diferă în funcție de utilizarea ISO sau non-ISO.

    Pentru operațiuni non-ISO, o valoare de „0” indică faptul că un pachet cu un PID DATA0 a fost primit cu succes, iar o valoare de „1” indică faptul că acest pachet are un PID DATA1.

    Pentru operațiunile ISO, acest bit este indicat de biții scăzuti ai contorului de cadre (FNL0) după o recepție cu succes pentru acest punct final.

    Acest bit este resetat la „0” când este citit registrul RXSx.

    ÎNFIINȚAT. Acest bit indică faptul că pachetul de instalare a fost primit. Acest bit este șters când acest registru este citit.

    RX_ERR. Eroare de recepție. Când bitul este setat, indică o eroare de nivel de rețea, cum ar fi o eroare de potrivire a biților sau CRC. Dacă acest bit este setat, firmware-ul trebuie să ștergă FIFO-ul corespunzător.

    7.2.25 Primire registru de comandă X (RXC1, RXC2, RXC3)


    Fiecare dintre punctele finale de recepție (2,4 și 6) are un registru de comandă de recepție cu biții descriși mai jos.

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    rezervă RFWL rezervă CULOARE IGN_SETUP rezervă RX_EN
    - 0 0 - 0 0 - 0
    - r/w - r/w r/w - r/w

    RX_EN. Permisiune de recepție. Recepția caracterului OUT este dezactivată după fiecare recepție a unui pachet de date sau când este returnată o confirmare STALL ca răspuns la caracterul OUT. Un „1” trebuie scris pe acest bit pentru a reactiva recepția datelor. Recepția pachetului SETUP este întotdeauna permisă. În cazul pachetelor SETUP dus-întors (pentru un punct final dat), în care un pachet SETUP valid este primit cu alte caractere non-SETUP, punctul final de primire renunță la noul pachet SETUP și returnează un ACK. Dacă, în orice alt caz, mașina de stare de recepție nu poate accepta pachetul SETUP, atunci HANDSHAKE-ul nu poate fi generat.

    IGN_SETUP. Ignorând simbolul SETUP. Când acest bit este setat, punctul final va ignora orice caracter SETUP direcționat către adresa sa configurată.

    CULOARE. Scrierea unui 1 pe acest bit șterge toate datele din punctul de control FIFO de control, resetează punctul final la starea Inactiv și șterge indicatorii de citire și scriere FIFO. Dacă controlerul de arhitectură de rețea (MAC) utilizează în prezent FIFO0 pentru a primi date, atunci spălarea este întârziată până când recepția este finalizată.

    RFWL1-0. Se primește limita de avertizare privind încălcarea FIFO. Acești biți determină câți octeți pot fi primiți de la FIFO corespunzător înainte să apară o condiție de anulare. Dacă numărul de octeți goli rămași în FIFO este egal sau mai mic decât limita de avertizare de încălcare selectată, atunci bitul RXWARN din registrul FWEV este setat.

    Tabelul 9: Setarea limită de alertă pentru încălcarea FIFO de primire

    7.2.26 Registrul de transmitere a datelor X (RXD1, RXD2, RXD3)

    Fiecare dintre cele trei puncte finale FIFO de recepție are un registru de date de recepție cu biții descriși mai jos.

    bitul 7 bitul 6 bitul 5 bitul 4 bitul 3 bitul 2 bitul 1 bit 0
    RXFD
    -
    r/w

    RXFD. Primește octetul de date FIFO. Pentru o descriere a procesării datelor la punctul final FIFO, consultați „Operațiunile de recepție a punctului final (RXFIFO1, RXFIFO2, RXFIFO3)” în Secțiunea 6.2.2.

    Software-ul hardware se așteaptă să citească numai pachetul de date util. PID și CRC16 sunt întrerupte de mașina de stare de recepție.

    7.3 Înregistrați plasarea

    Tabelul 10 conține o listă a tuturor registrelor dispozitivelor, adresele și abrevierile acestora.

    Tabel 10. Card de memorie USBN9603/4

    Abordare Înregistrați mnemonicul Înregistrați numele
    0x00 MCNTRL Sediu
    0x01 CCONF Configurarea ceasului
    0x02 Rezervat
    0x03 SCĂPA ID modificare
    0x04 DEPARTE Adresă funcțională
    0x05 NFSR Starea funcțională a nodului
    0x06 MAEV Evenimentul principal
    0x07 MAMSK Mască principală
    0x08 ALTEV Eveniment alternativ
    0x09 ALTMSK Mască intercalată
    0x0A TXEV Eveniment de transfer
    0x0B TXMSK Mască de transmisie
    0x0C RXEV Eveniment de primire
    0x0D RXMSK Mască de recepție
    0x0E NAKEV Eveniment NAK
    0x0F NAKMSK Mască NAK
    0x10 FWEV Eveniment de avertizare privind încălcarea FIFO
    0x11 FWMSK Avertisment cu mască despre încălcările FIFO
    0x12 FNH Număr de cadru octet mare
    0x13 FNL Junior buy numărul de cadru
    0x14 DMACNTRL Managementul DMA
    0x15 DMAEV eveniment DMA
    0x16 DMAMSK Mască DMA
    0x17 MIR Oglindă
    0x18 DMACNT Contor DMA
    0x19 DMAERR Contor de erori DMA
    0x1A Rezervat
    0x1B W.K.U.P. Includere
    0x1C - 0x1F Rezervat
    0x20 EPC0 Managementul punctelor finale 0
    0x21 TXD0 Transfer de date 0
    0x22 TXS0 Starea transferului 0
    0x23 TXC0 Comanda de transfer 0
    0x24 Rezervat
    0x25 RXD0 Primește date 0
    0x26 RXS0 Starea de primire 0
    0x27 RXC0 Primește comanda 0
    0x28 EPC1 Managementul punctelor finale 1
    0x29 TXD1 Transfer de date 1
    0x2A TXS1 Starea de transfer 1
    0x2B TXC1 Comanda de transfer 1
    0x2C EPC2 Managementul punctelor finale 2
    0x2D RXD1 Primirea datelor 1
    0x2E RXS1 Starea de primire 1
    0x2F RXC1 Primește comanda 1
    0x30 EPC3 Managementul punctelor finale 3
    0x31 TXD2 Transfer de date 2
    0x32 TXS2 Starea de transfer 2
    0x33 TXC2 Comanda de transfer 2
    0x34 EPC4 Managementul punctelor finale 4
    0x35 RXD2 Primirea datelor 2
    0x36 RXS2 Starea de primire 2
    0x37 RXC2 Primește comanda 2
    0x38 EPC5 Managementul punctelor finale 5
    0x39 TXD3 Transferul de date 3
    0x3A TXS3 Starea de transfer 3
    0x3B TXC3 Comanda de transfer 3
    0x3C EPC6 Managementul punctelor finale 6
  • Zona registrelor de funcții speciale SFR (Registrul de funcții speciale) ale MK 8051 de bază este extinsă și conține 21 de registre, al căror scop este prezentat în tabel. 2.3. Aici sunt date și numele lor originale în limba engleză, pe baza cărora au fost date numele lor mnemonice.

    Registrele funcțiilor speciale care indică adresele și valorile inițiale ale registrelor sunt prezentate în tabel. 2.4. Toate registrele au adrese de octeți, dar 16 dintre ele, pe lângă adresarea de octeți, permit și adresarea de biți individuali. Aceste registre sunt evidențiate cu aldine în tabel, iar adresele absolute ale biților individuali și mnemonicii lor sunt indicate pentru ele. De asemenea, rețineți că aceste registre au o adresă care se termină cu numerele 0 și 8.

    Tabelul 2.3

    Inregistreaza-te

    Nume

    Acumulator

    Înregistrați expanderul acumulatorului

    DPTR (pointer de date) pe 16 biți

    Octet scăzut al indicatorului de date DPTR (Data Pointer Low)

    Octet înalt al indicatorului de date DPTR (Data Pointer High)

    Cuvânt de stare program

    Stack Pointer Register

    Port Latch Register P0

    Registrul de blocare portului P1

    Registrul de blocare portului P2

    Registrul de blocare a portului P3

    Registrul de numărare temporizator/contor Octet scăzut 0

    Registrul de numărare temporizator/contor Octet mare 0

    Registrul de numărare temporizator/contor 1 octet scăzut

    Registrul de numărare temporizator/contor 1 octet mare

    Înregistrați-vă pentru setarea modurilor contor cronometru (Mod cronometru/contor)

    Registrul de control al cronometrului/contorului

    Buffer de date UART (Buffer serial)

    Registrul de control UART (Serial Control).

    Întreruperea registrului prioritar

    Întrerupe activare registru

    Registrul de control al puterii

    Adresa biților direct adresabili poate fi scrisă fie ca expresie<Регистр>.<Разряд>, sau ca o adresă de biți absolută. De exemplu, intrarea TCON.2 înseamnă adresa celui de-al doilea bit al registrului TCON. În plus, mulți biți din registrele de control au propriile nume - de exemplu, acest bit se numește IT1.

    Tabelul 2.4

    Inregistreaza-te

    Abordare

    Adrese și mnemonice de biți

    Sens

    laresetare

    Final masa. 2.4

    Inregistreaza-te

    Abordare

    AdreseȘimnemonicebiți

    Sens

    laresetare

    În fig. Figura 2.13 prezintă întregul spațiu al registrelor cu funcții speciale cu locația lor afișată. După cum se poate observa din figură, dezvoltatorii au construit în arhitectura microcontrolerului o rezervă foarte semnificativă pentru crearea de noi modele cu periferice și funcționalități extinse.

    Să ne uităm mai detaliat la scopul registrelor de funcții speciale.

    Orez. 2.13. Spațiu de registru cu funcții speciale

    Bateria A și extensia bateriei B . Familia de microcontrolere 8051 are o arhitectură centrată pe baterie. Acumulatorul A este un registru de 8 biți care este sursa operandului și locația rezultatului atunci când se efectuează operații aritmetice și logice și o serie de operațiuni de transfer de date. Acumulatorul poate efectua operații logice; primește și rezultatele unui număr de operații logice și comenzi speciale de mișcare. Unele funcții sunt efectuate numai cu acumulatorul: deplasarea, testarea conținutului pentru zero, etc. Un registru special de expansiune de acumulator de 8 biți B este utilizat împreună cu acumulatorul în timpul operațiilor de înmulțire și împărțire pentru a stoca al doilea operand de intrare și a plasa cel returnat. opt biți din rezultat. În toate celelalte operațiuni, registrul B poate fi folosit ca registru de lucru normal.

    În ciuda faptului că arhitectura familiei de microcontrolere 8051 este centrată pe baterie, este posibil să se efectueze o serie de operațiuni fără a ocoli bateria. Datele pot fi mutate din orice celulă de pe cip în orice registru prin adresă sau adresă indirectă; orice registru poate fi încărcat cu o constantă, ocolind acumulatorul.

    Data Pointer Register DPTR . Acest registru este conceput pentru a stoca o adresă de 16 biți atunci când se execută instrucțiuni de mutare variabilă în întreg spațiul de adrese VPD de până la 64 KB. Constă din două registre de 8 biți accesibile prin software DPH (octet înalt) și DPL (octet scăzut), care, dacă este necesar, pot fi utilizate ca registre independente de uz general. În plus, DPTR servește ca registru de bază pentru adresarea indirectă în instrucțiunile de redirecționare.

    Registrul cuvântului de stare a programului P.S.W. . Când sunt executate multe comenzi în ALU, se formează un număr de semne care sunt înregistrate în registrul PSW. După executarea următoarei comenzi, unele informații despre rezultatul execuției acesteia pot fi introduse în biți individuali ai acestui registru, numiți steaguri. În plus, PSW conține steaguri pentru selectarea băncii curente de registre de uz general și un steaguri programabil de utilizator.

    Stack pointer register SP . O stivă este o zonă definită de utilizator de memorie de date, care este scrisă și citită pe baza ultimului intrat, primul ieșit. Registrul SP de pointer al stivei de opt biți conține adresa ultimului octet scris în stivă. Stiva este folosită pentru a trece parametri între subrutine, pentru a stoca temporar variabile și pentru a stoca cuvântul de stare în timpul execuției rutinelor de serviciu de întrerupere.

    Conținutul indicatorului de stivă este automat decrementat sau incrementat ori de câte ori datele sunt scrise sau scoase din stivă și în timpul apelurilor la și retururilor din subrutine. Teoretic, stiva poate avea o adâncime de 128 de octeți. Indicatorul stivei este resetat la 07H, deci adresa de pornire a conținutului stivei este 08H. Schimbând în mod programatic conținutul indicatorului stivei, puteți muta stiva în orice zonă a RAM rezidentă.

    Atunci când se utilizează o stivă, este necesar să se țină cont de faptul că adâncimea stivei nu este controlată de hardware, iar dacă crește excesiv, celulele de memorie care nu sunt destinate stivei pot fi ocupate, ducând la pierderea de informații din acestea. Stiva hardware este utilizată pentru a stoca adresa de retur atunci când se întreține o întrerupere.

    Încuietori porturi I/O paralele . Porturile P0…P3 sunt porturi I/O bidirecționale și sunt concepute pentru a asigura schimbul de informații între MK și dispozitivele externe, formând 32 de linii I/O. Registrele de blocare ale acestor porturi sunt registre tampon care stochează informații în timpul introducerii și ieșirii. Scopul și caracteristicile lucrului cu porturi sunt discutate în continuare într-o secțiune separată.

    Registre cronometru/contor . Registrele TMOD, TCON și perechile de registre cu nume simbolice TH0, TL0 și TH1, TL1 sunt utilizate pentru a asigura funcționarea a două temporizatoare/contoare pe 16 biți controlate de software. Scopul detaliat al acestor registre va fi discutat la descrierea cronometrelor/contoarelor.

    Registrele portului serial . Registrele cu nume simbolice SBUF și SCON sunt destinate să seteze moduri și să controleze funcționarea unui transceiver asincron universal. Descrierea lor este dată în secțiunea dedicată luării în considerare a funcționării UART.

    Întreruperea registrelor . Registrele IP și IE sunt utilizate pentru a activa întreruperile de la surse individuale de întrerupere și pentru a modifica prioritățile acestor surse. Ca și în cazul precedent, aceste registre vor fi discutate la descrierea sistemului de întrerupere.

    Registrul de control al puterii PCON . Folosind biții acestui registru, sunt setate modurile inactiv și de oprire pentru economisirea energiei. Unul dintre biți servește ca bit de dublare a vitezei de transmisie UART.

    În încheierea acestei secțiuni, trebuie remarcat faptul că, odată cu dezvoltarea ulterioară a familiei, în zona registrelor cu funcții speciale se adaugă registre pentru resurse extinse ale noilor modele de microcontrolere. De exemplu, MK-urile moderne includ module pentru temporizatoare suplimentare, matrice de contoare programabile PCA (Programmable Counter Array), timer watchdog WDT (Watchdog Timer), acces direct la memorie DMA (Direct Memory Access), convertor analog-digital ADC (Analog Digital). Convertor) și etc.

    Când un casier vinde o sticlă de alcool tare, în EGAIS se ia din balanța celui de-al doilea registru. Această regulă este în vigoare de la 1 octombrie 2016. Ca urmare, dacă cantitatea de produse din al doilea registru este zero, soldul acestuia intră în negativ, adică la sfârșitul zilei de lucru, casieria are sold negativ pe al doilea registru. Pentru a evita acest lucru, trebuie să transferați produsele din primul registru în al doilea.

    Cum se transferă mărfuri

    În secțiunea „Produsele mele”, selectați „Transfer în registru 2”, apoi „Transfer produse”. Dacă soldul nu a fost actualizat de mult timp, serviciul o va face automat. Ca urmare, utilizatorul va vedea o listă de mărfuri pentru care registrul nr. 2 are un sold negativ.

    La efectuarea unui transfer se vor indica facturile pe care au fost primite marfa. Sistemul selectează automat cele mai vechi documente, deoarece bunurile din acestea au fost cel mai probabil deja vândute.

    Utilizatorul ar trebui să verifice lista și să facă clic pe butonul Transfer. EGAIS va procesa datele și va confirma transferul - soldul negativ din al doilea registru va fi închis.

    Deocamdată, serviciul vă permite să transferați exact cât este necesar pentru a acoperi soldul negativ. Mai târziu, dezvoltatorii plănuiesc să adauge capacitatea de a transfera o cantitate arbitrară de bunuri.

    Registrele EGAIS sunt concepute pentru a stoca informații despre resturile de produse alcoolice. La urma urmei, sistemul de stat monitorizează nu numai vânzarea de alcool, ci și datele despre rămășițele sale.

    Ce sunt registrele EGAIS

    Registrul nr. 1 este un depozit virtual. Informații despre produs și producătorul acestuia sunt colectate aici, inclusiv identificatorii de certificat A și B. Registrul nr. 1 înregistrează primirea produselor alcoolice, mișcarea între puncte, retur, precum și anularea și plasarea în bilanțul Unificat. Sistem informatic automatizat de stat.

    Registrul nr. 2 este o platformă de tranzacționare virtuală. Acest registru înregistrează vânzarea cu amănuntul a alcoolului, anularea și plasarea în bilanțul Sistemului Informațional Unificat de Stat Automatizat.

    Produsele cu certificate A și B diferite, dar cu aceleași coduri de alcool sunt grupate în al doilea registru sub un singur nume. Să explicăm cu un exemplu.

    Punctul de vânzare cu amănuntul a primit 3 loturi de mărfuri cu același nume și volum de la diferiți furnizori. Pe registrul nr. 1 fiecare parte va apărea separat:

    • Vodcă „Talka” 0,5 l. 3 buc. FB-000000000000001
    • Vodcă „Talka” 0,5 l. 5 bucăți. FB-000000000000002
    • Vodcă „Talka” 0,5 l. 4 lucruri. FB-000000000000003

    Când produsele sunt transferate în al 2-lea registru, aceste produse vor fi combinate într-un singur grup. Utilizatorul va vedea nu codul produsului prin care va fi combinat, ci numele acestuia: Vodcă „Talka” 0,5 l. 12 buc.

    Odată ce produsul a fost transferat în al doilea registru, acesta nu mai poate fi returnat furnizorului și nici mutat într-un alt punct de vânzare cu amănuntul. La transfer, produsele sunt anulate din bilanţul EGAIS pe baza unor informaţii scurte. Întrucât Pentru a vă întoarce sau a vă muta, aveți nevoie de un certificat B, dar nu este luat în considerare în al doilea registru.

    Registrele contabile ale alcoolului

    Să luăm în considerare toate căile pe care le poate lua o sticlă de băuturi alcoolice într-un magazin.

    Chitanță la depozit

    De obicei, produsele provin de la un furnizor. Compilat scrisoare de parcurs, Produsul este plasat pe primul registru.

    O altă opțiune de admitere - identificată produse anterior neevaluate. Dacă toate documentele de pe acesta sunt disponibile, atunci acesta poate fi înregistrat în primul registru. Dacă nu, atunci să înregistrați numărul 2.

    Anularea produsului

    Produsele sunt anulate din mai multe motive.

    Vânzări de alcool tare. Marfa se vinde prin casa de marcat, aceasta genereaza o chitanta si o trimite electronic la EGAIS. Există o radiere automată din registrul nr. 2.

    Vânzare la robinet de bere, cidru, hidromel și alte băuturi similare. Produsele trebuie anulate cel târziu în ziua următoare după deschiderea recipientului. Ar trebui să procedați în această ordine:

    • după deschiderea unui recipient de bere și vânzarea unei anumite cantități din acesta, întregul container este înregistrat în jurnalul de vânzări;
    • apoi se întocmește act de radiere pentru întregul container.

    Dacă mărfurile au fost primite prin facturi prin Kontur.Market (EGAIS), atunci aceasta trebuie radiată din registrul în care este listată.

    Întoarcere sau relocare. Astfel de operațiuni sunt documentate cu un conosament. Atât în ​​cazul deplasării, cât și în cazul returului, TTN-ul consumabil se transmite din registrul nr. 1. Al doilea registru nu este implicat în aceste operațiuni.

    Alte anulări - daune, pierderi, furt. Procesul-verbal de radiere se intocmeste manual cu indicarea obligatorie a motivelor.

    Există preferințe pentru vânzătorii individuali - pot nu înregistrați alcoolul în EGAIS dacă este vândut prin casa de marcat. Aceasta se aplică:

    1. Pentru unitățile de catering unde alcoolul se vinde în porții.În ziua deschiderii sticlei, trebuie să întocmiți un raport de anulare și să îl trimiteți la RAR.
    2. La magazinele rurale unde nu există acces constant la internet. Raportul de anulare poate fi trimis cel târziu în ziua următoare de la data vânzării.

    Trebuie amintit că atunci când vindeți băuturi alcoolice puternice și bere, trebuie să imprimați Descrierea mărfurilor. Regula nu se aplică doar antreprenorilor care utilizează regimuri speciale. Au amânare până la 1 februarie 2021.

    Notă! Există registrele 1 și 2 ale Sistemului Informațional Unificat de Stat Automatizat.

    Ultima dată când am luat în considerare opțiunea de creștere a ieșirilor microcontrolerului folosind un cip de decodor, astăzi vom lua în considerare o opțiune mai avansată folosind un registru de deplasare 74HC595. Folosind un singur microcircuit, puteți avea la dispoziție 8 ieșiri suplimentare, folosind doar 3 picioare de microcontroler. Și datorită expansibilității, prin adăugarea unui al doilea cip, numărul de ieșiri poate fi crescut la 16. Dacă nu este suficient, puteți adăuga un al treilea și obțineți 24 de ieșiri pentru utilizare, iar acest truc poate fi repetat de câte ori iti place. În același timp, numărul picioarelor ocupate ale microcontrolerului va rămâne 3, frumos!

    Deci, să aruncăm o privire mai atentă la scopul pinii microcircuitului și să învățăm cum să controlăm registrul de deplasare 74hc595 din Bascom-AVR.

    În primul rând, să ne familiarizăm cu ieșirile microcircuitului sau, mai degrabă, cu funcționalitatea acestora. Mai jos este o tăiere din fișa de date pentru 74hc595 cu denumirea pinii microcircuitului:


    • Q0...Q7– ieșirile pe care le vom controla. Poate fi în trei stări: una logică, zero logic și stare Hi-Z de înaltă rezistență
    • GND- Pământ
    • Q7′– ieșire destinată conectării în serie a registrelor.
    • DOMNUL.– resetarea registrului.
    • SH_CP– intrare pentru impulsuri de ceas
    • ST_CP– intrare de blocare a datelor
    • O.E.– o intrare care transformă ieșirile din HI-Z în stare de funcționare
    • D.S.- introducere a datelor
    • VCC– alimentare 5 volți

    Înregistrează logica

    La intrarea ceasului SH_CP apare unul logic, bitul situat la intrarea datelor D.S. citit și scris în registrul de schimb. Acest bit este scris la bitul cel mai puțin semnificativ. Când următorul impuls de nivel înalt ajunge la intrarea ceasului, următorul bit de la intrarea de date este scris în registrul de deplasare. Iar bitul care a fost scris mai devreme este mutat cu un bit spre stânga, iar locul lui este luat de bitul nou sosit. Următorul impuls de ceas va scrie al treilea bit, iar cei doi anteriori se vor deplasa mai departe. Când toți cei opt biți sunt umpluți și sosește al nouălea impuls de ceas, registrul începe să se umple din nou de la bitul cel mai puțin semnificativ și totul se repetă din nou. Pentru ca datele să apară la ieșiri Q0...Q7 trebuie să-i „clapeți”. Pentru a face acest lucru, trebuie să aplicați unul logic intrării ST_CP.

    - DOMNUL. resetează registrul, setând toate ieșirile Q0...Q7 la o stare logică zero. Pentru a efectua o resetare, trebuie să aplicați un zero logic acestei intrări și să aplicați un impuls pozitiv la intrare ST_CP. O funcție foarte utilă, deoarece atunci când microcircuitul este aplicat energie, la ieșire apare o anumită valoare arbitrară. Când lucrați cu un registru, o unitate logică trebuie să fie localizată la acest pin.

    - O.E.(activare ieșire) dacă aici se aplică un 1 logic, ieșirile vor fi într-o stare HI-Z de înaltă rezistență. Când aplicăm 0 logic acestei intrări, ieșirile vor fi în stare de funcționare.

    - Q7′ conceput pentru conectarea în serie a registrelor de deplasare.

    Dar este mai bine să vezi o dată decât să citești de două ori =) așa că hai să ne uităm la animație:


    Lucrul direct cu registrul

    Atunci când stăpâniți munca cu un microcircuit necunoscut, este adesea util să lucrați direct, adică strângeți direct comenzile cu picioarele, acest lucru vă permite să înțelegeți mai bine principiile de lucru cu subiectul testat. Deci, urmând logica lucrării, am scris un program care ar trebui să scoată numărul binar 10010010 la ieșirea registrului

    $regfile = "attiny2313.dat"
    $cristal = 1000000

    Config Portb = Ieșire

    Sh_cpAlias Portb. 3 „picior pentru impulsuri de ceas
    DsAlias Portb. 2 "picior de ieșire de date
    St_cpAlias Portb. 0 „picior pentru „blocarea” datelor în registrul de deținere


    "ieșire prin registrul numărului 146 (în reprezentare binară 10010010)

    St_cp= 0 „Pune piciorul în modul de înregistrare a datelor

    Ds= 1 „setează primul bit
    Sh_cp= 0 „dăm un impuls ieșirii ceasului
    Sh_cp= 1

    Ds= 0 „setează al doilea bit
    Sh_cp= 0
    Sh_cp= 1

    Ds= 0 „setează al treilea bit
    Sh_cp= 0
    Sh_cp= 1

    Ds= 1 „setează al patrulea bit
    Sh_cp= 0
    Sh_cp= 1

    Ds= 0 „setează al cincilea bit
    Sh_cp= 0
    Sh_cp= 1

    Ds= 0 „setează al șaselea bit
    Sh_cp= 0
    Sh_cp= 1

    Ds= 1 „setează al șaptelea bit
    Sh_cp= 0
    Sh_cp= 1

    Ds= 0 „setează al optulea bit
    Sh_cp= 0
    Sh_cp= 1

    St_cp= 1 „snap datele introduse

    Sfârşit


    compilăm, încorporam în microcontroler sau ne uităm în simulator și vedem combinația noastră la ieșire.


    Funcționează, numărul trimis apare la ieșirea registrului!

    Lucrul cu un registru în acest fel, deși posibil, este prea greoi și ocupă multă memorie de program. Dar demonstrează în mod clar întreaga metodologie de lucru cu acest microcircuit. Să luăm în considerare o metodă mai potrivită.

    Controlul registrului 74HC595 în Bascom folosind comanda ShiftOut

    Bascom-AVR are o echipă grozavă pentru lucrul cu tot felul de interfețe seriale SHIFTOUT
    Această comandă în sine va descompune numărul în componente de biți și le va scoate secvențial la orice pin al microcontrolerului în același timp, poate emite impulsuri de ceas. Exact pentru a lucra cu registre de deplasare! Sintaxa comenzii:

    SHIFTOUT Datapin, Clockpin, var, opțiune


    Datapin – port pentru microcontroler pentru ieșirea datelor

    Clockpin – port de microcontroler pentru ieșirea impulsurilor de ceas

    Var – date pe care dorim să le trimitem la registru

    Opțiune – un număr de la 0 la 3, acest parametru selectează ordinea în care datele vor fi introduse în registru și nivelul activ pe linia de ceas la care este scris bitul:
    opțiunea=0 – bitul cel mai semnificativ este primul, Ceas nivel activ scăzut
    opțiune=1 –
    partea cea mai semnificativă vine pe primul loc, Ceas nivel activ ridicat
    opțiune=2 –
    bitul cel mai puțin semnificativ este primul, Ceas nivel activ scăzut
    opțiune=3 –
    bitul cel mai puțin semnificativ este primul, Ceas nivel activ ridicat

    În cazul nostru, pentru a lucra cu registrul 74HC595, parametrul opțiunii trebuie setat la 1 sau 3.

    Pentru a bloca datele într-un registru, utilizați comanda PulseOut. Această comandă emite un impuls către piciorul microcontrolerului cu o durată specificată. Configurația comenzii arată astfel:

    Acum să scoatem numărul 10010001 (145 în sistem zecimal) la ieșirea registrului conectat la microcontroler conform diagramei de mai sus:

    $regfile = "attiny2313.dat"
    $cristal = 1000000

    Dim A La fel deoctet
    Config Portb = Ieșire

    A= 145

    Gosub Hc595 „Mergem la subrutina de trimitere a datelor

    Sfârşit

    Hc595: „Rutina de trimitere a datelor

    Schimbare Portb. 2, Portb. 3, A, 1 „trimite date la registru
    Pulseout Portb, 0, 5 „snap date
    Întoarcere

    După ce ați aprins microcontrolerul, puteți vedea o imagine similară, combinația de biți trimisă este setată la ieșirea registrului de deplasare.


    După cum puteți vedea, controlul registrului de deplasare 74HC595 în Bascom constă doar din două linii de cod și nu prezintă dificultăți.

    Creșterea adâncimii biților