[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