Compartilhar via


Implementing an ISR

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

Uma rotina serviço interrupção (ISR) é codificar que manipula interrupção solicitações (IRQs) no seu dispositivo destino. O ISR é o núcleo da OAL e é responsável por localizar uma origem interrupção, mascaramento-lo e retornando um identificador exclusivo para o kernel Windows Embedded CE para indicar qual driver precisa ser usado para identificador de evento.

O ISR só precisa foco na interrupção timer marcação até outros periféricos usuário such as do teclado, mouse, PCMCIA e USB, são adicionados.

Ao suporte para outras fontes interrupção são adicionados ao ISR, existem outras rotinas suporte interrupção que precisarão ser implementadas para hardware mapeamento interrupções para exclusivo identificadores — IRQ-> mapeamentos SYSINTR, habilitando e desabilitando interrupções e assim por diante.

Usando seu codificar OAL, Windows Embedded CE associa um ISR. de cada IRQ Quando uma interrupção ocorre, manipulador de exceção do o kernel chama o ISR registrado para esse interrupção.

Microsoft otimizou o kernel para cada microprocessador e define constantes que especificar o número de linhas de IRQ disponível para cada microprocessador.

Usando a função HookInterrupt na OAL, você pode registrar ISR apenas um para cada linha de IRQ. No entanto, você pode associar um ISR com um ou mais identificadores interrupção. Além disso, cada ISR possui a seguinte características:

  • Realiza processamento interrupção mínima que é o suficiente para verificar e confirmação de hardware que está declarando de interrupção, deixando a maioria do processamento para ser realizado por segmento serviço de interrupção (ist).

  • Retorna um identificador interrupção para o kernel quando terminar. Isso faz com que o kernel ao cronograma a apropriado ist posteriormente.

    Observação

    O manipulador de exceção Windows Embedded CE somente salva e restaura poucos registradores dependendo o microprocessador sendo usado. A seguinte tabela mostra os registradores você pode usar.

    Microprocessador Registra

    ARM

    Todos os registros estão disponível para uso.

    MIPS

    Registra v0, v1, AT, T0 através de t7, e A0 através de A3 estão disponível para uso.

    SHx

    R0 registradores através de r7 estiver disponível para uso.

    x 86

    Todos os registros estão disponível para uso.

Um driver de dispositivo ou a OAL pode associar o identificador interrupção com um evento, criando um ist e chamado a função InterruptInitialize. O IST, em seguida, aguarda o evento.

Quando o ISR retorna para o kernel, o kernel examina o identificador retornado interrupção e define o associado evento. O manipulador serviço interrupção do kernel agenda a execução do ist que criou o driver ou OAL.

O ist chama funções na plataforma de hardware-dependente camada driver para ler a partir e gravação para o dispositivo destino.

Para gerenciar ISRs, você deve implementar o ISR funções que permitem que o kernel para começar, serviço, gerenciamento e completo processamento interrupção.

A seguinte tabela mostra as funções você deve implementar para gerenciamento ISR suporte.

Função Descrição

OEMInterruptDisable

Desativa uma interrupção hardware especificada.

OEMInterruptDone

Conclusão sinais de interrupção processamento.

OEMInterruptEnable

Executa operações hardware necessárias para habilitar uma interrupção hardware especificada.

Um driver de dispositivo chama o InterruptInitialize, InterruptDisablee InterruptDone funções para habilitar ou desativar interrompe ou para sinalizar o kernel que é processamento completo para uma interrupção.

O kernel converte essas chamadas para o OEMInterruptEnable, OEMInterruptDisable, e OEMInterruptDone funções, respectivamente.

Você pode usar as informações que o kernel passa para OEMInterruptEnable Para inicializar uma interrupção ou para alocar espaço transitório para o firmware Vendor-defined ISR.

Quando um driver chama InterruptInitialize, o kernel será, em seguida, chamar OEMInterruptEnable.

ISR gerenciamento funções geralmente uso alternar instruções para decodificar o identificador interrupção e trabalhar no associado interrupção hardware. O seguinte mostra exemplo de código como OEMInterruptEnable Verifica cada o com suporte identificadores interrupção.

BOOL OEMInterruptEnable (DWORD idInt, LPVOID pvData, DWORD cbData)
{
  BOOL bRet = TRUE;    // Assume successful return value.

switch (idInt) {
  case SYSINTR_TOUCH:    
    // Enable touch screen analog-to-digital. converter (ADC) interrupt
    break;
  ...
  case SYSINTR_PCMCIA_EDGE:
    // Enable pcmcia edge interrupt and clear it, if one is pending
    break;
  ...
  default:
    bRet = FALSE;      // Return FALSE for an invalid interrupt. 
  }
return bRet;
}

Para obter mais informações sobre as interrupções, consulte o seguinte tópicos:

See Also

Tasks

How to Develop an OEM Adaptation Layer

Other Resources

Developing a Device Driver