[elektro] Cortex M4 Interrupt, stack
Bali Zoltan
eltexto at freemail.hu
Tue Apr 7 18:15:33 CEST 2015
Szia Gábor!
Hát ezt a phantomot nem igazán értem, de még emésztem :).
A konverziós módokat átnézem, ez most nálam STM32F0x1 -en
aktuális.
Köszi
Üdv. Zoli
2015.04.07. 15:38 keltezéssel, hg12345 írta:
> Hiaz IT verembe nem célszerű belenyúlni, de amúgy megoldható, de CORTEX M3/4 magok összetett utasításai nem ATOMIC szerűek, ezekbe is képes az IT bele szakítani. (A hibakezelő IT-kben (NMI) ezt csinálják, fölkapják a stack tetejét és azt analizálják ki. Amúgy ha már idejutott a program akkor teljesen mindegy, mert újra indítás következik.... De ezek már olyan magas szintűek, amiket már csak a Reset tud megszakítani.Amúgy a stack-en a következő adatok vannak a sorrendben nem vagyok biztos: r0...r3 és r12...15 (szerintem fordított a sorrend), ha ezeket felszeded, akkor még az NVIC-t nem kezelted..... Szerintem "phantom" megszakítással érdemes próbálkozni, mivel "phantom" megszakítást akárki generálhat, ez lehetséges a NVIC-ben, a magasabb IT- generál egy "phantom" megszakítást a ADC6+DMA IT-re plusz a egy FLAG-et, ennek hatására az magasabb IT lefutása után valószínűleg ez az IT fog jönni, teszteled a FLAG-t ha igen akkor gyorsan megcsinálod az átprogramozást és kész. Természetesen, ha szükséges az előző állapot menthető és a visszaállítás is megoldható. Az ST uC több fajta konverziós sorrend létezik, így megoldható akár független eseményre való konvertálás, akár négy előre programozott bemeneti csatornán... Persze közben megy a scan vagy szóló beállított konverzió...
> "Bali Zoltán" <eltexto at freemail.hu> írta:
>> Hali!
>>
>> Van egy DMA csatorna interupt-al. Alap esetben
>> megy az ADC 6 csatornájának a mentése ezzel
>> a DMA csatornával. Egy eseménykor, aminek a
>> legmagasabb prioritású interruptja van, át kell
>> programozni az ADC-t két csatornára és a DMA-t
>> félbe szakítania, majd azt is az ADC két csatornához,
>> meg más célterületre felprogramozni. Eközben még fenn
>> állhat az alap eset szerinti, a magas prioritás miatt
>> félbeszakított alap DMA interrupt, amire nincs szükség, sőt
>> zavaró és komlpkálja a kezelést.
>>
>> Ki lehet ezt a magas prioritású it futásakor szedni
>> valahogy stack manipulációval? Gondoltam valami POP-PUSH
>> kombinációval, de nem látom át hirtelen a bukatókat.
>> Ki kellene a futó IT exc. frame-jét szedni és menteni, majd az alatta
>> levő exc. framet is persze csak beazaonosítás után, végül visszapakolni a mentett
>> frame-et. Működhet ez? Vajon mennyi időmbe kerülhet ez?
>> Vagy, egy frame memcpy a stacken lefele, gondolom a frame méret állandó,
>> aztán a stack pointert arra állítani. Talán gyorsabb mint a push-pop.
>>
>> Köszi
>>
>> Üdv. Zoli
>>
>>
>>
>>
>> -----------------------------------------
>> elektro[-flame|-etc]
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list