Kysymys:
Mihin UART TX-keskeytys on tarkoitettu?
user129900
2016-11-22 03:29:16 UTC
view on stackexchange narkive permalink

Tiedän, että RX-keskeytystä käytetään tietysti kyselyjen tallentamiseen, mutta miksi myös TX?

Sama syy.Lähetät usein pitkän viestin merkin kerrallaan.
Koodi, joka on tehtävä hyvin vähän muuta, voi estää todellisen lähetyksen.Tehokkaampi koodi voi tyhjentää ohjelmistopuskurin keskeytyksessä.Silti kehittyneempi koodi sitä tukevalle laitteistolle voi asettaa DMA-moottorin pumppaamaan siirtoa häiritsemättä prosessoria tärkeämmästä työstä, vaikka sarjasiirtonopeudet ovat usein melko hitaita MCU-termeillä, mikä ei välttämättä aina ole tärkeää.
Jos kysyt UART TX -katkoksesta tietyntyyppiselle laitteelle, lähetä linkki sen taulukkoon.
Keskeytys, jonka muut ovat maininneet, osoittaa, että uartissa on käytettävissä puskuritilaa enemmän lähetystietoja varten.Puskuri voi olla yhden tai useamman tavun pituinen riippuen uart-laitteistosta.Usein tapahtuu erilainen "siirron täydellinen" keskeytys, joka ilmoittaa, että kaikki bitit on siirretty pois uartista.Tätä voidaan käyttää muihin tarkoituksiin, kuten lähetin-vastaanottimen vaihtamiseen lähettämisestä vastaanottoon.
Viisi vastused:
DPF
2016-11-22 03:38:34 UTC
view on stackexchange narkive permalink

TX-keskeytys on pääasiassa pidempiä datagrammeja varten.Voit aloittaa siirron tunnetun pituisen puskurin (tavumäärä) kohdalla.Nyt voit työntää puskuriosoitinta niin usein kuin lähetettäviä tavuja, kun TX-keskeytys tapahtuu.Tämä varmistaa puskurisi "mahdollisimman nopean" siirtämisen ilman, että sinun on kysyttävä mitään "TransferComplete" -lippua / Statusbitia.

Dirceu Rodrigues Jr
2016-11-22 03:50:28 UTC
view on stackexchange narkive permalink

Lähetyksen keskeytyksen (oikeastaan LOPETUKSEN LOPPU) päätavoitteena on lähettää puskurin sisältö (useita tavuja) automaattisesti.Kun se toteutetaan asianmukaisella tavalla:

  1. Ota TX-keskeytys käyttöön.
  2. Käyttäjäkoodi alkaa lähettää lähettämällä vain ensimmäisen tavun puskurissa.
  3. TX: n (ensimmäisen tavun) lopussa syntyy keskeytys.
  4. TX ISR: ssä (Interrupt Service Routine) koodin on lähetettävä seuraava tavu puskurissa ja päivitettävä puskurihakemisto.
  5. Tämän lähetyksen lopussa tapahtuu uusi keskeytys ja niin edelleen, kunnes koko puskurin sisältö lähetetään "automaattisesti".
  6. Poista TX-keskeytys käytöstä.

Tarkka käyttäytyminen riippuu mikro-ohjaimesta.Tämä on yleinen kuvaus.

Helppo yksinkertaistaminen monilla alustoilla on, että käyttäjäkoodi on vain vastuussa tietojen asettamisesta puskuriin ja keskeytyksen mahdollistamisesta.ISR poistaa keskeytyksen käytöstä, jos se laukeaa puskurin ollessa kuiva.
Surt
2016-11-22 05:11:50 UTC
view on stackexchange narkive permalink

Joissakin UARTS: issa on sisäinen puskuri, joka on suurempi kuin yksi, 16xxx-sarja yhdelle.

Menettely tässä oli

  1. Aseta lähetysikkunan peitteeksi esimerkiksi 4 jäljellä.
  2. täytä puskuriasemat, kunnes UART: n mukaan täyttä tietoa tai ei enää tarvitse lähettää tietoja
  3. tehdä muita asioita
  4. kun vain 4 puskuriasemaa jätetään lähettämättä, aseta TX-keskeytys
  5. odota keskeytyksen korjaamista
  6. jos enemmän tietoja on lähetettävä, siirry kohtaan 2.

Tämä vähentää suorittimen kuormitusta lataamalla osan prosessoinnista UART: iin, jolloin hitaammat suorittimet voivat pysyä yllä ja huoltaa muita tehtäviä keskeytymisen sijaan.

Simon Richter
2016-11-22 05:29:37 UTC
view on stackexchange narkive permalink

Lähetyksen keskeytys laukeaa, kun lähetyspuskurissa on tilaa.

Laitteilla, joilla ei ole lähetyspuskuria (ts. kun kirjoitat yhden tavun, joka siirretään välittömästi), keskeytys vahvistetaan, kun lähetysrekisteri voidaan kirjoittaa seuraavalla tavulla.

Laitteissa, joissa on puskuri, keskeytys tapahtuu toteutuksen määrittelemänä aikana.Joillekin se tapahtuu, kun puskuri on puoliksi tyhjä, joillekin se tapahtuu, kun viimeisen tavun lähetys on alkanut ja puskuri on täysin tyhjä.

Rev1.0
2016-11-22 04:20:15 UTC
view on stackexchange narkive permalink

Toinen käyttötapaus on se, kun yhdistät UART: n toiseen tiedonsiirtoliitäntään, kuten RS485.Ohjaimen on vapautettava väyläohjain heti, kun viimeinen bitti on siirretty pois TX-puskurista.Tätä on helppo käsitellä TX-keskeytyksessä, mutta se olisi hankala toteuttaa ilman sitä, koska joudut odottamaan tarkkaa aikaa viimeisen tavun kirjoittamisen jälkeen lähtöpuskuriin, joka vaihtelee myös siirtonopeuden mukaan.

RS485-käyttö toimii parhaiten, jos käytettävissä on lähetys-täydellinen keskeytys eikä vain lähetyspuskuri-käytettävissä.Varsinkin laitteissa, joissa on suuret puskurit, ainoa tapa saada keskeytys viimeisen hyödyllisen tavun lähettämisen jälkeen on syöttää ei-toivotut UART-tavut ja toivoa, että lähetys voidaan poistaa käytöstä ennen kuin ne menevät ulos.
@supercat: Olet todellakin oikeassa huomauttaessasi, että tämä vaatii Tx ** täydellisen ** keskeytyksen.Mutta mielestäni tämä liittyy edelleen kysymykseen.
Usein on mahdollista päästä toimeen vain puskurilla käytettävissä olevalla keskeytyksellä, mutta TX: n täydellinen keskeytys on usein parempi;Ajattelin, että voi olla hyödyllistä vahvistaa, miksi joillakin UART-laitteilla on erilliset keskeytykset puskurivalmiiksi ja lähetysvalmiiksi.


Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...