Laitteisto XOR AVR-mikrokontrollereille

July 18, 2022 0 By adsvn

Tiesitkö, että monet AVR-sirut ovat tyyppiä laitteistoon yksinoikeudella tai (XOR) vaihtoehtona, kun se koskee lähtötappien logiikkatasoja? Jos katsot lomakkeessa (yllä oleva kuva on kuvakaappaus Attiny13-Datalehdeistä) Löydät osan PIN-koodin siirtämisestä. On osoittautunut, että jos asetat portin lähtöön, logiikan kirjoittaminen vastaava PIN-rekisteri vaihtaa sen logiikkatasot. Tämä on todella helppoa laiminlyödä, jos kirjoitat C: ssä, mutta olen työskennellyt oppimisen myötä hieman kokoonpanoa ja löysin tämän olevan erittäin hyödyllinen. Pidä lukemista tauon jälkeen ja kerron teille, miten olen tapahtunut tästä tietoa ja mitä se on hyvä.

Joten ensin, puhutaan siitä, miksi tämä ei ole väliä kovin paljon, jos kirjoitat C-koodia. Tyypillisesti, jos haluat vaihtaa joitakin lähtötappeja, kirjoitat vain yhden linjan, jonka Xor on bitmask:

1
Portb ^ = 0xFF;

Tämä on vähän Cordhand (oppia paljon muuta tästä opetusohjelmasta), joka suorittaa Xorin nykyisissä lähtötasoilla ja kirjoittaa tuloksen takaisin porttiin. Mutta sama asia voidaan tehdä laitteistossa kirjoittamalla bitmask PINB-rekisteriin:

1
PINB = 0XFF;

Et todellakaan välitä, koska se on vain yksi rivi koodi. Itse asiassa se on todennäköisesti yksinkertaisempi XOR Portb, koska se tekee paljon järkevämpää käsitteellisesti. Mutta kääntäjä saattaa päätyä käyttämällä paljon enemmän syklejä kuin jos olisit kirjoittanut PIN-rekisteriin.

Olen tapahtunut tämän ominaisuuden yli, koska vilkkuu joitakin LEDit tapa oppia kokoonpanoa. Minulla oli tämä koodin jumble-koodi keskeytyspalvelun rutiinissa:

1
2
3
4
LDI MEGEG, 0XFF
Intreg, Portb
Eor Intreg, Myreg
Out Portb, Intreg

Se lataa bitmask yhdeksi rekisteriksi, lataa nykyiseen logiikkaan PortB: stä toiseen rekisteriin, suorittaa Xorin kahdesta ja kirjoittaa tuloksen takaisin Portb. Tämä kestää neljä sykliä ja vaatii kaksi rekisteriä. Vaihtobitti on tällainen alkeellinen toiminta, jonka olin hämmästynyt, ei ollut komentoa XOR-bittejä suoraan, joten aloin etsiä ympäri. Autoin tämän lyhyen artikkelin yli AVR-freaksissa, jotka halusivat minut bittien vaihtoominaisuuteen. Nyt pystyin vähentämään kokoonpanointikoodi seuraavasti:

1
2
LDI Intreg2, 0XFF; tilapäisyys käyttää Intreg2 bittimaskina
Out Pinb, Intreg2; kirjoittaminen Pinb Flefevleylle tekee yksinoikeudella tai portilla

Tämä johtaa samaan vaihtoehtoon, mutta vie vain kaksi sykliä ja vaatii vain yhden rekisterin käytön.

Mitä löysin monia mielenkiintoisia, on se, kuinka paljon käytän AVR-pelimerkkejä, ei ole koskaan pulaa yllätyksiä, jotka odottavat löytyy lomakkeita.