Te írtad:
"De az alap ARM-nál nincs ilyen, az kap egy IRQ-t, és van 1 db ISR"
"a hagyományos ARM az olyan, mint a 6502 volt [...] Ennél valóban neked kell az ISR-ben ellenőrizni, hogy honnan jött a megszakítás."
Én írtam:
"Pontosan. Ezt hívtam alacsony szintű ISR-nek, és erre mondtam, hogy ezt nem lehet C függvényként megírni"
Te írtad:
"Nekem úgy tűnik, ha az ARM core elkezdené az ISR-t, az AIC "alányúl", és lecseréli a PC-t arra, ami a saját vektortáblájában van."
"innentől igenis a HW kezeli."
Erre írtam:
"Persze, hogy a HW kezeli (mégis, mi más kezelhetné?), na de nem a CPU."
(itt CPU alatt az ARM core-t kell érteni, ha esetleg nem lenne tiszta, a HW pedig az, ami CPU-nak "alányúl")
Te írtad, hogy nem tudod, hogy "az extra vektorok kezelése vajon hol történik, az ARM core-ban is kell, hogy legyen némi változtatás, hogy az egy szem IRQ handler helyett lehessen max. 256 (NVIC-nél)."
Na, az alacsony szintű megszakítás kezelő pont az, ami ezt végzi, ez normál ARM-nél egyetlen ISR, és ami NVIC esetében (állításod szerint nem ROM kód vagy built-in lib vagy mittoménmi, hanem) állítólag hardveres hákolás (nem tudom, pontosan mire gondoltál az "alányúl" alatt, de hardveres hákolásnak hangzik).
Egyik esetben sem lehet ezt az alacsony szintű kezelőt C-ben megírni, első esetben speciális utasítás kell, második esetben meg nem is ARM kódról van szó (az általuk kiválasztott, IRQ-nak megfelelő lekezelő ARM-os függvény már mindkét esetben lehet C-ben természetesen).
mi a tosznak kell, hogy egy HW regiszter mutasson rájuk?Pontosan. Nem ARM CPU-os rendszerregiszter mutat rá, hanem egy, CPU-tól tök független periféria regisztere, ami periféria nem része a "normál" ARM-nek, nem szerepel a DDI0487 specifikációban sem, csak bizonyos mikrokontrollerek esetében található meg, (a Te szavaiddal) alap ARM-nál nincs ilyen. Én így fogalmaztam: "Ezt NEM a CPU generálja, hanem valamilyen, CPU-tól független áramkör, amit jellemzően interrupt controllernek hívnak (IC)." A teljesség kedvéért, ez x86-on is ugyanúgy történik, ott is egy, a CPU-tól független áramkör kezeli az IRQ-kat. Az eredeti IBM PC-ken ez a 8259-es PIC volt és fizikailag is külön chip volt, manapság pedig az ugyanabba a SoC-ba integrált local APIC. Akárcsak az ARM esetében, ezeket sem CPU regiszterekkel programozod, hanem a CPU-tól független perifária regisztereken keresztül (hogy egész pontos legyek, ezek a perifária regiszterek eredetileg IO porton keresztül voltak elérhetők, aztán MMIO-n keresztül, legújabban meg model specifikus regisztereken keresztül).