[elektro] PIC, TRMT
potyo
potyo.ada at gmail.com
Fri Sep 20 16:14:58 CEST 2013
Persze, hogy akármi lehet, ezért nézed meg, hogy EGYIDEJŰLEG egyes-e a TXIE
és a TXIF. Ha igen, akkor van hely a TXREG-ben, beleteszel valamit. Ha ezek
ketten nem egyesek egyidejűleg, akkor nincs hely a TXREG-ben, vagy pedig
előzőleg letiltottad a TXIE-t, vagyis nem emiatt futott rá a megszakítási
rutinra.
if (TXIF && TXIE)
{
// TX megszakitas
TXREG=puffer[hanyadik];
hanyadik++;
if (ez volt az utolso bajt)
{
TXIE=0;
}
}
if (TMR0IF && TMR0IE)
{
// timer0 megszakitas
}
if (ADIE && ADIF)
{
// ADC vegzett
}
Főprogramban, vagy bárhol, akár megszakításban, ha előáll küldeni való
adat, akkor betenni a küldendő pufferbe az adatot, majd TXIE=1, ezután
azonnal jönni fog egy megszakítás, és a megszakítás teszi bele a TXREG-be
az első bájtot. Ezután jönni fog mégegy megszakítás, mert még mindig van
hely a TXREG-ben a dupla pufferelés miatt, tehát mégegy bájtot beleteszel.
Ha esetleg csak egyetlen bájtot akartál küldeni, akkor az első után azonnal
tiltod is a TXIE-t.
A dupla belépést elkerülheted, ha a megszakításban nem if-et használsz,
hanem while-t:
while (TXIF && TXIE)
{
...
}
Nemtudom, C-ben dolgozol-e, de a logikát remélem így már átlátod
2013. szeptember 20. 15:42 Balla Zoltán írta, <sdrlab at yandex.ru>:
> Feladó: "potyo" <potyo.ada at gmail.com>
> > ugorjon a megszakítási címre. Odamegy, megnézed, hogy a TXIE és a TXIF
> > egyidejűleg magasak-e, mivel igen, azt jelenti, hogy van hely a
> TXREG-ben,
> > beleírsz valamit.
> >
> Na de éppen ezzel van a bajom...hogy honnan tudom, hogy a soros port
> okozott megszakítást, hiszen a
> flag már beállt egybe, tehát akármi is lehet, amit ez a megszakítási
> vektor szolgál ki!
> Feltételezve, hogy több megszakítás is ide fut be, és a flag vizsgálat
> döntené el, mi is okozta! De
> itt meg mintha ez nem így menne....
> Persze, lehet azt mondani, mivel a többi periféria nem okozott
> megszakítást, akkor biztos a soros
> port volta az elkövetője...de ez így vicces szerintem...
>
> Zoli
>
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list