2011-01-05 2 views
0

나는 VIC 효율적으로VIC (Vector Interrupt Controller)를 사용하여 외부 인터럽트를 효율적으로 처리하는 방법은 무엇입니까?

작은 배경은 (당신이 "ARM7"그래서 아마도이 질문 등, 코어 텍스 NVIC에 대해없는 태그 ..)
+1

VIC는 누구입니까? ARM7 코어는 인터럽트 컨트롤러를 정의하지 않고 공급 업체별 외부 주변 장치입니다. 또한, 귀하의 질문에 대해, 어떻게 하드웨어가 작동하는지 또는 하드웨어 작업 방법은 무엇입니까? 두 경우 모두 해당 업체의 데이터 시트/참조 설명서를 읽으십시오. – Clifford

+1

@Clifford : VIC는 ARM7 장치에서 흔히 사용되는 것으로, 태그가 라인 외부에 있지 않은 것으로 보입니다 (VIC가없는 ARM7 장치가 있습니까?). 그리고 RTFM이 질문에 대답한다는 사실 자체가 반드시 그 문제가 SO에 적절하지 않다는 것을 의미하지는 않습니다. 나는 여기서 질문의 대다수가 문서를 읽음으로써 대답 될 수 있다고 생각한다. –

+0

@Micheal Burr : 그건 내가 말하는 것이 아니다. 오히려 * Vectored Interrupt Controller *는 일반적인 용어로, 한 벤더가 구현하는 것이 반드시 다른 벤더의 구현과 동일하지는 않습니다. 다른 것들은 인터럽트 컨트롤러를 구현하고 또 다른 용어를 완전히 사용할 수 있습니다. 요점은 인터럽트 컨트롤러가 ARM에 의해 정의되지 않는다는 것입니다. – Clifford

답변

12

처음에는 외부 인터럽트를 처리 할 수있는 방법을 알고 싶어요 ARM 프로세서는 두 가지 유형의 인터럽트를 지원합니다 : 일반 인터럽트 (IRQ) 및 고속 인터럽트 (FIQ). CPU를 인터럽트 할 수있는 각 주변 장치는 IRQ 또는 FIQ를 트리거합니다. IRQ에는 단일 벡터가 있고 FIQ에는 단일 벡터가 있습니다.

주변 장치에서 IRQ/FIQ 로의 매핑이 하드웨어에서 수행되는 경우가 있으며 때로는 구성 가능합니다. 그러나 요점은 주변 장치 인터럽트가 2 개를 초과하면 인터럽트 벡터를 공유해야한다는 것입니다. 즉, 3 개의 인터럽트 소스가있는 경우 IRQ 또는 FIQ 중 하나 이상이 여러 장치에서 사용되는 것이 보장됩니다. 이것은 인터럽트를 취할 때 "왜 여기에 있습니까? 누가 나를 방해 했습니까?"를 알아 내기 위해 "폴링"(보통 하드웨어 레지스터)해야한다는 것을 의미합니다.

VIC의 전체 아이디어는 각 인터럽트마다 고유 한 벡터가 있다는 점입니다. 따라서 인터럽트 슬롯으로 벡터 전환하면 누가 당신을 방해하고 있는지 정확히 알 수 있습니다. 폴링 없음 "좋아, 누가 나를 방해 했니?"

ARM의 사이트에는 구성 정보, 레지스터 정의, 중첩/우선 순위 인터럽트 등 ARM VIC (및 그 많은 변형)에 대한 많은 정보가 있지만 VIC에서 인터럽트를 효율적으로 처리하는 방법 . 이 기능의 모든 세부 사항을 설명하는 것은이 질문의 범위를 벗어납니다.

(가능한 한 작은 폴링/질의를 통해 "효율적으로"해석 됨) VIC에서 지원하는 우선 순위가 지정된 인터럽트는 우선 순위가 높은 인터럽트의 대기 시간을 줄이며 " "누가 나를 방해 했습니까?"라는 질문을하지 않아도 같은 범주에 넣지는 않지만 효율적입니다.) Primecell VIC에 대한 자세한 정보는 here at ARM's site에서 찾을 수 있습니다.

관련 문제