ARM- interrupt/event

Jan Waclawek konfera na efton.sk
Středa Duben 10 20:25:39 CEST 2013


Dakujem za rozsiahly komentar do hlbky problematiky.

> Pokud je GPIO port primo na AHB sbernici (novejsi procesory),

STM23F4, t.j. je.

> Nyni zpet k prikladu s GPIO. Bit-banding je velmi ucinny pro praci s RAM,
> pro praci s porty se nehodi (zvlast ne pro zapis).

No, zrejme by sa dali najst (podobne umele ako som ja tu prezentoval) priklady toho, ked je to vyhodnejsie, ale ja som v praxi (najma kvoli prekvapujuco silnym prostriedkom ARMu co sa tyka manipulacii s bitmi) vela takych zatial nevidel. A to ani s RAM, ani pri citani portov.

> BB musi vykonat
> read-modify-write na urovni vnitrni sbernice jadra (nikoli AHB, ale tu
> pouzije 2x), takze precte ODR, zmeni a zapise zpet, tj.4-5 cyklu v
> idealnim pripade.

Myslim, ze 4 - ked boli v cykle len dva SEV a dva zapisy do BB aliasu ODR, tak 1 aj 0 na tom zapisovanom pine trvali presne 4 cykly.

> AHB je behem teto transakce zamknuta a jadro to zapisem
> do write bufferu ukoncilo, takze operace je atomicka, ale cas na sbernici
> si vezme... Navic meni jediny bit.

To, mimochodom, nemusi byt na zavadu. Konkretny priklad je nejaky bit-bangovany seriovy protokol typu SPI alebo I2C, kde su poziadavky na minimalne casovanie. Ak som si isty, ze urcita uroven bude vdaka popisanemu mechanizmu trvat najmenej N cyklov, tak s tym mozem ratat. Napr. u LPC17xx som zistil (a uz som tu o tom pisal), ze pri bit-bangingu cez bit-banding (pekne, nie? ;-) ) nastali dve zmeny na dvoch pinoch (toho isteho portu) zapisane v programe ako dve instrukcie (dokonca nie hned za sebou iduce) naraz, co je pre bit-banging fatalne (moj tip je, ze dovod spociva v nie prilis logickom umiestneni IO do oblasti ktora je Normal a nie Device, ale samozrejme mi to nikto nepotvrdil a do takej hlbky, aby som to vedel naisto, nevidim).

Ja viem, poviete, ze to tak myslene nebolo, ze tam mam hafo periferii a mam casovace a cojaviemco. Lenze mne je to sumafuk, ja som uzivatel a som zvyknuty kupene veci vyuzivat naplno. Ak mi ako vyrobca poviete, ze sa v tejto veci na N (minimalne trvanie nejakej udalosti) nemozem spolahnut, a nepoviete mi, ci existuje N na ktore sa mozem spolahnut, tak to vezmem na vedomie a bude to jedno z (malych, ale predsa) minusov pri najblizsom rozhodovani sa. Takto sa snazim spominanu dan za SoC vs. mcu minimalizovat.

To len aby som vysvetlil, ze preco sa v tychto veciach rypem.


> To je duvod, proc STM32 nabizi v GPIO registry BSRR a BRR, ktere umoznuji
> jedinym zapisem zmenit hodnotu libovolneho poctu bitu. Cela operace si
> vezme 2 takty a hotovo, zadne R-M-W cykly navic.

No, a teraz prosim vysvetlite, preco teda v tom prvom priklade ten pulz na PA2 trva len jeden cyklus...?

wek

PS. A ten SEV sa na vystupe objavi priamo v case vykonavania instrukcie, alebo v nasledujucom cykle?


> > Tie zapisy su buffrovane na rozhrani procesor/AHB, t.j. sa do portu
> > nezapisu okamzite (a je mozne, ze su nejako buffrovane aj v samotnom GPIO
> > module, kedze sposobuju v skutocnosti read-modify-write na skutocnom
> > vystupnom buffri).
> >
> > Detaily sa bohuzial nemate sancu dozvediet. Toto je jedna z dani za to, ze
> > tie 32-bitove jednocipy nie su mikrokontrolery (t.j. jednoliaty obvod
> > navrhnuty na riadiace ucely) ale SoC (zlepenec procesoroveho jadra,
> > pamati, periferii a roznych medzikusov) (aj ked sa vyrobcovia zurivo
> > snazia, aby terminologia na tento rozdiel nepoukazovala).
> >
> > wek
> >
> >
> >
> >
> > ----- Original Message ---------------
> >
> >>Jak je mozne, ze vystup rizen registrem je dlouhy jen jeden clock? Jadro
> >> umi
> >>paralelni zpracovani vice instrukci?
> >>
> >>J.S.
> >>
> >>
> >>On 04/10/2013 03:21 PM, Jan Waclawek wrote:
> >>>> SEV je vykonana okamzite, takze potrebujete-li nejak zobrazit
> >>>> casovou vzdalenost mezi dvema udalostmi, SEV reaguje rychleji (ale
> >>>> trva 1
> >>>> HCLK!) nez zapis na port.
> >>> Tak som si to vyskusal.
> >>>
> >>> http://www.efton.sk/STM32/r.png
> >>> http://www.efton.sk/STM32/r.c
> >>>
> >>> Hore su tie dva SEV, v strede su tie dva zapisy na port (jeden do
> >>> nastavovacieho registra, druhy do nulovacieho, t.j. BSRRL/BSRRH), dole
> >>> su
> >>> hodiny (HCLK).
> >>>
> >>> Ten posun zapisu na port voci tym SEV, a najma vzajomny posun tych
> >>> dvoch
> >>> zapisov na port - zapisy su od seba vzdialene minimalne 2 clocky vdaka
> >>> tomu SEV vlozenemu medzi nimi, ale pulz je dlhy len 1 clock - to vsetko
> >>> je
> >>> poucne.


Další informace o konferenci Hw-list