SlideServe
Menu
Préférences
© SlideServe · v2026

Windows CE, Installable ISR

trynt avatar
7 diapositives · 257 Views · Aug 24, 2014

Windows CE, Installable ISR. alphabet@hotmail.co.kr rechoco.egloos.com. GIISR. MS 에서 제공하는 Generic Intallable ISR IRQ <-> interrupt id 간의 Statice mapping 을 사용할 경우 사용할 인터럽트가 추가되거나 변경될 시 BSP 의 여러가지 부분에 대한 수정을 요구하게 됨

Windows CE, Installable ISR - slide 1
01 / 7Windows CE, Installable ISR
1 / 17

Télécharger la présentation

Windows CE, Installable ISR
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. Windows CE, Installable ISR alphabet@hotmail.co.kr rechoco.egloos.com

  2. GIISR • MS에서 제공하는 Generic Intallable ISR • IRQ <-> interrupt id 간의 Statice mapping을 사용할 경우 사용할 인터럽트가 추가되거나 변경될 시 BSP의 여러가지 부분에 대한 수정을 요구하게 됨 • Installable ISR을 사용할 경우 커널의 컴파일 없이 드라이버 레벨에서 interrupt mapping을 생성하게 되므로 커널의 변경없이 interrupt를 추가할 수 있음 • IISR은 특정 IRQ와 동적으로 할당받은 interruptid를 커널에 등록하는 방법 • 참고사이트 http://msdn.microsoft.com/en-us/library/ms892237.aspx

  3. Sequence • System Logical ID 동적할당(KernelIoControl) • IISR.DLL 등록 (LoadIntChainHandler) • 응답조건 설정 • 인터럽트 분기방식에 따라 처리해주어야 함 • GIISR_INFO page 참조 • 응답조건 등록(KernelLibIoControl)

  4. Sample Code HANDLE m_hIsrHandler; //giisr 핸들 GIISR_INFO Info; //irq to logical id 변환 옵션 저장소 DWORD irqnum; // hardware IRQ DWORD SystemLogicalID; // logical id //Logical ID 동적 할당 KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, & irqnum, sizeof(UINT32), & SystemLogicalID, sizeof(UINT32), NULL); //IISR 핸들러가 들어있는 dll을 커널에 등록 m_hIsrHandler = LoadIntChainHandler(“tcc_giisr.dll”, "ISRHandler", irqnum); //변환옵션 설정 - X1 value & X2 가 true일 경우 Logical ID를 리턴 memset(&Info, 0, sizeof(GIISR_INFO)); Info.CheckPort = TRUE; Info.PortIsIO = FALSE; // TRUE only used for X86 Info.SysIntr = SystemLogicalID; Info.UseMaskReg = FALSE; Info.MaskAddr = 0; // (Optional 설정) info.PortAddr = X1; // 인터럽트 발생시 set 되는 레지스터의 주소 Info.Mask = X2;// 인터럽트 발생시 set 되는 비트위치 Info.PortSize = sizeof(DWORD);// X1의 레지스터 크기

  5. Sample Code (cont) //변환 옵션 등록 KernelLibIoControl(m_hIsrHandler, IOCTL_GIISR_INFO, &Info, sizeof(GIISR_INFO), NULL, 0, 0); //인터럽트 사용 InterruptInitialize(SystemLogicalID, relative event); // 인터럽트 해제 InterruptDisable( SystemLogicalID); FreeIntChainHandler(m_hIsrHandler); KernelIoControl(IOCTL_HAL_RELEASE_SYSINTR, &SystemLogicalID, sizeof(UINT32), NULL, NULL, NULL);

  6. GIISR_INFO 설정(3종류) • GIISR_INFO Info; • memset(&Info, 0, sizeof(GIISR_INFO)); • Info.SysIntr = SystemLogicalID; • Info.PortIsIO = FALSE; • Case 1: irq를 공유하지 않는 경우 • Info.CheckPort = FALSE; • returnSystemLogicalID • Case 2: irq를 공유하며 Mask 값이 고정일 경우 • Info.CheckPort = TRUE; • Info.PortSize = sizeof(DWORD); • Info.PortAddr =virtual mapped address; • Info.Mask = MASK; • Info.UseMaskReg = FALSE; • Info.MaskAddr = 0;  return Port Value & MASK ? SystemLogicalID:SYSINTR_CHAIN • Case 3: irq를 공유하며 MASK값을 특정레지스터에서 결정할 경우 • Info.CheckPort = TRUE; • Info.PortSize = sizeof(DWORD); • Info.PortAddr =virtual mapped address1; • Info.UseMaskReg = TRUE; • Info.MaskAddr = virtual mapped address;  return Port Value & MaskValue ? SystemLogicalID:SYSINTR_CHAIN

  7. GIISR의 동작 ISRHandler CheckPort *NkCallIntChain • 내부적으로 ISR핸들러를 호출함 • SYSINTR_CHAIN이 반환될 경우, 등록된 다음 ISR핸들러를 호출 • Valid한 Logical ID가 반환될 경우, ISR호출 종료후 리턴 Interrupt Occured N Y Portvalue = GIISR_INFO.PortAddr Mask = GIISR_INFO.Mask OEMInterruptHandler Logical ID = NkCallIntChain Return SysIntrID GIISR_INFO.SysIntrID UseMaskReg N Y Mask = GIISR_INFO. MaskAddr SYSINTR_CHAIN GIISR_INFO.SysIntrID Portvalue&Mask N Y