[elektro] Cortex M4 Interrupt, stack
Bali Zoltan
eltexto at freemail.hu
Tue Apr 7 18:03:49 CEST 2015
Akkor már késő, meg nem igazán működik jól,
próbáltam kikínlódni. Ilyen spec. felhasználáshoz
nem igazán részletes az adatlap. Pl. nem írja részletesen,
vagy csak elkerülte a figyelmem, hogy mi van
ha EN bittel leállítom a DMA-t, hogy áll le.
Azt írja, hogy bizonyos regiszterek nem törlődnek és
csak ilyenkor programozhatóak. Kb. Ennyi.
A Nuvotonnál jobb a helyzet, mert ott van RST bit is,
sőt minden perifériát resetelni lehet így. Csak hát ott meg
a sok apró hülyeség, de ezekkel már meg tanultam együtt élni.
Ebben, az ADC csatorna átkonfigurálós feladatban is jobb
a Nuv., mert ott nem egy adat regiszter van csak,
hanem minden csatornához van egy dedikálva egy data reg.
Így, ott főprogramban is meg tudom oldani
poll-ozással a nem időkritikus csatorna adatokat.
Ráadásul totál hülyeséget is tapasztaltam (ST-nél),
de még nem szűrtem ki hogy én vagyok e a hunyó,
hogy a DMA IT olyankor is lefut ( detektálás helye
a DMA IT- ben, töréspont a flagek törlése előtt),
hogy egy esemény flag sincs bebillenve. Persze
ebben a spec. felhasználásban is lehet valami
nem várt, hülye sorrendű DMA felprogramozás
váltja ki. Nem tom, majd még visszatérek rá.
Tovább bonyolítja a dolgot az ST-n, hogy ott
cirkular buffer módban próbáltam jelenleg.
Ami double buffer alkalmazásként van
programozva, a felénél dolgozom fel a
nem időkritikus adatokat.
Köszi
Üdv. Zoli
2015.04.07. 12:56 keltezéssel, elight írta:
> És nem lehet olyan fleget figyelni,
> hogy mikor nincs maradék , akkor állítod le?
> Vagy Asszinkron kell leállítani mindenképpen?
>
> Üdv István
>
>
> 2015-04-07 12:51 keltezéssel, Bali Zoltan írta:
>>> Szerintem küldj abort-ot a dma-nak, egyszerűbb.
>> Igen, ezt csináltam a Nuvotonnál, ott van RST
>> az állapot gépnek, de most át akartam térni
>> ST Cortexre, ott nincs semmi ilyenre lehetőség.
>> Ha leállítom(csak azt lehet), akkor utána még
>> önálló életet él az állapotgép. Gondolom a
>> transzfer vége az alaphelyzetbe kerülés feltétele,
>> meg pipeline érzésem van.
>> Vsz. maradok a Nuvnál a nyűgjeivel, de ott is fennállhat, hogy
>> a fontos magas prio esemény megszakítás alatt, ott
>> figyelhet a veremben egy normál félbehagyott
>> adc-dma transfer mexszakítás, ami ekkor már lényegében
>> értéktelen, el kellene dobnom, nehogy lefusson a maradék
>> része, amikor már itt felprogramoztam az ADC-t, DMA-t az új
>> feladatra.
>>
>> De majd próbálkozok a stack manipulációval.
>>
>> Köszi
>>
>> Üdv. Zoli
>>
>>
>>
>> 2015.04.07. 12:15 keltezéssel, Info írta:
>>> Szerintem küldj abort-ot a dma-nak, egyszerűbb.
>>> Halmozott lesz az IT verme, szóval arrébblökni
>>> egy keretnyi mérettel nem lesz kifizetődő :)
>>> Csak csere, pop vagy akármilyen módszerrel.
>>>
>>>> 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.
>>> -----------------------------------------
>>> elektro[-flame|-etc]
>>>
>>>
>> -----------------------------------------
>> elektro[-flame|-etc]
>>
> -----------------------------------------
> elektro[-flame|-etc]
>
>
More information about the Elektro
mailing list