[elektro] PIC 16 bit megszakítás
Zoltán Balla
sdrlab at yandex.ru
Fri Oct 31 11:19:21 CET 2014
Sziasztok!
Adott egy 16 bites DsPIC környezet. Van egy megszakítás, a soros port
adására, mely szerint ha kiürült a FIFO, megszakítást generál. Ekkor a
kiszolgáló rutin inkrementál egy tömböt cimző index változót, ha az
kisebb, mint a max érték, és újabb byte-ot helyez a FIFO-ba. A flag
törlése a megszakításkezelő elején történik.
A tünet a következő: minden tömb(adat) küldése inicializálásakor az
index nem incrementálódik, az az ugyanazt az indexű byte-ot küldi el
mindig konzekvensen.
Elemezve az egyetlen értelmes feltételezés az volt, hogy mivel a rutin
elején van törölve a flag, így a megszakítási feltétel újra fennáll, és
azonnal belép újból a kiszolgáló rutinba. Így még az index
inkrementálása előtt mégegyszer bekerül a FIFO-ba ugyanaz a címzett
byte. Az utána következő adatok már jól mennek, végig.
A kérdésem az, létezik az, hogy beléphet ugyanabba a megszakításkezelőbe
úgy, hogy még az előző nem lett kiszolgálva ? Emlékeim szerint, mintha
hardveres tiltás kéne, hogy legyen addig, amíg ki nem lép a megszakítási
rutinból... Vagy ez csak a 8 biteseknél volt így ?
Zoli
More information about the Elektro
mailing list